diff --git a/src/BCintegrator.cpp b/src/BCintegrator.cpp index 706439d3..2e6f198e 100644 --- a/src/BCintegrator.cpp +++ b/src/BCintegrator.cpp @@ -37,13 +37,13 @@ #include "outletBC.hpp" #include "wallBC.hpp" -BCintegrator::BCintegrator(bool _mpiRoot, MPI_Groups *_groupsMPI, ParMesh *_mesh, ParFiniteElementSpace *_vfes, - IntegrationRules *_intRules, RiemannSolverTPS *rsolver_, double &_dt, double *_time, - GasMixture *_mixture, GasMixture *d_mixture, Fluxes *_fluxClass, ParGridFunction *_Up, - ParGridFunction *_gradUp, const boundaryFaceIntegrationData &boundary_face_data, - const int _dim, const int _num_equation, double &_max_char_speed, RunConfiguration &_runFile, - Array &local_attr, const int &_maxIntPoints, const int &_maxDofs, - ParGridFunction *distance) +BCintegrator::BCintegrator(bool _mpiRoot, MPI_Groups* _groupsMPI, ParMesh* _mesh, ParFiniteElementSpace* _vfes, + IntegrationRules* _intRules, RiemannSolverTPS* rsolver_, double& _dt, double* _time, + GasMixture* _mixture, GasMixture* d_mixture, Fluxes* _fluxClass, ParGridFunction* _Up, + ParGridFunction* _gradUp, const boundaryFaceIntegrationData& boundary_face_data, + const int _dim, const int _num_equation, double& _max_char_speed, RunConfiguration& _runFile, + Array& local_attr, const int& _maxIntPoints, const int& _maxDofs, + ParGridFunction* distance) : groupsMPI(_groupsMPI), config(_runFile), rsolver(rsolver_), @@ -129,8 +129,8 @@ BCintegrator::BCintegrator(bool _mpiRoot, MPI_Groups *_groupsMPI, ParMesh *_mesh // Inlets if (NumBCelems > 0 && inletBCmap.size() > 0) { - Mesh *mesh_bc = vfes->GetMesh(); - FaceElementTransformations *tr; + Mesh* mesh_bc = vfes->GetMesh(); + FaceElementTransformations* tr; for (int i = 0; i < local_attr.Size(); i++) { int attr = local_attr[i]; @@ -145,15 +145,15 @@ BCintegrator::BCintegrator(bool _mpiRoot, MPI_Groups *_groupsMPI, ParMesh *_mesh } } - std::unordered_map::const_iterator ibc = inletBCmap.find(attr); + std::unordered_map::const_iterator ibc = inletBCmap.find(attr); if (ibc != inletBCmap.end()) ibc->second->setElementList(list); } } // Outlets if (NumBCelems > 0 && outletBCmap.size() > 0) { - Mesh *mesh_bc = vfes->GetMesh(); - FaceElementTransformations *tr; + Mesh* mesh_bc = vfes->GetMesh(); + FaceElementTransformations* tr; for (int i = 0; i < local_attr.Size(); i++) { int attr = local_attr[i]; @@ -168,15 +168,15 @@ BCintegrator::BCintegrator(bool _mpiRoot, MPI_Groups *_groupsMPI, ParMesh *_mesh } } - std::unordered_map::const_iterator obc = outletBCmap.find(attr); + std::unordered_map::const_iterator obc = outletBCmap.find(attr); if (obc != outletBCmap.end()) obc->second->setElementList(list); } } // Walls if (NumBCelems > 0 && wallBCmap.size() > 0) { - Mesh *mesh_bc = vfes->GetMesh(); - FaceElementTransformations *tr; + Mesh* mesh_bc = vfes->GetMesh(); + FaceElementTransformations* tr; for (int i = 0; i < local_attr.Size(); i++) { int attr = local_attr[i]; @@ -191,7 +191,7 @@ BCintegrator::BCintegrator(bool _mpiRoot, MPI_Groups *_groupsMPI, ParMesh *_mesh } } - std::unordered_map::const_iterator wbc = wallBCmap.find(attr); + std::unordered_map::const_iterator wbc = wallBCmap.find(attr); if (wbc != wallBCmap.end()) wbc->second->setElementList(list); } } @@ -225,11 +225,11 @@ void BCintegrator::initBCs() { } } -void BCintegrator::computeBdrFlux(const int attr, Vector &normal, Vector &stateIn, DenseMatrix &gradState, - Vector transip, double delta, double time, double distance, Vector &bdrFlux) { - std::unordered_map::const_iterator ibc = inletBCmap.find(attr); - std::unordered_map::const_iterator obc = outletBCmap.find(attr); - std::unordered_map::const_iterator wbc = wallBCmap.find(attr); +void BCintegrator::computeBdrFlux(const int attr, Vector& normal, Vector& stateIn, DenseMatrix& gradState, + Vector transip, double delta, double time, double distance, Vector& bdrFlux) { + std::unordered_map::const_iterator ibc = inletBCmap.find(attr); + std::unordered_map::const_iterator obc = outletBCmap.find(attr); + std::unordered_map::const_iterator wbc = wallBCmap.find(attr); if (ibc != inletBCmap.end()) ibc->second->computeBdrFlux(normal, stateIn, gradState, transip, delta, time, distance, bdrFlux); @@ -241,7 +241,7 @@ void BCintegrator::computeBdrFlux(const int attr, Vector &normal, Vector &stateI // BCmap[attr]->computeBdrFlux(normal, stateIn, gradState, radius, bdrFlux); } -void BCintegrator::updateBCMean(ParGridFunction *Up) { +void BCintegrator::updateBCMean(ParGridFunction* Up) { for (auto bc = inletBCmap.begin(); bc != inletBCmap.end(); bc++) { bc->second->updateMean(intRules, Up); } @@ -255,7 +255,7 @@ void BCintegrator::updateBCMean(ParGridFunction *Up) { } } -void BCintegrator::integrateBCs(Vector &y, const Vector &x, const elementIndexingData &elem_index_data) { +void BCintegrator::integrateBCs(Vector& y, const Vector& x, const elementIndexingData& elem_index_data) { for (auto bc = inletBCmap.begin(); bc != inletBCmap.end(); bc++) { bc->second->integrationBC(y, // output x, elem_index_data, Up, gradUp, boundary_face_data_, maxIntPoints, maxDofs); @@ -272,12 +272,12 @@ void BCintegrator::integrateBCs(Vector &y, const Vector &x, const elementIndexin } } -void BCintegrator::retrieveGradientsData_gpu(ParGridFunction *gradUp, DenseTensor &elGradUp, Array &vdofs, - const int &num_equation, const int &dim, const int &totalDofs, - const int &elDofs) { +void BCintegrator::retrieveGradientsData_gpu(ParGridFunction* gradUp, DenseTensor& elGradUp, Array& vdofs, + const int& num_equation, const int& dim, const int& totalDofs, + const int& elDofs) { #ifdef _GPU_ - const double *d_GradUp = gradUp->Read(); - double *d_elGradUp = elGradUp.ReadWrite(); + const double* d_GradUp = gradUp->Read(); + double* d_elGradUp = elGradUp.ReadWrite(); auto d_vdofs = vdofs.Read(); MFEM_FORALL(i, elDofs, { @@ -292,15 +292,15 @@ void BCintegrator::retrieveGradientsData_gpu(ParGridFunction *gradUp, DenseTenso #endif } -void BCintegrator::AssembleFaceVector(const FiniteElement &el1, const FiniteElement &el2, - FaceElementTransformations &Tr, const Vector &elfun, Vector &elvect) { +void BCintegrator::AssembleFaceVector(const FiniteElement& el1, const FiniteElement& el2, + FaceElementTransformations& Tr, const Vector& elfun, Vector& elvect) { Vector shape1; Vector funval1(num_equation); Vector nor(dim); Vector fluxN(num_equation); #ifndef _GPU_ - const double *dataGradUp = gradUp->HostRead(); + const double* dataGradUp = gradUp->HostRead(); #endif const int dof1 = el1.GetDof(); @@ -323,7 +323,7 @@ void BCintegrator::AssembleFaceVector(const FiniteElement &el1, const FiniteElem // element size double delta; - Mesh *mesh = vfes->GetMesh(); + Mesh* mesh = vfes->GetMesh(); delta = mesh->GetElementSize(Tr.Elem1No, 1) / el1.GetOrder(); #ifdef _GPU_ @@ -361,12 +361,12 @@ void BCintegrator::AssembleFaceVector(const FiniteElement &el1, const FiniteElem intorder++; } - const IntegrationRule *ir = &intRules->Get(Tr.GetGeometryType(), intorder); + const IntegrationRule* ir = &intRules->Get(Tr.GetGeometryType(), intorder); const int numActiveSpecies = mixture->GetNumActiveSpecies(); const int nvel = mixture->GetNumVels(); for (int i = 0; i < ir->GetNPoints(); i++) { - const IntegrationPoint &ip = ir->IntPoint(i); + const IntegrationPoint& ip = ir->IntPoint(i); Tr.SetAllIntPoints(&ip); // set face and element int. points diff --git a/src/BCintegrator.hpp b/src/BCintegrator.hpp index b28a3ea3..6c5d0ce0 100644 --- a/src/BCintegrator.hpp +++ b/src/BCintegrator.hpp @@ -51,74 +51,74 @@ class BCintegrator : public NonlinearFormIntegrator { friend class M2ulPhyS; protected: - MPI_Groups *groupsMPI; + MPI_Groups* groupsMPI; - RunConfiguration &config; + RunConfiguration& config; - RiemannSolverTPS *rsolver; - GasMixture *mixture; - Fluxes *fluxClass; + RiemannSolverTPS* rsolver; + GasMixture* mixture; + Fluxes* fluxClass; - double &max_char_speed; - IntegrationRules *intRules; + double& max_char_speed; + IntegrationRules* intRules; - ParMesh *mesh; + ParMesh* mesh; // pointer to finite element space - ParFiniteElementSpace *vfes; + ParFiniteElementSpace* vfes; // pointer to primitive varibales - ParGridFunction *Up; + ParGridFunction* Up; - ParGridFunction *gradUp; + ParGridFunction* gradUp; - ParGridFunction *distance_; + ParGridFunction* distance_; - const boundaryFaceIntegrationData &boundary_face_data_; + const boundaryFaceIntegrationData& boundary_face_data_; const int dim; const int num_equation; - const int &maxIntPoints; - const int &maxDofs; + const int& maxIntPoints; + const int& maxDofs; - std::unordered_map inletBCmap; - std::unordered_map outletBCmap; - std::unordered_map wallBCmap; + std::unordered_map inletBCmap; + std::unordered_map outletBCmap; + std::unordered_map wallBCmap; bool mpiRoot; double time; - double *pTime; + double* pTime; // void calcMeanState(); - void computeBdrFlux(const int attr, Vector &normal, Vector &stateIn, DenseMatrix &gradState, Vector transip, - double delta, double time, double distance, Vector &bdrFlux); + void computeBdrFlux(const int attr, Vector& normal, Vector& stateIn, DenseMatrix& gradState, Vector transip, + double delta, double time, double distance, Vector& bdrFlux); public: - BCintegrator(bool _mpiRoot, MPI_Groups *_groupsMPI, ParMesh *_mesh, ParFiniteElementSpace *_vfes, - IntegrationRules *_intRules, RiemannSolverTPS *rsolver_, double &_dt, double *_time, GasMixture *mixture, - GasMixture *d_mixture, Fluxes *_fluxClass, ParGridFunction *_Up, ParGridFunction *_gradUp, - const boundaryFaceIntegrationData &boundary_face_data, const int _dim, const int _num_equation, - double &_max_char_speed, RunConfiguration &_runFile, Array &local_bdr_attr, - const int &_maxIntPoints, const int &_maxDofs, ParGridFunction *distance_); + BCintegrator(bool _mpiRoot, MPI_Groups* _groupsMPI, ParMesh* _mesh, ParFiniteElementSpace* _vfes, + IntegrationRules* _intRules, RiemannSolverTPS* rsolver_, double& _dt, double* _time, GasMixture* mixture, + GasMixture* d_mixture, Fluxes* _fluxClass, ParGridFunction* _Up, ParGridFunction* _gradUp, + const boundaryFaceIntegrationData& boundary_face_data, const int _dim, const int _num_equation, + double& _max_char_speed, RunConfiguration& _runFile, Array& local_bdr_attr, + const int& _maxIntPoints, const int& _maxDofs, ParGridFunction* distance_); ~BCintegrator(); - virtual void AssembleFaceVector(const FiniteElement &el1, const FiniteElement &el2, FaceElementTransformations &Tr, - const Vector &elfun, Vector &elvect); + virtual void AssembleFaceVector(const FiniteElement& el1, const FiniteElement& el2, FaceElementTransformations& Tr, + const Vector& elfun, Vector& elvect); void initBCs(); - void updateBCMean(ParGridFunction *Up); - void integrateBCs(Vector &y, const Vector &x, const elementIndexingData &elem_index_data); + void updateBCMean(ParGridFunction* Up); + void integrateBCs(Vector& y, const Vector& x, const elementIndexingData& elem_index_data); // GPU functions - static void retrieveGradientsData_gpu(ParGridFunction *gradUp, DenseTensor &elGradUp, Array &vdofs, - const int &num_equation, const int &dim, const int &totalDofs, - const int &elDofs); + static void retrieveGradientsData_gpu(ParGridFunction* gradUp, DenseTensor& elGradUp, Array& vdofs, + const int& num_equation, const int& dim, const int& totalDofs, + const int& elDofs); boundaryCategory getAttributeCategory(int attr) const { - std::unordered_map::const_iterator ibc = inletBCmap.find(attr); - std::unordered_map::const_iterator obc = outletBCmap.find(attr); - std::unordered_map::const_iterator wbc = wallBCmap.find(attr); + std::unordered_map::const_iterator ibc = inletBCmap.find(attr); + std::unordered_map::const_iterator obc = outletBCmap.find(attr); + std::unordered_map::const_iterator wbc = wallBCmap.find(attr); if (ibc != inletBCmap.end()) { return INLET; } diff --git a/src/BoundaryCondition.cpp b/src/BoundaryCondition.cpp index 3e7eee52..d33deac0 100644 --- a/src/BoundaryCondition.cpp +++ b/src/BoundaryCondition.cpp @@ -31,8 +31,8 @@ // -----------------------------------------------------------------------------------el- #include "BoundaryCondition.hpp" -BoundaryCondition::BoundaryCondition(RiemannSolverTPS *_rsolver, GasMixture *_mixture, Equations _eqSystem, - ParFiniteElementSpace *_vfes, IntegrationRules *_intRules, double &_dt, +BoundaryCondition::BoundaryCondition(RiemannSolverTPS* _rsolver, GasMixture* _mixture, Equations _eqSystem, + ParFiniteElementSpace* _vfes, IntegrationRules* _intRules, double& _dt, const int _dim, const int _num_equation, const int _patchNumber, const double _refLength, bool axisym) : rsolver(_rsolver), @@ -52,7 +52,7 @@ BoundaryCondition::BoundaryCondition(RiemannSolverTPS *_rsolver, GasMixture *_mi BoundaryCondition::~BoundaryCondition() {} -void BoundaryCondition::computeBdrPrimitiveStateForGradient(const Vector &stateIn, Vector &stateBC) const { +void BoundaryCondition::computeBdrPrimitiveStateForGradient(const Vector& stateIn, Vector& stateBC) const { stateBC = stateIn; } @@ -63,8 +63,8 @@ double BoundaryCondition::aggregateArea(int bndry_patchnum, MPI_Comm bc_comm) { for (int bel = 0; bel < vfes->GetNBE(); bel++) { int attr = vfes->GetBdrAttribute(bel); if (attr == bndry_patchnum) { - FaceElementTransformations *Tr = vfes->GetMesh()->GetBdrFaceTransformations(bel); - const IntegrationRule &ir = IntRules.Get(Tr->GetGeometryType(), Tr->OrderJ()); + FaceElementTransformations* Tr = vfes->GetMesh()->GetBdrFaceTransformations(bel); + const IntegrationRule& ir = IntRules.Get(Tr->GetGeometryType(), Tr->OrderJ()); for (int p = 0; p < ir.GetNPoints(); p++) { const IntegrationPoint ip = ir.IntPoint(p); @@ -91,15 +91,15 @@ int BoundaryCondition::aggregateBndryFaces(int bndry_patchnum, MPI_Comm bc_comm) return (nfacesTotal); } -void BoundaryCondition::setElementList(Array &_listElems) { +void BoundaryCondition::setElementList(Array& _listElems) { listElems.SetSize(_listElems.Size()); for (int i = 0; i < listElems.Size(); i++) listElems[i] = _listElems[i]; listElems.ReadWrite(); } -void BoundaryCondition::copyValues(const Vector &orig, Vector &target, const double &mult) { - const double *dOrig = orig.Read(); - double *dTarget = target.Write(); +void BoundaryCondition::copyValues(const Vector& orig, Vector& target, const double& mult) { + const double* dOrig = orig.Read(); + double* dTarget = target.Write(); MFEM_FORALL(i, target.Size(), { dTarget[i] = dOrig[i] * mult; }); } diff --git a/src/BoundaryCondition.hpp b/src/BoundaryCondition.hpp index 47049a81..0b4d4c89 100644 --- a/src/BoundaryCondition.hpp +++ b/src/BoundaryCondition.hpp @@ -46,12 +46,12 @@ using namespace mfem; class BoundaryCondition { protected: - RiemannSolverTPS *rsolver; - GasMixture *mixture; + RiemannSolverTPS* rsolver; + GasMixture* mixture; Equations eqSystem; - ParFiniteElementSpace *vfes; - IntegrationRules *intRules; - double &dt; + ParFiniteElementSpace* vfes; + IntegrationRules* intRules; + double& dt; const int dim_; const int nvel_; const int num_equation_; @@ -68,13 +68,13 @@ class BoundaryCondition { Vector face_flux_; public: - BoundaryCondition(RiemannSolverTPS *_rsolver, GasMixture *_mixture, Equations _eqSystem, ParFiniteElementSpace *_vfes, - IntegrationRules *_intRules, double &dt, const int _dim, const int _num_equation, + BoundaryCondition(RiemannSolverTPS* _rsolver, GasMixture* _mixture, Equations _eqSystem, ParFiniteElementSpace* _vfes, + IntegrationRules* _intRules, double& dt, const int _dim, const int _num_equation, const int _patchNumber, const double _refLength, bool axisym); virtual ~BoundaryCondition(); - virtual void computeBdrFlux(Vector &normal, Vector &stateIn, DenseMatrix &gradState, Vector transip, double delta, - double time, double distance, Vector &bdrFlux) = 0; + virtual void computeBdrFlux(Vector& normal, Vector& stateIn, DenseMatrix& gradState, Vector transip, double delta, + double time, double distance, Vector& bdrFlux) = 0; /** \brief Set the boundary state used in the gradient evaluation * @@ -84,13 +84,13 @@ class BoundaryCondition { * term is zero. If that is not what you want, you must override * this method in a derived class. */ - virtual void computeBdrPrimitiveStateForGradient(const Vector &stateIn, Vector &stateBC) const; + virtual void computeBdrPrimitiveStateForGradient(const Vector& stateIn, Vector& stateBC) const; // holding function for any miscellaneous items needed to initialize BCs // prior to use (and require MPI) virtual void initBCs() = 0; - virtual void updateMean(IntegrationRules *intRules, ParGridFunction *Up) = 0; + virtual void updateMean(IntegrationRules* intRules, ParGridFunction* Up) = 0; // aggregate boundary area double aggregateArea(int bndry_attr, MPI_Comm bc_comm); @@ -98,15 +98,15 @@ class BoundaryCondition { int aggregateBndryFaces(int bndry_attr, MPI_Comm bc_comm); // integration of BC on GPU - void setElementList(Array &listElems); + void setElementList(Array& listElems); - virtual void integrationBC(Vector &y, // output - const Vector &x, // conservative vars (input) - const elementIndexingData &elem_index_data, ParGridFunction *Up, ParGridFunction *gradUp, - const boundaryFaceIntegrationData &boundary_face_data, const int &maxIntPoints, - const int &maxDofs) = 0; + virtual void integrationBC(Vector& y, // output + const Vector& x, // conservative vars (input) + const elementIndexingData& elem_index_data, ParGridFunction* Up, ParGridFunction* gradUp, + const boundaryFaceIntegrationData& boundary_face_data, const int& maxIntPoints, + const int& maxDofs) = 0; - static void copyValues(const Vector &orig, Vector &target, const double &mult); + static void copyValues(const Vector& orig, Vector& target, const double& mult); }; #endif // BOUNDARYCONDITION_HPP_ diff --git a/src/M2ulPhyS.cpp b/src/M2ulPhyS.cpp index 107f5091..e5468c59 100644 --- a/src/M2ulPhyS.cpp +++ b/src/M2ulPhyS.cpp @@ -39,7 +39,7 @@ #include "utils.hpp" #include "wallBC.hpp" -M2ulPhyS::M2ulPhyS(TPS::Tps *tps) +M2ulPhyS::M2ulPhyS(TPS::Tps* tps) : groupsMPI(new MPI_Groups(tps->getTPSCommWorld())), nprocs_(groupsMPI->getTPSWorldSize()), rank_(groupsMPI->getTPSWorldRank()), @@ -48,7 +48,7 @@ M2ulPhyS::M2ulPhyS(TPS::Tps *tps) parseSolverOptions2(); } -M2ulPhyS::M2ulPhyS(string &inputFileName, TPS::Tps *tps) +M2ulPhyS::M2ulPhyS(string& inputFileName, TPS::Tps* tps) : groupsMPI(new MPI_Groups(tps->getTPSCommWorld())), nprocs_(groupsMPI->getTPSWorldSize()), rank_(groupsMPI->getTPSWorldRank()), @@ -96,10 +96,10 @@ void M2ulPhyS::initMixtureAndTransportModels() { mixture = new DryAir(config, dim, nvel); #if defined(_CUDA_) || defined(_HIP_) - tpsGpuMalloc((void **)(&d_mixture), sizeof(DryAir)); + tpsGpuMalloc((void**)(&d_mixture), sizeof(DryAir)); gpu::instantiateDeviceDryAir<<<1, 1>>>(config.dryAirInput, dim, nvel, d_mixture); - tpsGpuMalloc((void **)&transportPtr, sizeof(DryAirTransport)); + tpsGpuMalloc((void**)&transportPtr, sizeof(DryAirTransport)); gpu::instantiateDeviceDryAirTransport<<<1, 1>>>(d_mixture, config.GetViscMult(), config.GetBulkViscMult(), config.sutherland_.C1, config.sutherland_.S0, config.sutherland_.Pr, transportPtr); @@ -112,7 +112,7 @@ void M2ulPhyS::initMixtureAndTransportModels() { case GasModel::PERFECT_MIXTURE: mixture = new PerfectMixture(config, dim, nvel); #if defined(_CUDA_) || defined(_HIP_) - tpsGpuMalloc((void **)(&d_mixture), sizeof(PerfectMixture)); + tpsGpuMalloc((void**)(&d_mixture), sizeof(PerfectMixture)); gpu::instantiateDevicePerfectMixture<<<1, 1>>>(config.perfectMixtureInput, dim, nvel, d_mixture); #endif break; @@ -124,7 +124,7 @@ void M2ulPhyS::initMixtureAndTransportModels() { switch (config.GetTranportModel()) { case ARGON_MINIMAL: #if defined(_CUDA_) || defined(_HIP_) - tpsGpuMalloc((void **)&transportPtr, sizeof(GasMinimalTransport)); + tpsGpuMalloc((void**)&transportPtr, sizeof(GasMinimalTransport)); gpu::instantiateDeviceGasMinimalTransport<<<1, 1>>>(d_mixture, config.gasTransportInput, transportPtr); #else transportPtr = new GasMinimalTransport(mixture, config); @@ -132,7 +132,7 @@ void M2ulPhyS::initMixtureAndTransportModels() { break; case ARGON_MIXTURE: #if defined(_CUDA_) || defined(_HIP_) - tpsGpuMalloc((void **)&transportPtr, sizeof(GasMixtureTransport)); + tpsGpuMalloc((void**)&transportPtr, sizeof(GasMixtureTransport)); gpu::instantiateDeviceGasMixtureTransport<<<1, 1>>>(d_mixture, config.gasTransportInput, transportPtr); #else transportPtr = new GasMixtureTransport(mixture, config); @@ -140,7 +140,7 @@ void M2ulPhyS::initMixtureAndTransportModels() { break; case CONSTANT: #if defined(_CUDA_) || defined(_HIP_) - tpsGpuMalloc((void **)&transportPtr, sizeof(ConstantTransport)); + tpsGpuMalloc((void**)&transportPtr, sizeof(ConstantTransport)); gpu::instantiateDeviceConstantTransport<<<1, 1>>>(d_mixture, config.constantTransport, transportPtr); #else transportPtr = new ConstantTransport(mixture, config); @@ -153,7 +153,7 @@ void M2ulPhyS::initMixtureAndTransportModels() { switch (config.GetChemistryModel()) { default: #if defined(_CUDA_) || defined(_HIP_) - tpsGpuMalloc((void **)&chemistry_, sizeof(Chemistry)); + tpsGpuMalloc((void**)&chemistry_, sizeof(Chemistry)); gpu::instantiateDeviceChemistry<<<1, 1>>>(d_mixture, config.chemistryInput, chemistry_); #else chemistry_ = new Chemistry(mixture, config.chemistryInput); @@ -216,7 +216,7 @@ void M2ulPhyS::initMixtureAndTransportModels() { T_table_input.fdata = thermo_tables[0].xdata; // LteMixture object valid on device - tpsGpuMalloc((void **)(&d_mixture), sizeof(LteMixture)); + tpsGpuMalloc((void**)(&d_mixture), sizeof(LteMixture)); gpu::instantiateDeviceLteMixture<<<1, 1>>>(config.lteMixtureInput.f, dim, nvel, config.const_plasma_conductivity_, thermo_tables[0], thermo_tables[1], thermo_tables[2], T_table_input, d_mixture); @@ -247,7 +247,7 @@ void M2ulPhyS::initMixtureAndTransportModels() { trans_tables[icol].fdata = trans_data.Read() + (icol + 1) * nrow; } - tpsGpuMalloc((void **)&transportPtr, sizeof(LteTransport)); + tpsGpuMalloc((void**)&transportPtr, sizeof(LteTransport)); gpu::instantiateDeviceLteTransport<<<1, 1>>>(d_mixture, trans_tables[0], trans_tables[1], trans_tables[2], transportPtr); #else @@ -267,13 +267,13 @@ void M2ulPhyS::initMixtureAndTransportModels() { // dynamic_cast on a device-side pointer doesn't work, so instead // pass the TransportProperties pointer and cast it within // instantiateDeviceMixingLengthTransport - TransportProperties *temporary_transport = transportPtr; - tpsGpuMalloc((void **)&transportPtr, sizeof(MixingLengthTransport)); + TransportProperties* temporary_transport = transportPtr; + tpsGpuMalloc((void**)&transportPtr, sizeof(MixingLengthTransport)); gpu::instantiateDeviceMixingLengthTransport<<<1, 1>>>(d_mixture, config.mix_length_trans_input_, temporary_transport, transportPtr); #else // Build mixing length transport using whatever molecular transport we've already instantiated - MolecularTransport *temporary_transport = dynamic_cast(transportPtr); + MolecularTransport* temporary_transport = dynamic_cast(transportPtr); transportPtr = new MixingLengthTransport(mixture, config, temporary_transport); #endif } @@ -370,9 +370,9 @@ void M2ulPhyS::initVariables() { // If requested, evaluate the distance function (i.e., the distance to the nearest no-slip wall) distance_ = NULL; - GridFunction *serial_distance = NULL; - FiniteElementSpace *serial_fes = NULL; - DG_FECollection *tmp_fec = NULL; + GridFunction* serial_distance = NULL; + FiniteElementSpace* serial_fes = NULL; + DG_FECollection* tmp_fec = NULL; if (config.compute_distance) { order = config.GetSolutionOrder(); dim = serial_mesh->Dimension(); @@ -401,7 +401,7 @@ void M2ulPhyS::initVariables() { serial_mesh->SetCurvature(1); } - FiniteElementSpace *tmp_dfes = new FiniteElementSpace(serial_mesh, tmp_fec, dim, Ordering::byNODES); + FiniteElementSpace* tmp_dfes = new FiniteElementSpace(serial_mesh, tmp_fec, dim, Ordering::byNODES); GridFunction coordinates(tmp_dfes); serial_mesh->GetNodes(coordinates); @@ -511,7 +511,7 @@ void M2ulPhyS::initVariables() { switch (config.radiationInput.model) { case NET_EMISSION: #if defined(_CUDA_) || defined(_HIP_) - tpsGpuMalloc((void **)(&radiation_), sizeof(NetEmission)); + tpsGpuMalloc((void**)(&radiation_), sizeof(NetEmission)); gpu::instantiateDeviceNetEmission<<<1, 1>>>(config.radiationInput, radiation_); #else radiation_ = new NetEmission(config.radiationInput); @@ -596,12 +596,12 @@ void M2ulPhyS::initVariables() { vsd.width = config.GetLinearVaryingData().width; } - tpsGpuMalloc((void **)&d_fluxClass, sizeof(Fluxes)); + tpsGpuMalloc((void**)&d_fluxClass, sizeof(Fluxes)); gpu::instantiateDeviceFluxes<<<1, 1>>>(d_mixture, eqSystem, transportPtr, num_equation, dim, config.isAxisymmetric(), config.GetSgsModelType(), config.GetSgsFloor(), config.GetSgsConstant(), vsd, d_fluxClass); - tpsGpuMalloc((void **)&rsolver, sizeof(RiemannSolverTPS)); + tpsGpuMalloc((void**)&rsolver, sizeof(RiemannSolverTPS)); gpu::instantiateDeviceRiemann<<<1, 1>>>(num_equation, d_mixture, eqSystem, d_fluxClass, config.RoeRiemannSolverTPS(), config.isAxisymmetric(), rsolver); @@ -686,7 +686,7 @@ void M2ulPhyS::initVariables() { Array local_attr; getAttributesInPartition(local_attr); - double *pTime; + double* pTime; pTime = &time; bcIntegrator = NULL; @@ -817,7 +817,7 @@ void M2ulPhyS::initIndirectionArrays() { //----------------------------------------------------------------- // Element data //----------------------------------------------------------------- - elementIndexingData &elem_data = gpu_precomputed_data_.element_indexing_data; + elementIndexingData& elem_data = gpu_precomputed_data_.element_indexing_data; elem_data.dof_offset.SetSize(vfes->GetNE()); elem_data.dof_offset = -1; // invalid @@ -873,7 +873,7 @@ void M2ulPhyS::initIndirectionArrays() { //----------------------------------------------------------------- // Interior faces //----------------------------------------------------------------- - interiorFaceIntegrationData &face_data = gpu_precomputed_data_.interior_face_data; + interiorFaceIntegrationData& face_data = gpu_precomputed_data_.interior_face_data; face_data.element_to_faces.SetSize(7 * vfes->GetNE()); face_data.element_to_faces = 0; @@ -935,7 +935,7 @@ void M2ulPhyS::initIndirectionArrays() { Vector xyz(dim); for (int face = 0; face < mesh->GetNumFaces(); face++) { - FaceElementTransformations *tr; + FaceElementTransformations* tr; tr = mesh->GetInteriorFaceTransformations(face); if (tr != NULL) { Array vdofs; @@ -957,8 +957,8 @@ void M2ulPhyS::initIndirectionArrays() { h_element_to_faces[7 * tr->Elem2No] = nf; } - const FiniteElement *fe1 = fes->GetFE(tr->Elem1No); - const FiniteElement *fe2 = fes->GetFE(tr->Elem2No); + const FiniteElement* fe1 = fes->GetFE(tr->Elem1No); + const FiniteElement* fe2 = fes->GetFE(tr->Elem2No); const int dof1 = fe1->GetDof(); const int dof2 = fe2->GetDof(); @@ -972,7 +972,7 @@ void M2ulPhyS::initIndirectionArrays() { if (fe1->Space() == FunctionSpace::Pk) { intorder++; } - const IntegrationRule *ir = &intRules->Get(tr->GetGeometryType(), intorder); + const IntegrationRule* ir = &intRules->Get(tr->GetGeometryType(), intorder); h_face_el1[face] = tr->Elem1No; h_face_el2[face] = tr->Elem2No; @@ -989,7 +989,7 @@ void M2ulPhyS::initIndirectionArrays() { // below is from the variant of Mesh::GetElementSize that takes an // ElementTransformation as input, rather than an element index. // We should simply call that function, but it is not public. - ElementTransformation *T = tr->Elem2; + ElementTransformation* T = tr->Elem2; DenseMatrix J(dim, dim); Geometry::Type geom = T->GetGeometryType(); @@ -1010,7 +1010,7 @@ void M2ulPhyS::initIndirectionArrays() { Vector dist1, dist2; if (distance_ != NULL) { - const ParFiniteElementSpace *dist_fes = distance_->ParFESpace(); + const ParFiniteElementSpace* dist_fes = distance_->ParFESpace(); Array dist_dofs1; // dist_fes->GetElementVDofs(tr->Elem1->ElementNo, dist_dofs1); @@ -1032,7 +1032,7 @@ void M2ulPhyS::initIndirectionArrays() { } for (int k = 0; k < ir->GetNPoints(); k++) { - const IntegrationPoint &ip = ir->IntPoint(k); + const IntegrationPoint& ip = ir->IntPoint(k); tr->SetAllIntPoints(&ip); // shape functions fe1->CalcShape(tr->GetElement1IntPoint(), shape1i); @@ -1076,7 +1076,7 @@ void M2ulPhyS::initIndirectionArrays() { //----------------------------------------------------------------- // Boundary faces //----------------------------------------------------------------- - boundaryFaceIntegrationData &bdry_face_data = gpu_precomputed_data_.boundary_face_data; + boundaryFaceIntegrationData& bdry_face_data = gpu_precomputed_data_.boundary_face_data; // This is supposed to be number of boundary faces, and for // non-periodic cases it is. But, for periodic meshes, it includes @@ -1137,8 +1137,8 @@ void M2ulPhyS::initIndirectionArrays() { bdry_face_data.dist = 0.; auto h_bdry_dist = bdry_face_data.dist.HostWrite(); - const FiniteElement *fe; - FaceElementTransformations *tr; + const FiniteElement* fe; + FaceElementTransformations* tr; // Mesh *mesh = fes->GetMesh(); std::vector uniqueElems; @@ -1167,7 +1167,7 @@ void M2ulPhyS::initIndirectionArrays() { if (fe->Space() == FunctionSpace::Pk) { intorder++; } - const IntegrationRule *ir = &intRules->Get(tr->GetGeometryType(), intorder); + const IntegrationRule* ir = &intRules->Get(tr->GetGeometryType(), intorder); h_face_el[f] = tr->Elem1No; h_face_num_quad[f] = ir->GetNPoints(); @@ -1181,7 +1181,7 @@ void M2ulPhyS::initIndirectionArrays() { Vector dist; if (distance_ != NULL) { - const ParFiniteElementSpace *dist_fes = distance_->ParFESpace(); + const ParFiniteElementSpace* dist_fes = distance_->ParFESpace(); Array dist_dofs1; // dist_fes->GetElementVDofs(tr->Elem1->ElementNo, dist_dofs1); @@ -1191,7 +1191,7 @@ void M2ulPhyS::initIndirectionArrays() { } for (int q = 0; q < ir->GetNPoints(); q++) { - const IntegrationPoint &ip = ir->IntPoint(q); + const IntegrationPoint& ip = ir->IntPoint(q); tr->SetAllIntPoints(&ip); Vector nor; nor.UseDevice(false); @@ -1262,7 +1262,7 @@ void M2ulPhyS::initIndirectionArrays() { // Shared faces (i.e., interior faces at boundary of decomposition, // such that element1 and element2 live on different mpi ranks) //----------------------------------------------------------------- - sharedFaceIntegrationData &shared_face_data = gpu_precomputed_data_.shared_face_data; + sharedFaceIntegrationData& shared_face_data = gpu_precomputed_data_.shared_face_data; mesh->ExchangeFaceNbrNodes(); mesh->ExchangeFaceNbrData(); @@ -1342,13 +1342,13 @@ void M2ulPhyS::initIndirectionArrays() { unicElems.clear(); Array vdofs2, vdofsGrad; - FaceElementTransformations *tr; + FaceElementTransformations* tr; for (int i = 0; i < Nshared; i++) { tr = mesh->GetSharedFaceTransformations(i, true); int Elem2NbrNo = tr->Elem2No - mesh->GetNE(); - const FiniteElement *fe1 = vfes->GetFE(tr->Elem1No); - const FiniteElement *fe2 = vfes->GetFaceNbrFE(Elem2NbrNo); + const FiniteElement* fe1 = vfes->GetFE(tr->Elem1No); + const FiniteElement* fe2 = vfes->GetFaceNbrFE(Elem2NbrNo); const int dof1 = fe1->GetDof(); const int dof2 = fe2->GetDof(); @@ -1361,7 +1361,7 @@ void M2ulPhyS::initIndirectionArrays() { // takes an ElementTransformation as input, rather than an // element index. We should simply call that function, but it // is not public. - ElementTransformation *T = tr->Elem2; + ElementTransformation* T = tr->Elem2; DenseMatrix J(dim, dim); Geometry::Type geom = T->GetGeometryType(); @@ -1395,7 +1395,7 @@ void M2ulPhyS::initIndirectionArrays() { intorder++; } // IntegrationRules IntRules2(0, Quadrature1D::GaussLobatto); - const IntegrationRule *ir = &intRules->Get(tr->GetGeometryType(), intorder); + const IntegrationRule* ir = &intRules->Get(tr->GetGeometryType(), intorder); h_face_el1[i] = tr->Elem1No; h_face_num_quad[i] = ir->GetNPoints(); @@ -1409,7 +1409,7 @@ void M2ulPhyS::initIndirectionArrays() { Vector dist1, dist2; if (distance_ != NULL) { - const ParFiniteElementSpace *dist_fes = distance_->ParFESpace(); + const ParFiniteElementSpace* dist_fes = distance_->ParFESpace(); Array dist_dofs1; dist_fes->GetElementVDofs(tr->Elem1->ElementNo, dist_dofs1); @@ -1431,7 +1431,7 @@ void M2ulPhyS::initIndirectionArrays() { nor.SetSize(dim); for (int q = 0; q < ir->GetNPoints(); q++) { - const IntegrationPoint &ip = ir->IntPoint(q); + const IntegrationPoint& ip = ir->IntPoint(q); tr->SetAllIntPoints(&ip); fe1->CalcShape(tr->GetElement1IntPoint(), shape1); @@ -1486,7 +1486,7 @@ void M2ulPhyS::initIndirectionArrays() { } void M2ulPhyS::initIndirectionBC() { - boundaryFaceIntegrationData &bdry_face_data = gpu_precomputed_data_.boundary_face_data; + boundaryFaceIntegrationData& bdry_face_data = gpu_precomputed_data_.boundary_face_data; // This is supposed to be number of boundary faces, and for // non-periodic cases it is. See #199 for more info. @@ -1506,8 +1506,8 @@ void M2ulPhyS::initIndirectionBC() { bdry_face_data.wall_bc_temperature.UseDevice(true); auto h_wall_bc_temperature = bdry_face_data.wall_bc_temperature.HostWrite(); - FaceElementTransformations *tr; - Mesh *mesh = fes->GetMesh(); + FaceElementTransformations* tr; + Mesh* mesh = fes->GetMesh(); for (int f = 0; f < NumBCelems; f++) { tr = mesh->GetBdrFaceTransformations(f); @@ -1515,9 +1515,9 @@ void M2ulPhyS::initIndirectionBC() { int attr = tr->Attribute; h_bc_category[f] = bcIntegrator->getAttributeCategory(attr); if (config.useBCinGrad && h_bc_category[f] == WALL) { - std::unordered_map::const_iterator wbci = bcIntegrator->wallBCmap.find(attr); + std::unordered_map::const_iterator wbci = bcIntegrator->wallBCmap.find(attr); if (wbci != bcIntegrator->wallBCmap.end()) { - WallBC *wbc = dynamic_cast(wbci->second); + WallBC* wbc = dynamic_cast(wbci->second); WallType wt = wbc->getType(); if (wt == VISC_ISOTH) { fflush(stdout); @@ -1624,7 +1624,7 @@ M2ulPhyS::~M2ulPhyS() { #endif } -void M2ulPhyS::getAttributesInPartition(Array &local_attr) { +void M2ulPhyS::getAttributesInPartition(Array& local_attr) { local_attr.DeleteAll(); for (int bel = 0; bel < vfes->GetNBE(); bel++) { int attr = vfes->GetBdrAttribute(bel); @@ -1859,7 +1859,7 @@ void M2ulPhyS::initSolutionAndVisualizationVectors() { mesh->GetNodes(coordsDof); if (config.linViscData.isEnabled) { spaceVaryViscMult = new ParGridFunction(fes); - double *viscMult = spaceVaryViscMult->HostWrite(); + double* viscMult = spaceVaryViscMult->HostWrite(); double wgt = 0.; for (int n = 0; n < fes->GetNDofs(); n++) { auto hcoords = coordsDof.HostRead(); // get coords @@ -1968,7 +1968,7 @@ void M2ulPhyS::projectInitialSolution() { // update plasma electrical conductivity if (tpsP->isFlowEMCoupled()) { - ParGridFunction *coordsDof = new ParGridFunction(dfes); + ParGridFunction* coordsDof = new ParGridFunction(dfes); mesh->GetNodes(*coordsDof); mixture->SetConstantPlasmaConductivity(plasma_conductivity_, Up, coordsDof); delete coordsDof; @@ -2054,7 +2054,7 @@ void M2ulPhyS::solveStep() { #ifdef HAVE_GSLIB // Get the source field for the interpolation // TODO(shaering): improve option to select u, , or for multiple at once - ParGridFunction *u_gf; + ParGridFunction* u_gf; if (config.planeDump.conserved == true) { u_gf = GetSolutionGF(); } else if (config.planeDump.primitive == true) { @@ -2184,13 +2184,13 @@ void M2ulPhyS::solve() { } // Initial conditions for debug/test case -void M2ulPhyS::InitialConditionEulerVortex(const Vector &x, Vector &y) { +void M2ulPhyS::InitialConditionEulerVortex(const Vector& x, Vector& y) { MFEM_ASSERT(x.Size() == 2, ""); int equations = 4; if (x.Size() == 3) equations = 5; int problem = 1; - DryAir *eqState = new DryAir(); + DryAir* eqState = new DryAir(); const double gamma = eqState->GetSpecificHeatRatio(); const double Rg = eqState->GetGasConstant(); @@ -2269,8 +2269,8 @@ void M2ulPhyS::InitialConditionEulerVortex(const Vector &x, Vector &y) { } // Initial conditions for debug/test case -void M2ulPhyS::testInitialCondition(const Vector &x, Vector &y) { - DryAir *eqState = new DryAir(); +void M2ulPhyS::testInitialCondition(const Vector& x, Vector& y) { + DryAir* eqState = new DryAir(); // Nice units const double vel_inf = 1.; @@ -2293,12 +2293,12 @@ void M2ulPhyS::testInitialCondition(const Vector &x, Vector &y) { // // NOTE: Use only for DRY_AIR. // void M2ulPhyS::dryAirUniformInitialConditions() { void M2ulPhyS::uniformInitialConditions() { - double *data = U->HostWrite(); - double *dataUp = Up->HostWrite(); - double *dataGradUp = gradUp->HostWrite(); + double* data = U->HostWrite(); + double* dataUp = Up->HostWrite(); + double* dataGradUp = gradUp->HostWrite(); int dof = vfes->GetNDofs(); - double *inputRhoRhoVp = config.GetConstantInitialCondition(); + double* inputRhoRhoVp = config.GetConstantInitialCondition(); // build initial state Vector initState(num_equation); @@ -2371,7 +2371,7 @@ void M2ulPhyS::uniformInitialConditions() { } void M2ulPhyS::initGradUp() { - double *dataGradUp = gradUp->HostWrite(); + double* dataGradUp = gradUp->HostWrite(); int dof = vfes->GetNDofs(); for (int i = 0; i < dof; i++) { @@ -2386,8 +2386,8 @@ void M2ulPhyS::initGradUp() { // NOTE(Mal): This is a method to be used when we restart from LTE simulation. // It initilzes species mass densities based on LTE assumptions. void M2ulPhyS::initilizeSpeciesFromLTE() { - double *dataU = U->GetData(); - double *dataUp = Up->GetData(); + double* dataU = U->GetData(); + double* dataUp = Up->GetData(); // double *dataGradUp = gradUp->HostWrite(); int dof = vfes->GetNDofs(); @@ -2404,10 +2404,10 @@ void M2ulPhyS::initilizeSpeciesFromLTE() { tpsP->getRequiredInput("flow/lte/e_rev_table", e_rev_file); config.lteMixtureInput.e_rev_file_name = e_rev_file; - TableInterpolator2D *energy_table; - TableInterpolator2D *R_table; - TableInterpolator2D *c_table; - TableInterpolator2D *T_table; + TableInterpolator2D* energy_table; + TableInterpolator2D* R_table; + TableInterpolator2D* c_table; + TableInterpolator2D* T_table; #if defined(HAVE_GSL) && !defined(_CUDA_) && !defined(_HIP_) @@ -2472,7 +2472,7 @@ void M2ulPhyS::Check_NAN() { cout << "Found a NaN!" << endl; } #else - const double *dataU = U->HostRead(); + const double* dataU = U->HostRead(); // bool thereIsNan = false; @@ -2506,8 +2506,8 @@ void M2ulPhyS::Check_NAN() { } } -int M2ulPhyS::Check_NaN_GPU(ParGridFunction *U, int lengthU, Array &loc_print) { - const double *dataU = U->Read(); +int M2ulPhyS::Check_NaN_GPU(ParGridFunction* U, int lengthU, Array& loc_print) { + const double* dataU = U->Read(); auto d_temp = loc_print.ReadWrite(); MFEM_FORALL(n, lengthU, { @@ -2528,7 +2528,7 @@ void M2ulPhyS::Check_Undershoot() { #ifdef _GPU_ int nv = nvel; int nsp = numActiveSpecies; - double *dataU = U->ReadWrite(); + double* dataU = U->ReadWrite(); MFEM_FORALL(i, dof, { for (int sp = 0; sp < nsp; sp++) { @@ -2537,7 +2537,7 @@ void M2ulPhyS::Check_Undershoot() { } }); #else - double *dataU = U->HostReadWrite(); + double* dataU = U->HostReadWrite(); for (int i = 0; i < dof; i++) { for (int sp = 0; sp < numActiveSpecies; sp++) { int eq = nvel + 2 + sp; @@ -3793,7 +3793,7 @@ void M2ulPhyS::parseRadiationInputs() { } } -void M2ulPhyS::readTableWrapper(std::string inputPath, TableInput &result) { +void M2ulPhyS::readTableWrapper(std::string inputPath, TableInput& result) { MPI_Comm TPSCommWorld = this->groupsMPI->getTPSCommWorld(); std::string filename; tpsP->getInput((inputPath + "/x_log").c_str(), result.xLogScale, false); @@ -3851,7 +3851,7 @@ void M2ulPhyS::packUpGasMixtureInput() { } } -void M2ulPhyS::identifySpeciesType(Array &speciesType) { +void M2ulPhyS::identifySpeciesType(Array& speciesType) { speciesType.SetSize(config.numSpecies); for (int sp = 0; sp < config.numSpecies; sp++) { @@ -3922,7 +3922,7 @@ void M2ulPhyS::identifySpeciesType(Array &speciesType) { return; } -void M2ulPhyS::identifyCollisionType(const Array &speciesType, GasColl *collisionIndex) { +void M2ulPhyS::identifyCollisionType(const Array& speciesType, GasColl* collisionIndex) { // collisionIndex_.resize(numSpecies); for (int spI = 0; spI < config.numSpecies; spI++) { // collisionIndex_[spI].resize(numSpecies - spI); @@ -4051,8 +4051,8 @@ void M2ulPhyS::checkSolverOptions() const { } void M2ulPhyS::updatePrimitives() { - const double *data = U->HostRead(); - double *dataUp = Up->HostWrite(); + const double* data = U->HostRead(); + double* dataUp = Up->HostWrite(); int dof = vfes->GetNDofs(); // Change this double * state = new double[num_equation] and same for Upi? @@ -4162,9 +4162,9 @@ void M2ulPhyS::updateVisualizationVariables() { // TODO(kevin): The routine here currently only supports cpu path, though it is written in a gpu-compatible way. // Will require some minor #ifdef additions to implement gpu path. - double *dataU = U->GetData(); - double *dataUp = Up->GetData(); - double *dataGradUp = gradUp->GetData(); + double* dataU = U->GetData(); + double* dataUp = Up->GetData(); + double* dataGradUp = gradUp->GetData(); const int ndofs = vfes->GetNDofs(); const int _dim = dim; const int _nvel = nvel; @@ -4172,14 +4172,14 @@ void M2ulPhyS::updateVisualizationVariables() { const int _numSpecies = numSpecies; const int _numReactions = config.numReactions; - GasMixture *in_mix = mixture; - TransportProperties *in_transport = transportPtr; - Chemistry *in_chem = chemistry_; + GasMixture* in_mix = mixture; + TransportProperties* in_transport = transportPtr; + Chemistry* in_chem = chemistry_; const bool isDryAir = (config.workFluid == DRY_AIR); const int nVisual = visualizationVariables_.size(); const AuxiliaryVisualizationIndexes visualIdxs = visualizationIndexes_; - double *dataVis[gpudata::MAXVISUAL]; + double* dataVis[gpudata::MAXVISUAL]; for (int vis = 0; vis < nVisual; vis++) dataVis[vis] = visualizationVariables_[vis]->GetData(); for (int n = 0; n < ndofs; n++) { @@ -4217,7 +4217,7 @@ void M2ulPhyS::updateVisualizationVariables() { double radius = -1; if (config.isAxisymmetric()) { - ParGridFunction *xyz = new ParGridFunction(dfes); + ParGridFunction* xyz = new ParGridFunction(dfes); mesh->GetNodes(*xyz); radius = (*xyz)[n + 0 * ndofs]; } @@ -4264,18 +4264,18 @@ void M2ulPhyS::updateVisualizationVariables() { void M2ulPhyS::evaluatePlasmaConductivityGF() { assert(plasma_conductivity_ != NULL); - double *d_pc = plasma_conductivity_->Write(); + double* d_pc = plasma_conductivity_->Write(); - const double *d_Up = Up->Read(); - const double *d_U = U->Read(); - const double *d_gradUp = gradUp->Read(); + const double* d_Up = Up->Read(); + const double* d_U = U->Read(); + const double* d_gradUp = gradUp->Read(); - const double *d_distance = NULL; + const double* d_distance = NULL; if (distance_ != NULL) { d_distance = distance_->Read(); } - TransportProperties *d_transport = transportPtr; + TransportProperties* d_transport = transportPtr; const int nnodes = vfes->GetNDofs(); const int _dim = dim; diff --git a/src/M2ulPhyS.hpp b/src/M2ulPhyS.hpp index ebbc9d91..b8b846e4 100644 --- a/src/M2ulPhyS.hpp +++ b/src/M2ulPhyS.hpp @@ -92,13 +92,13 @@ class Tps2Boltzmann; class M2ulPhyS : public TPS::PlasmaSolver { private: - MPI_Groups *groupsMPI; + MPI_Groups* groupsMPI; int nprocs_; // total number of MPI procs int rank_; // local MPI rank bool rank0_; // flag to indicate rank 0 // pointer to parent Tps class - TPS::Tps *tpsP; + TPS::Tps* tpsP; // Run options RunConfiguration config; @@ -140,40 +140,40 @@ class M2ulPhyS : public TPS::PlasmaSolver { double max_char_speed; // reference to mesh - ParMesh *mesh; + ParMesh* mesh; // original mesh partition info (stored on rank 0) Array partitioning_; const int defaultPartMethod = 1; // time integrator - ODESolver *timeIntegrator; + ODESolver* timeIntegrator; // Pointers to the different classes - GasMixture *mixture; // valid on host - GasMixture *d_mixture; // valid on device, when available; otherwise = mixture + GasMixture* mixture; // valid on host + GasMixture* d_mixture; // valid on device, when available; otherwise = mixture - TransportProperties *transportPtr = NULL; // valid on both host and device + TransportProperties* transportPtr = NULL; // valid on both host and device // TransportProperties *d_transport = NULL; // valid on device, when available; otherwise = transportPtr - Chemistry *chemistry_ = NULL; + Chemistry* chemistry_ = NULL; - Radiation *radiation_ = NULL; + Radiation* radiation_ = NULL; // space varying viscosity multiplier - ParGridFunction *spaceVaryViscMult; + ParGridFunction* spaceVaryViscMult; /// Distance to nearest no-slip wall - ParGridFunction *distance_; + ParGridFunction* distance_; - Fluxes *fluxClass; // valid on host - Fluxes *d_fluxClass; // valid on device, when available; otherwise = fluxClass + Fluxes* fluxClass; // valid on host + Fluxes* d_fluxClass; // valid on device, when available; otherwise = fluxClass - RHSoperator *rhsOperator; + RHSoperator* rhsOperator; // Integration rule int intRuleType; // 0: GaussLegendre; 1: GaussLobatto - IntegrationRules *intRules; + IntegrationRules* intRules; // Interpolant function // 0: GaussLegendre; 1: GaussLobatto @@ -182,19 +182,19 @@ class M2ulPhyS : public TPS::PlasmaSolver { // Finite element collection // DG_FECollection *fec; // H1_FECollection *fec; - FiniteElementCollection *fec; + FiniteElementCollection* fec; // Finite element space for a scalar (thermodynamic quantity) - ParFiniteElementSpace *fes; + ParFiniteElementSpace* fes; // Finite element space for a mesh-dim vector quantity (momentum) - ParFiniteElementSpace *dfes; + ParFiniteElementSpace* dfes; // Finite element space for a nvel vector quantity. only for visualization (diffusion velocity). - ParFiniteElementSpace *nvelfes; + ParFiniteElementSpace* nvelfes; // Finite element space for all variables together (total thermodynamic state) - ParFiniteElementSpace *vfes; + ParFiniteElementSpace* vfes; // nodes IDs and indirection array const int maxIntPoints = gpudata::MAXINTPOINTS; // corresponding to HEX face with p=5 @@ -205,56 +205,56 @@ class M2ulPhyS : public TPS::PlasmaSolver { // The solution u has components {density, x-momentum, y-momentum, energy}. // These are stored contiguously in the BlockVector u_block. - Array *offsets; - BlockVector *u_block; - BlockVector *up_block; + Array* offsets; + BlockVector* u_block; + BlockVector* up_block; // paraview collection pointer - ParaViewDataCollection *paraviewColl = NULL; + ParaViewDataCollection* paraviewColl = NULL; // DataCollection *visitColl = NULL; // Riemann Solver - RiemannSolverTPS *rsolver; + RiemannSolverTPS* rsolver; // RHS operators // ParNonlinearForm *A; - DGNonLinearForm *A; + DGNonLinearForm* A; - FaceIntegrator *faceIntegrator; + FaceIntegrator* faceIntegrator; - MixedBilinearForm *Aflux; - DomainIntegrator *domainIntegrator; + MixedBilinearForm* Aflux; + DomainIntegrator* domainIntegrator; // Boundary condition non-linear integrator - BCintegrator *bcIntegrator; + BCintegrator* bcIntegrator; // Conservative variables - ParGridFunction *U; + ParGridFunction* U; // Primitive variables - ParGridFunction *Up; + ParGridFunction* Up; // Visualization functions (these are pointers to Up) ParGridFunction *temperature, *dens, *vel, *vtheta, *passiveScalar; - ParGridFunction *electron_temp_field; - ParGridFunction *press; - std::vector visualizationVariables_; + ParGridFunction* electron_temp_field; + ParGridFunction* press; + std::vector visualizationVariables_; std::vector visualizationNames_; AuxiliaryVisualizationIndexes visualizationIndexes_; - ParGridFunction *plasma_conductivity_; - ParGridFunction *joule_heating_; + ParGridFunction* plasma_conductivity_; + ParGridFunction* joule_heating_; // gradient of primitive variables - ParGridFunction *gradUp; - ParFiniteElementSpace *gradUpfes; + ParGridFunction* gradUp; + ParFiniteElementSpace* gradUpfes; // ParNonlinearForm *gradUp_A; - GradNonLinearForm *gradUp_A; + GradNonLinearForm* gradUp_A; // Auxiliary grid function to store external reaction rates std::unique_ptr externalReactionRates; // Average handler - Averaging *average; + Averaging* average; // time variable double time; @@ -289,11 +289,11 @@ class M2ulPhyS : public TPS::PlasmaSolver { int exit_status_; // mapping from local to global element index - int *locToGlobElem; + int* locToGlobElem; // a serial mesh, finite element space, and grid function // for use if we want to write a serial file - Mesh *serial_mesh; + Mesh* serial_mesh; // I/O organizer IODataOrganizer ioData; @@ -302,12 +302,12 @@ class M2ulPhyS : public TPS::PlasmaSolver { #ifdef HAVE_MASA VectorFunctionCoefficient *DenMMS_, *VelMMS_, *PreMMS_; - VectorFunctionCoefficient *stateMMS_; - std::vector componentWindow_; + VectorFunctionCoefficient* stateMMS_; + std::vector componentWindow_; - ParGridFunction *zeroU_; // to compute L2 norm of exact solution via ComputeLpError. - ParGridFunction *masaU_; // for visualization of the exact solution. - ParGridFunction *masaRhs_; // for visualization of the right-hand side. + ParGridFunction* zeroU_; // to compute L2 norm of exact solution via ComputeLpError. + ParGridFunction* masaU_; // for visualization of the exact solution. + ParGridFunction* masaRhs_; // for visualization of the right-hand side. BlockVector *zeroUBlock_, *masaUBlock_; #endif @@ -315,7 +315,7 @@ class M2ulPhyS : public TPS::PlasmaSolver { Array loc_print; #endif - void getAttributesInPartition(Array &local_attr); + void getAttributesInPartition(Array& local_attr); /** @brief Fill precomputedIntegrationData struct * @@ -341,8 +341,8 @@ class M2ulPhyS : public TPS::PlasmaSolver { void initSolutionAndVisualizationVectors(); void initialTimeStep(); - static void InitialConditionEulerVortex(const Vector &x, Vector &y); - static void testInitialCondition(const Vector &x, Vector &y); + static void InitialConditionEulerVortex(const Vector& x, Vector& y); + static void testInitialCondition(const Vector& x, Vector& y); // void dryAirUniformInitialConditions(); void uniformInitialConditions(); void initGradUp(); @@ -360,14 +360,14 @@ class M2ulPhyS : public TPS::PlasmaSolver { #ifdef HAVE_MASA void initMasaHandler(); - void projectExactSolution(const double _time, ParGridFunction *prjU); + void projectExactSolution(const double _time, ParGridFunction* prjU); void initMMSCoefficients(); void checkSolutionError(const double _time, const bool final = false); #endif public: - M2ulPhyS(string &inputFileName, TPS::Tps *tps); - M2ulPhyS(TPS::Tps *tps); + M2ulPhyS(string& inputFileName, TPS::Tps* tps); + M2ulPhyS(TPS::Tps* tps); ~M2ulPhyS(); void parseSolverOptions() override; @@ -395,11 +395,11 @@ class M2ulPhyS : public TPS::PlasmaSolver { void parsePostProcessVisualizationInputs(); void parseRadiationInputs(); void parsePlaneDump(); - void readTableWrapper(std::string inputPath, TableInput &result); + void readTableWrapper(std::string inputPath, TableInput& result); void packUpGasMixtureInput(); - void identifySpeciesType(Array &speciesType); - void identifyCollisionType(const Array &speciesType, GasColl *collisionIndex); + void identifySpeciesType(Array& speciesType); + void identifyCollisionType(const Array& speciesType, GasColl* collisionIndex); void checkSolverOptions() const; void projectInitialSolution(); @@ -416,39 +416,39 @@ class M2ulPhyS : public TPS::PlasmaSolver { void solveBegin() override; void solveEnd() override; void visualization() override; - ParMesh *getMesh() const override { return mesh; } - ParFiniteElementSpace *getFESpace() const override { return vfes; } - const FiniteElementCollection *getFEC() const override { return fec; } + ParMesh* getMesh() const override { return mesh; } + ParFiniteElementSpace* getFESpace() const override { return vfes; } + const FiniteElementCollection* getFEC() const override { return fec; } - ParGridFunction *getPlasmaConductivityGF() override { return plasma_conductivity_; } - ParGridFunction *getJouleHeatingGF() override { return joule_heating_; } + ParGridFunction* getPlasmaConductivityGF() override { return plasma_conductivity_; } + ParGridFunction* getJouleHeatingGF() override { return joule_heating_; } void evaluatePlasmaConductivityGF() override; void updateVisualizationVariables(); // Accessors - RHSoperator *getRHSoperator() { return rhsOperator; } - ParFiniteElementSpace *GetScalarFES() { return fes; } - ParFiniteElementSpace *GetVectorFES() { return dfes; } - ParaViewDataCollection *GetParaviewColl() { return paraviewColl; } - ParGridFunction *GetSolutionGF() { return U; } - ParGridFunction *getPrimitiveGF() { return Up; } - ParGridFunction *getGradientGF() { return gradUp; } - ParGridFunction *getPressureGF() { return press; } - IntegrationRules *getIntegrationRules() { return intRules; } - RunConfiguration &GetConfig() { return config; } - GasMixture *getMixture() { return mixture; } - Chemistry *getChemistry() { return chemistry_; } - - const ParGridFunction *getDistanceFcn() { return distance_; } + RHSoperator* getRHSoperator() { return rhsOperator; } + ParFiniteElementSpace* GetScalarFES() { return fes; } + ParFiniteElementSpace* GetVectorFES() { return dfes; } + ParaViewDataCollection* GetParaviewColl() { return paraviewColl; } + ParGridFunction* GetSolutionGF() { return U; } + ParGridFunction* getPrimitiveGF() { return Up; } + ParGridFunction* getGradientGF() { return gradUp; } + ParGridFunction* getPressureGF() { return press; } + IntegrationRules* getIntegrationRules() { return intRules; } + RunConfiguration& GetConfig() { return config; } + GasMixture* getMixture() { return mixture; } + Chemistry* getChemistry() { return chemistry_; } + + const ParGridFunction* getDistanceFcn() { return distance_; } void updatePrimitives(); - static int Check_NaN_GPU(ParGridFunction *U, int lengthU, Array &loc_print); + static int Check_NaN_GPU(ParGridFunction* U, int lengthU, Array& loc_print); void Check_Undershoot(); void setConstantPlasmaConductivityGF() { - ParGridFunction *coordsDof = new ParGridFunction(dfes); + ParGridFunction* coordsDof = new ParGridFunction(dfes); mesh->GetNodes(*coordsDof); mixture->SetConstantPlasmaConductivity(plasma_conductivity_, Up, coordsDof); delete coordsDof; @@ -456,9 +456,9 @@ class M2ulPhyS : public TPS::PlasmaSolver { // tps2Boltzmann interface (implemented in M2ulPhyS2Boltzmann.cpp) /// Push solver variables to interface - void push(TPS::Tps2Boltzmann &interface) override; + void push(TPS::Tps2Boltzmann& interface) override; /// Fetch solver variables from interface - void fetch(TPS::Tps2Boltzmann &interface) override; + void fetch(TPS::Tps2Boltzmann& interface) override; // Exit code access void SetStatus(int code) { diff --git a/src/M2ulPhyS2Boltzmann.cpp b/src/M2ulPhyS2Boltzmann.cpp index 8bdf6a5c..7dbbdf97 100644 --- a/src/M2ulPhyS2Boltzmann.cpp +++ b/src/M2ulPhyS2Boltzmann.cpp @@ -37,28 +37,28 @@ #include "tps2Boltzmann.hpp" // CPU version (just for starting up) -void M2ulPhyS::push(TPS::Tps2Boltzmann &interface) { +void M2ulPhyS::push(TPS::Tps2Boltzmann& interface) { assert(interface.IsInitialized()); int nscalardofs = vfes->GetNDofs(); - const double *solver_data = U->HostRead(); + const double* solver_data = U->HostRead(); - mfem::ParGridFunction *species = + mfem::ParGridFunction* species = new mfem::ParGridFunction(&interface.NativeFes(TPS::Tps2Boltzmann::Index::SpeciesDensities)); - mfem::ParGridFunction *heavyTemperature = + mfem::ParGridFunction* heavyTemperature = new mfem::ParGridFunction(&interface.NativeFes(TPS::Tps2Boltzmann::Index::HeavyTemperature)); - mfem::ParGridFunction *electronTemperature = + mfem::ParGridFunction* electronTemperature = new mfem::ParGridFunction(&interface.NativeFes(TPS::Tps2Boltzmann::Index::ElectronTemperature)); - double *species_data = species->HostWrite(); - double *heavyTemperature_data = heavyTemperature->HostWrite(); - double *electronTemperature_data = electronTemperature->HostWrite(); + double* species_data = species->HostWrite(); + double* heavyTemperature_data = heavyTemperature->HostWrite(); + double* electronTemperature_data = electronTemperature->HostWrite(); double state_local[gpudata::MAXEQUATIONS]; double species_local[gpudata::MAXSPECIES]; - PerfectMixture *pmixture = dynamic_cast(mixture); + PerfectMixture* pmixture = dynamic_cast(mixture); assert(pmixture); for (int i = 0; i < nscalardofs; i++) { @@ -86,12 +86,12 @@ void M2ulPhyS::push(TPS::Tps2Boltzmann &interface) { delete electronTemperature; } -void M2ulPhyS::fetch(TPS::Tps2Boltzmann &interface) { - mfem::ParFiniteElementSpace *reaction_rates_fes(&(interface.NativeFes(TPS::Tps2Boltzmann::Index::ReactionRates))); +void M2ulPhyS::fetch(TPS::Tps2Boltzmann& interface) { + mfem::ParFiniteElementSpace* reaction_rates_fes(&(interface.NativeFes(TPS::Tps2Boltzmann::Index::ReactionRates))); externalReactionRates.reset(new mfem::ParGridFunction(reaction_rates_fes)); interface.interpolateToNativeFES(*externalReactionRates, TPS::Tps2Boltzmann::Index::ReactionRates); #if defined(_CUDA_) || defined(_HIP_) - const double *data(externalReactionRates->Read()); + const double* data(externalReactionRates->Read()); int size(externalReactionRates->FESpace()->GetNDofs()); assert(externalReactionRates->FESpace()->GetOrdering() == mfem::Ordering::byNODES); gpu::deviceSetChemistryReactionData<<<1, 1>>>(data, size, chemistry_); diff --git a/src/algebraicSubgridModels.cpp b/src/algebraicSubgridModels.cpp index 7bb2c7be..e7187492 100644 --- a/src/algebraicSubgridModels.cpp +++ b/src/algebraicSubgridModels.cpp @@ -48,8 +48,8 @@ using namespace mfem; using namespace mfem::common; -AlgebraicSubgridModels::AlgebraicSubgridModels(mfem::ParMesh *pmesh, LoMachOptions *loMach_opts, TPS::Tps *tps, - ParGridFunction *gridScale, int sModel) +AlgebraicSubgridModels::AlgebraicSubgridModels(mfem::ParMesh* pmesh, LoMachOptions* loMach_opts, TPS::Tps* tps, + ParGridFunction* gridScale, int sModel) : tpsP_(tps), loMach_opts_(loMach_opts), pmesh_(pmesh) { rank_ = pmesh_->GetMyRank(); rank0_ = (pmesh_->GetMyRank() == 0); @@ -163,7 +163,7 @@ void AlgebraicSubgridModels::initializeOperators() { this->step(); } -void AlgebraicSubgridModels::initializeViz(ParaViewDataCollection &pvdc) { +void AlgebraicSubgridModels::initializeViz(ParaViewDataCollection& pvdc) { pvdc.RegisterField("muT", &subgridVisc_gf_); } @@ -183,12 +183,12 @@ void AlgebraicSubgridModels::step() { (thermoChem_interface_->density)->GetTrueDofs(rn_); subgridVisc_ = 0.0; - const double *dGradU = gradU_.HostRead(); - const double *dGradV = gradV_.HostRead(); - const double *dGradW = gradW_.HostRead(); - const double *rho = rn_.HostRead(); - const double *del = gridScale_->HostRead(); - double *data = subgridVisc_.HostReadWrite(); + const double* dGradU = gradU_.HostRead(); + const double* dGradV = gradV_.HostRead(); + const double* dGradW = gradW_.HostRead(); + const double* rho = rn_.HostRead(); + const double* del = gridScale_->HostRead(); + double* data = subgridVisc_.HostReadWrite(); if (sModel_ == 1) { for (int i = 0; i < SdofInt_; i++) { @@ -259,7 +259,7 @@ void AlgebraicSubgridModels::step() { subgridVisc_gf_.GetTrueDofs(subgridVisc_); // clip any small negatives resulting from filtering - double *dmuT = subgridVisc_.HostReadWrite(); + double* dmuT = subgridVisc_.HostReadWrite(); for (int i = 0; i < SdofInt_; i++) { dmuT[i] = std::max(dmuT[i], 1.0e-15); } @@ -272,8 +272,8 @@ void AlgebraicSubgridModels::step() { double wt0 = 1.0 / std::min((double)aveSteps_, (double)activeSteps_); double wt1 = 1.0 - wt0; - double *dmuT = subgridVisc_.HostReadWrite(); - double *dmuT0 = muT_NM1_.HostReadWrite(); + double* dmuT = subgridVisc_.HostReadWrite(); + double* dmuT0 = muT_NM1_.HostReadWrite(); for (int i = 0; i < SdofInt_; i++) { // \bar{muT}^{n} = wt0*muT' + wt1*\bar{muT}^{n-1} dmuT[i] *= wt0; @@ -289,7 +289,7 @@ void AlgebraicSubgridModels::step() { /** Basic Smagorinksy subgrid model with user-specified coefficient */ -void AlgebraicSubgridModels::sgsSmag(const DenseMatrix &gradUp, double delta, double &nu) { +void AlgebraicSubgridModels::sgsSmag(const DenseMatrix& gradUp, double delta, double& nu) { Vector Sij(6); double Smag = 0.; double Cd; @@ -321,7 +321,7 @@ void AlgebraicSubgridModels::sgsSmag(const DenseMatrix &gradUp, double delta, do WALE model, see: Weicker 2010 Note: gradUp is in (eq,dim) form */ -void AlgebraicSubgridModels::sgsWALE(const DenseMatrix &gradUp, double delta, double &nu) { +void AlgebraicSubgridModels::sgsWALE(const DenseMatrix& gradUp, double delta, double& nu) { DenseMatrix Sij(dim_, dim_); DenseMatrix Oij(dim_, dim_); DenseMatrix gij(dim_, dim_); @@ -455,7 +455,7 @@ void AlgebraicSubgridModels::sgsWALE(const DenseMatrix &gradUp, double delta, do NOT TESTED: Sigma subgrid model following Nicoud et.al., "Using singular values to build a subgrid-scale model for large eddy simulations", PoF 2011. */ -void AlgebraicSubgridModels::sgsSigma(const DenseMatrix &gradUp, double delta, double &nu) { +void AlgebraicSubgridModels::sgsSigma(const DenseMatrix& gradUp, double delta, double& nu) { DenseMatrix Qij(dim_, dim_); DenseMatrix du(dim_, dim_); DenseMatrix B(dim_, dim_); diff --git a/src/algebraicSubgridModels.hpp b/src/algebraicSubgridModels.hpp index c7e52393..376baec0 100644 --- a/src/algebraicSubgridModels.hpp +++ b/src/algebraicSubgridModels.hpp @@ -54,8 +54,8 @@ class Tps; #include "tps_mfem_wrap.hpp" #include "turb_model_base.hpp" -using VecFuncT = void(const Vector &x, double t, Vector &u); -using ScalarFuncT = double(const Vector &x, double t); +using VecFuncT = void(const Vector& x, double t, Vector& u); +using ScalarFuncT = double(const Vector& x, double t); class LoMachSolver; class LoMachOptions; @@ -66,9 +66,9 @@ class AlgebraicSubgridModels : public TurbModelBase { friend class LoMachSolver; private: - TPS::Tps *tpsP_; + TPS::Tps* tpsP_; // LoMachSolver *loMach_; - LoMachOptions *loMach_opts_ = nullptr; + LoMachOptions* loMach_opts_ = nullptr; // MPI_Groups *groupsMPI; // int nprocs_; // total number of MPI procs @@ -81,7 +81,7 @@ class AlgebraicSubgridModels : public TurbModelBase { /// Enable/disable verbose output. bool verbose = true; - ParMesh *pmesh_ = nullptr; + ParMesh* pmesh_ = nullptr; // The order of the scalar spaces int order_; @@ -100,32 +100,32 @@ class AlgebraicSubgridModels : public TurbModelBase { // const temporalSchemeCoefficients &timeCoeff_; // Scalar \f$H^1\f$ finite element collection. - FiniteElementCollection *sfec_ = nullptr; + FiniteElementCollection* sfec_ = nullptr; // Scalar \f$H^1\f$ finite element space. - ParFiniteElementSpace *sfes_ = nullptr; + ParFiniteElementSpace* sfes_ = nullptr; /// Velocity \f$H^1\f$ finite element collection. - FiniteElementCollection *vfec_ = nullptr; + FiniteElementCollection* vfec_ = nullptr; /// Velocity \f$(H^1)^d\f$ finite element space. - ParFiniteElementSpace *vfes_ = nullptr; + ParFiniteElementSpace* vfes_ = nullptr; /// spaces for filtered eddy viscosity - FiniteElementCollection *sfec_filter_ = nullptr; - ParFiniteElementSpace *sfes_filter_ = nullptr; + FiniteElementCollection* sfec_filter_ = nullptr; + ParFiniteElementSpace* sfes_filter_ = nullptr; - ParGridFunction *gradU_gf_ = nullptr; - ParGridFunction *gradV_gf_ = nullptr; - ParGridFunction *gradW_gf_ = nullptr; + ParGridFunction* gradU_gf_ = nullptr; + ParGridFunction* gradV_gf_ = nullptr; + ParGridFunction* gradW_gf_ = nullptr; Vector gradU_; Vector gradV_; Vector gradW_; - ParGridFunction *rn_gf_ = nullptr; + ParGridFunction* rn_gf_ = nullptr; Vector rn_; - ParGridFunction *delta_gf_ = nullptr; + ParGridFunction* delta_gf_ = nullptr; Vector delta_; ParGridFunction subgridVisc_gf_; @@ -138,7 +138,7 @@ class AlgebraicSubgridModels : public TurbModelBase { ParGridFunction muT_filtered_gf_; // grid information - ParGridFunction *gridScale_ = nullptr; + ParGridFunction* gridScale_ = nullptr; double sgs_model_const_; int sgs_model_nFilter_; @@ -147,7 +147,7 @@ class AlgebraicSubgridModels : public TurbModelBase { int activeSteps_; public: - AlgebraicSubgridModels(mfem::ParMesh *pmesh, LoMachOptions *loMach_opts, TPS::Tps *tps, ParGridFunction *gridScale, + AlgebraicSubgridModels(mfem::ParMesh* pmesh, LoMachOptions* loMach_opts, TPS::Tps* tps, ParGridFunction* gridScale, int sModel); virtual ~AlgebraicSubgridModels(); @@ -156,14 +156,14 @@ class AlgebraicSubgridModels : public TurbModelBase { void initializeOperators() final; void step() final; void setup() final; - void initializeViz(ParaViewDataCollection &pvdc) final; + void initializeViz(ParaViewDataCollection& pvdc) final; /// Return a pointer to the current temperature ParGridFunction. - ParGridFunction *getCurrentEddyViscosity() { return &subgridVisc_gf_; } + ParGridFunction* getCurrentEddyViscosity() { return &subgridVisc_gf_; } // subgrid scale models => move to turb model class - void sgsSmag(const DenseMatrix &gradUp, double delta, double &nu_sgs); - void sgsSigma(const DenseMatrix &gradUp, double delta, double &nu_sgs); - void sgsWALE(const DenseMatrix &gradUp, double delta, double &nu_sgs); + void sgsSmag(const DenseMatrix& gradUp, double delta, double& nu_sgs); + void sgsSigma(const DenseMatrix& gradUp, double delta, double& nu_sgs); + void sgsWALE(const DenseMatrix& gradUp, double delta, double& nu_sgs); }; #endif // ALGEBRAICSUBGRIDMODELS_HPP_ diff --git a/src/algebraic_rans.cpp b/src/algebraic_rans.cpp index 6f2854e3..46b9f3ab 100644 --- a/src/algebraic_rans.cpp +++ b/src/algebraic_rans.cpp @@ -40,8 +40,8 @@ using namespace mfem; -AlgebraicRans::AlgebraicRans(ParMesh *pmesh, const Array &partitioning, int order, TPS::Tps *tps, - ParGridFunction *distance) +AlgebraicRans::AlgebraicRans(ParMesh* pmesh, const Array& partitioning, int order, TPS::Tps* tps, + ParGridFunction* distance) : pmesh_(pmesh), order_(order), distance_(distance) { dim_ = pmesh_->Dimension(); @@ -112,7 +112,7 @@ void AlgebraicRans::initializeSelf() { toThermoChem_interface_.eddy_viscosity = mut_; } -void AlgebraicRans::initializeViz(mfem::ParaViewDataCollection &pvdc) { +void AlgebraicRans::initializeViz(mfem::ParaViewDataCollection& pvdc) { pvdc.RegisterField("muT", mut_); pvdc.RegisterField("distance", distance_); } @@ -134,9 +134,9 @@ void AlgebraicRans::step() { // mut_, since rest of operations are multiplicative if (axisym_) { int ndof = sfes_->GetNDofs(); - double *d_mut = mut_->Write(); - const double *d_omega = vorticity_gf_->Read(); - const double *d_swirl_omega = swirl_vorticity_gf_->Read(); + double* d_mut = mut_->Write(); + const double* d_omega = vorticity_gf_->Read(); + const double* d_swirl_omega = swirl_vorticity_gf_->Read(); MFEM_FORALL(i, ndof, { double omega_r = d_swirl_omega[i]; double omega_th = d_omega[i]; @@ -147,8 +147,8 @@ void AlgebraicRans::step() { } else { if (dim_ == 2) { int ndof = sfes_->GetNDofs(); - double *d_mut = mut_->Write(); - const double *d_omega = vorticity_gf_->Read(); + double* d_mut = mut_->Write(); + const double* d_omega = vorticity_gf_->Read(); MFEM_FORALL(i, ndof, { double omega_z = d_omega[i]; double magn_omega_2 = omega_z * omega_z; @@ -156,8 +156,8 @@ void AlgebraicRans::step() { }); } else { // dim_ == 3 int ndof = sfes_->GetNDofs(); - double *d_mut = mut_->Write(); - const double *d_omega = vorticity_gf_->Read(); + double* d_mut = mut_->Write(); + const double* d_omega = vorticity_gf_->Read(); MFEM_FORALL(i, ndof, { double omega_x = d_omega[i]; double omega_y = d_omega[ndof + i]; @@ -171,8 +171,8 @@ void AlgebraicRans::step() { // Evaluate the mixing length { int ndof = sfes_->GetNDofs(); - double *d_ellmix = ell_mix_gf_->Write(); - const double *d_dist = distance_->Read(); + double* d_ellmix = ell_mix_gf_->Write(); + const double* d_dist = distance_->Read(); const double kap = kappa_von_karman_; const double max_ell = max_mixing_length_; MFEM_FORALL(i, ndof, { d_ellmix[i] = min(kap * d_dist[i], max_ell); }); diff --git a/src/algebraic_rans.hpp b/src/algebraic_rans.hpp index 9a9a1f55..2a30b208 100644 --- a/src/algebraic_rans.hpp +++ b/src/algebraic_rans.hpp @@ -46,7 +46,7 @@ */ class AlgebraicRans : public TurbModelBase { protected: - mfem::ParMesh *pmesh_ = nullptr; + mfem::ParMesh* pmesh_ = nullptr; int order_; int dim_; bool axisym_; @@ -54,32 +54,32 @@ class AlgebraicRans : public TurbModelBase { double max_mixing_length_; double kappa_von_karman_; - mfem::FiniteElementCollection *sfec_ = nullptr; - mfem::ParFiniteElementSpace *sfes_ = nullptr; + mfem::FiniteElementCollection* sfec_ = nullptr; + mfem::ParFiniteElementSpace* sfes_ = nullptr; - mfem::FiniteElementCollection *vfec_ = nullptr; - mfem::ParFiniteElementSpace *vfes_ = nullptr; + mfem::FiniteElementCollection* vfec_ = nullptr; + mfem::ParFiniteElementSpace* vfes_ = nullptr; - mfem::ParGridFunction *vorticity_gf_ = nullptr; - mfem::ParGridFunction *swirl_vorticity_gf_ = nullptr; + mfem::ParGridFunction* vorticity_gf_ = nullptr; + mfem::ParGridFunction* swirl_vorticity_gf_ = nullptr; - mfem::ParGridFunction *mut_ = nullptr; - mfem::ParGridFunction *distance_ = nullptr; - mfem::ParGridFunction *ell_mix_gf_ = nullptr; + mfem::ParGridFunction* mut_ = nullptr; + mfem::ParGridFunction* distance_ = nullptr; + mfem::ParGridFunction* ell_mix_gf_ = nullptr; // Only used by filter bool filter_mut_ = false; int filter_p_ = 1; - mfem::FiniteElementCollection *sfec_filter_ = nullptr; - mfem::ParFiniteElementSpace *sfes_filter_ = nullptr; - mfem::ParGridFunction *low_order_mut_ = nullptr; + mfem::FiniteElementCollection* sfec_filter_ = nullptr; + mfem::ParFiniteElementSpace* sfes_filter_ = nullptr; + mfem::ParGridFunction* low_order_mut_ = nullptr; public: /// Constructor // AlgebraicRans(mfem::Mesh *smesh, mfem::ParMesh *pmesh, const mfem::Array &partitioning, int order, TPS::Tps // *tps); - AlgebraicRans(mfem::ParMesh *pmesh, const mfem::Array &partitioning, int order, TPS::Tps *tps, - mfem::ParGridFunction *distance); + AlgebraicRans(mfem::ParMesh* pmesh, const mfem::Array& partitioning, int order, TPS::Tps* tps, + mfem::ParGridFunction* distance); /// Destructor virtual ~AlgebraicRans(); @@ -94,7 +94,7 @@ class AlgebraicRans : public TurbModelBase { /** * @brief Add eddy viscosity and distance function to the visualization output */ - void initializeViz(mfem::ParaViewDataCollection &pvdc) override; + void initializeViz(mfem::ParaViewDataCollection& pvdc) override; /** * @brief Initialize the eddy viscosity. @@ -113,7 +113,7 @@ class AlgebraicRans : public TurbModelBase { */ void setup() override {} - mfem::ParGridFunction *getCurrentEddyViscosity() override { return mut_; } + mfem::ParGridFunction* getCurrentEddyViscosity() override { return mut_; } }; #endif // ALGEBRAIC_RANS_HPP_ diff --git a/src/averaging.cpp b/src/averaging.cpp index eb2d6e0f..4a7c5c36 100644 --- a/src/averaging.cpp +++ b/src/averaging.cpp @@ -47,7 +47,7 @@ AveragingOptions::AveragingOptions() { zero_variances_ = false; } -void AveragingOptions::read(TPS::Tps *tps, std::string prefix) { +void AveragingOptions::read(TPS::Tps* tps, std::string prefix) { std::string basename; if (!prefix.empty()) { basename = prefix + "/averaging"; @@ -61,7 +61,7 @@ void AveragingOptions::read(TPS::Tps *tps, std::string prefix) { tps->getInput((basename + "/saveMeanHist").c_str(), save_mean_history_, false); } -Averaging::Averaging(AveragingOptions &opts, std::string output_name) { +Averaging::Averaging(AveragingOptions& opts, std::string output_name) { rank0_ = false; compute_mean_ = false; @@ -89,31 +89,31 @@ Averaging::~Averaging() { } } -void Averaging::registerField(std::string name, const ParGridFunction *field_to_average, bool compute_vari, +void Averaging::registerField(std::string name, const ParGridFunction* field_to_average, bool compute_vari, int vari_start_index, int vari_components) { // quick return if not computing stats... if (!compute_mean_) return; // otherwise, set up ParGridFunction to hold mean... - ParMesh *mesh = field_to_average->ParFESpace()->GetParMesh(); + ParMesh* mesh = field_to_average->ParFESpace()->GetParMesh(); rank0_ = (mesh->GetMyRank() == 0); - ParGridFunction *mean = new ParGridFunction(field_to_average->ParFESpace()); + ParGridFunction* mean = new ParGridFunction(field_to_average->ParFESpace()); *mean = 0.0; // and maybe the vari - ParGridFunction *vari = nullptr; + ParGridFunction* vari = nullptr; if (compute_vari) { // make sure incoming field has enough components to satisfy vari request assert((vari_start_index + vari_components) <= field_to_average->ParFESpace()->GetVDim()); const int num_variance = vari_components * (vari_components + 1) / 2; - const FiniteElementCollection *fec = field_to_average->ParFESpace()->FEColl(); + const FiniteElementCollection* fec = field_to_average->ParFESpace()->FEColl(); const int order = fec->GetOrder(); - FiniteElementCollection *vari_fec = fec->Clone(order); - ParFiniteElementSpace *vari_fes = new ParFiniteElementSpace(mesh, vari_fec, num_variance, Ordering::byNODES); + FiniteElementCollection* vari_fec = fec->Clone(order); + ParFiniteElementSpace* vari_fes = new ParFiniteElementSpace(mesh, vari_fec, num_variance, Ordering::byNODES); vari = new ParGridFunction(vari_fes); vari->MakeOwner(vari_fec); @@ -132,13 +132,13 @@ void Averaging::initializeViz() { // Loop through the families and add them to the paraview output for (size_t i = 0; i < avg_families_.size(); i++) { - ParGridFunction *mean = avg_families_[i].mean_fcn_; - ParGridFunction *vari = avg_families_[i].vari_fcn_; + ParGridFunction* mean = avg_families_[i].mean_fcn_; + ParGridFunction* vari = avg_families_[i].vari_fcn_; - const FiniteElementCollection *fec = mean->ParFESpace()->FEColl(); + const FiniteElementCollection* fec = mean->ParFESpace()->FEColl(); const int order = fec->GetOrder(); - ParMesh *mesh = mean->ParFESpace()->GetParMesh(); + ParMesh* mesh = mean->ParFESpace()->GetParMesh(); // If not yet allocated paraview, do it if (pvdc_ == nullptr) { @@ -164,19 +164,19 @@ void Averaging::initializeViz() { } } -void Averaging::initializeVizForM2ulPhyS(ParFiniteElementSpace *fes, ParFiniteElementSpace *dfes, int nvel) { +void Averaging::initializeVizForM2ulPhyS(ParFiniteElementSpace* fes, ParFiniteElementSpace* dfes, int nvel) { // quick return if not computing stats... if (!compute_mean_) return; assert(avg_families_.size() == 1); - ParGridFunction *meanUp = avg_families_[0].mean_fcn_; - ParGridFunction *vari = avg_families_[0].vari_fcn_; + ParGridFunction* meanUp = avg_families_[0].mean_fcn_; + ParGridFunction* vari = avg_families_[0].vari_fcn_; - const FiniteElementCollection *fec = meanUp->ParFESpace()->FEColl(); + const FiniteElementCollection* fec = meanUp->ParFESpace()->FEColl(); const int order = fec->GetOrder(); - ParMesh *mesh = meanUp->ParFESpace()->GetParMesh(); + ParMesh* mesh = meanUp->ParFESpace()->GetParMesh(); // "helper" spaces to index into meanUp meanRho = new ParGridFunction(fes, meanUp->GetData()); @@ -195,7 +195,7 @@ void Averaging::initializeVizForM2ulPhyS(ParFiniteElementSpace *fes, ParFiniteEl pvdc_->RegisterField("rms", vari); } -void Averaging::addSample(const int &iter, GasMixture *mixture) { +void Averaging::addSample(const int& iter, GasMixture* mixture) { // quick return if not computing stats... if (!compute_mean_) return; @@ -233,7 +233,7 @@ void Averaging::addSample(const int &iter, GasMixture *mixture) { } } -void Averaging::writeViz(const int &iter, const double &time, bool save_mean_hist) { +void Averaging::writeViz(const int& iter, const double& time, bool save_mean_hist) { // quick return if not computing stats... if (!compute_mean_) return; @@ -256,15 +256,15 @@ void Averaging::addSampleInternal() { // Loop through families that have been registered and compute means and variances for (size_t ifam = 0; ifam < avg_families_.size(); ifam++) { // Extract fields for use on device (when available) - AveragingFamily &fam = avg_families_[ifam]; + AveragingFamily& fam = avg_families_[ifam]; - const ParGridFunction *inst = fam.instantaneous_fcn_; - ParGridFunction *mean = fam.mean_fcn_; - ParGridFunction *vari = fam.vari_fcn_; + const ParGridFunction* inst = fam.instantaneous_fcn_; + ParGridFunction* mean = fam.mean_fcn_; + ParGridFunction* vari = fam.vari_fcn_; - const double *d_inst = inst->Read(); - double *d_mean = mean->ReadWrite(); - double *d_vari = nullptr; + const double* d_inst = inst->Read(); + double* d_mean = mean->ReadWrite(); + double* d_vari = nullptr; if (vari != nullptr) { d_vari = vari->ReadWrite(); } @@ -328,7 +328,7 @@ void Averaging::addSampleInternal() { } } -void Averaging::addSampleInternal(GasMixture *mixture) { +void Averaging::addSampleInternal(GasMixture* mixture) { // Assert that there is something to average. In principle we don't // need this, b/c the loop below is a no-op if there are no // families. However, if you got to this point, you're expecting to @@ -339,15 +339,15 @@ void Averaging::addSampleInternal(GasMixture *mixture) { // Loop through families that have been registered and compute means and variances for (size_t ifam = 0; ifam < avg_families_.size(); ifam++) { // Extract fields for use on device (when available) - AveragingFamily &fam = avg_families_[ifam]; + AveragingFamily& fam = avg_families_[ifam]; - const ParGridFunction *inst = fam.instantaneous_fcn_; - ParGridFunction *mean = fam.mean_fcn_; - ParGridFunction *vari = fam.vari_fcn_; + const ParGridFunction* inst = fam.instantaneous_fcn_; + ParGridFunction* mean = fam.mean_fcn_; + ParGridFunction* vari = fam.vari_fcn_; - const double *d_inst = inst->Read(); - double *d_mean = mean->ReadWrite(); - double *d_vari = nullptr; + const double* d_inst = inst->Read(); + double* d_mean = mean->ReadWrite(); + double* d_vari = nullptr; if (vari != nullptr) { d_vari = vari->ReadWrite(); } @@ -359,7 +359,7 @@ void Averaging::addSampleInternal(GasMixture *mixture) { // quantity is pressure. But, in general, it may be null, in // which case, whatever data are in the state are averaged // directly. - GasMixture *d_mixture = mixture; + GasMixture* d_mixture = mixture; // Extract size information for use on device const int dof = mean->ParFESpace()->GetNDofs(); // dofs per scalar field diff --git a/src/averaging.hpp b/src/averaging.hpp index 8a027c8d..5e462c6f 100644 --- a/src/averaging.hpp +++ b/src/averaging.hpp @@ -62,7 +62,7 @@ class AveragingOptions { bool enable_mean_continuation_; /**< Enable / disable continuation of statistics calculations from restart file */ bool zero_variances_; /**< Enable / disable zeroing out the variances at the beginning of a run */ - void read(TPS::Tps *tps, std::string prefix = std::string("")); + void read(TPS::Tps* tps, std::string prefix = std::string("")); }; /** @@ -97,13 +97,13 @@ class AveragingFamily { int vari_components_; /** Pointer to function containing the instantaneous field being averaged (not owned) */ - const ParGridFunction *instantaneous_fcn_; + const ParGridFunction* instantaneous_fcn_; /** Pointer to mean field (owned) */ - ParGridFunction *mean_fcn_; + ParGridFunction* mean_fcn_; /** Pointer to variance field (owned) */ - ParGridFunction *vari_fcn_; + ParGridFunction* vari_fcn_; /** * @brief Constructor @@ -112,7 +112,7 @@ class AveragingFamily { * constructing the AveragingFamily, but AveragingFamily then takes * ownership. */ - AveragingFamily(std::string name, const ParGridFunction *instant, ParGridFunction *mean, ParGridFunction *vari, + AveragingFamily(std::string name, const ParGridFunction* instant, ParGridFunction* mean, ParGridFunction* vari, int vari_start_index = 0, int vari_components = 1) { name_ = name; vari_start_index_ = vari_start_index; @@ -123,7 +123,7 @@ class AveragingFamily { } /// Move constructor (required for emplace_back) - AveragingFamily(AveragingFamily &&fam) { + AveragingFamily(AveragingFamily&& fam) { this->name_ = fam.name_; this->vari_start_index_ = fam.vari_start_index_; this->vari_components_ = fam.vari_components_; @@ -184,16 +184,16 @@ class Averaging { bool zero_variances_; /// mfem paraview data collection, used to write viz files - ParaViewDataCollection *pvdc_ = nullptr; + ParaViewDataCollection* pvdc_ = nullptr; /// time averaged p, rho, vel (pointers to meanUp) for visualization (M2ulPhyS only!) - ParGridFunction *meanP = nullptr; - ParGridFunction *meanRho = nullptr; - ParGridFunction *meanV = nullptr; + ParGridFunction* meanP = nullptr; + ParGridFunction* meanRho = nullptr; + ParGridFunction* meanV = nullptr; public: /// Constructor - Averaging(AveragingOptions &opts, std::string output_name); + Averaging(AveragingOptions& opts, std::string output_name); /// Destructor ~Averaging(); @@ -207,7 +207,7 @@ class Averaging { * @param vari_start_index Variable index at which to start variances (see AveragingFamily) * @param vari_components Number of variables in variances (see AveragingFamily) */ - void registerField(std::string name, const ParGridFunction *field_to_average, bool compute_vari = true, + void registerField(std::string name, const ParGridFunction* field_to_average, bool compute_vari = true, int vari_start_index = 0, int vari_components = 1); /** @@ -222,12 +222,12 @@ class Averaging { * returns. If so, farms work out to appropriate addSampleInternal * variant. */ - void addSample(const int &iter, GasMixture *mixture = nullptr); + void addSample(const int& iter, GasMixture* mixture = nullptr); /** * @brief Write paraview visualization files with statistics */ - void writeViz(const int &iter, const double &time, bool save_mean_hist); + void writeViz(const int& iter, const double& time, bool save_mean_hist); /** * @brief Internal implementation of sample addition @@ -245,7 +245,7 @@ class Averaging { * requirement on device lambdas. Instead of this method, you * should call addSample (with mixture = a valid GasMixture object). */ - void addSampleInternal(GasMixture *mixture); + void addSampleInternal(GasMixture* mixture); /** * @brief Initialize visualiztion for statistics (M2ulPhyS version) @@ -254,7 +254,7 @@ class Averaging { * with how stats viz files were originally labeled. It should only * be used inside M2ulPhyS. */ - void initializeVizForM2ulPhyS(ParFiniteElementSpace *fes, ParFiniteElementSpace *dfes, int nvel); + void initializeVizForM2ulPhyS(ParFiniteElementSpace* fes, ParFiniteElementSpace* dfes, int nvel); int getFamilyIndex(std::string name) const { for (size_t i = 0; i < avg_families_.size(); i++) { @@ -268,7 +268,7 @@ class Averaging { * * @param name Name of the family */ - ParGridFunction *GetMeanField(std::string name) { + ParGridFunction* GetMeanField(std::string name) { const int i = getFamilyIndex(name); assert(i >= 0); return avg_families_[i].mean_fcn_; @@ -279,7 +279,7 @@ class Averaging { * * @param name Name of the family */ - ParGridFunction *GetVariField(std::string name) { + ParGridFunction* GetVariField(std::string name) { const int i = getFamilyIndex(name); assert(i >= 0); return avg_families_[i].vari_fcn_; @@ -294,9 +294,9 @@ class Averaging { bool ContinueMean() { return enable_mean_continuation_; } bool RestartRMS() { return zero_variances_; } - void SetSamplesMean(int &samples) { ns_mean_ = samples; } - void SetSamplesRMS(int &samples) { ns_vari_ = samples; } - void SetSamplesInterval(int &interval) { sample_interval_ = interval; } + void SetSamplesMean(int& samples) { ns_mean_ = samples; } + void SetSamplesRMS(int& samples) { ns_vari_ = samples; } + void SetSamplesInterval(int& interval) { sample_interval_ = interval; } }; #endif // AVERAGING_HPP_ diff --git a/src/calorically_perfect.cpp b/src/calorically_perfect.cpp index 4a8a79b4..18e41c5e 100644 --- a/src/calorically_perfect.cpp +++ b/src/calorically_perfect.cpp @@ -57,14 +57,25 @@ MFEM_HOST_DEVICE double Sutherland(const double T, const double mu_star, const d return mu_star * T_rat_32 * S_rat; } -CaloricallyPerfectThermoChem::CaloricallyPerfectThermoChem(mfem::ParMesh *pmesh, LoMachOptions *loMach_opts, - temporalSchemeCoefficients &time_coeff, - ParGridFunction *gridScale, TPS::Tps *tps) +CaloricallyPerfectThermoChem::CaloricallyPerfectThermoChem(mfem::ParMesh* pmesh, LoMachOptions* loMach_opts, + temporalSchemeCoefficients& time_coeff, + ParGridFunction* gridScale, TPS::Tps* tps) : tpsP_(tps), pmesh_(pmesh), time_coeff_(time_coeff) { rank0_ = (pmesh_->GetMyRank() == 0); order_ = loMach_opts->order; gridScale_gf_ = gridScale; + tps->getInput("loMach/axisymmetric", axisym_, false); + if (axisym_) { + if (rank0_) { + std::cout << "ERROR: axisymmetric is not currently implemented in calorically_perfect. Either implement or use " + "LTE or reacting..." + << std::endl; + } + assert(false); + exit(1); + } + std::string visc_model; tpsP_->getInput("loMach/calperfect/viscosity-model", visc_model, std::string("sutherland")); if (visc_model == "sutherland") { @@ -135,10 +146,10 @@ CaloricallyPerfectThermoChem::CaloricallyPerfectThermoChem(mfem::ParMesh *pmesh, tpsP_->getInput("loMach/calperfect/msolve-max-iter", mass_inverse_max_iter_, max_iter_); tpsP_->getInput("loMach/calperfect/msolve-verbosity", mass_inverse_pl_, pl_solve_); - // artificial diffusion (SUPG) + // artificial diffusion (SUPG) use full for all but momentum tpsP_->getInput("loMach/calperfect/streamwise-stabilization", sw_stab_, false); - tpsP_->getInput("loMach/calperfect/Reh_factor", Reh_factor_, 0.5); - tpsP_->getInput("loMach/calperfect/Reh_offset", Reh_offset_, 1.0); + tpsP_->getInput("loMach/calperfect/Reh_factor", Reh_factor_, 1.0); + tpsP_->getInput("loMach/calperfect/Reh_offset", Reh_offset_, 0.0); } CaloricallyPerfectThermoChem::~CaloricallyPerfectThermoChem() { @@ -348,6 +359,17 @@ void CaloricallyPerfectThermoChem::initializeSelf() { } AddTempDirichletBC(temperature_value, inlet_attr); + } else if (type == "normal") { + Array inlet_attr(pmesh_->bdr_attributes.Max()); + inlet_attr = 0; + inlet_attr[patch - 1] = 1; + double temperature_value; + tpsP_->getRequiredInput((basepath + "/temperature").c_str(), temperature_value); + if (rank0_) { + std::cout << "Calorically Perfect: Setting uniform Dirichlet temperature on patch = " << patch << std::endl; + } + AddTempDirichletBC(temperature_value, inlet_attr); + } else if (type == "interpolate") { Array inlet_attr(pmesh_->bdr_attributes.Max()); inlet_attr = 0; @@ -415,11 +437,11 @@ void CaloricallyPerfectThermoChem::initializeSelf() { double Twall; tpsP_->getRequiredInput((basepath + "/temperature").c_str(), Twall); - ConstantCoefficient *Twall_coeff = new ConstantCoefficient(); + ConstantCoefficient* Twall_coeff = new ConstantCoefficient(); Twall_coeff->constant = Twall; AddTempDirichletBC(Twall_coeff, attr_wall); - ConstantCoefficient *Qt_bc_coeff = new ConstantCoefficient(); + ConstantCoefficient* Qt_bc_coeff = new ConstantCoefficient(); Qt_bc_coeff->constant = 0.0; AddQtDirichletBC(Qt_bc_coeff, attr_wall); } @@ -444,9 +466,9 @@ void CaloricallyPerfectThermoChem::initializeOperators() { // unsteady: p+p [+p] = 2p [3p] // convection: p+p+(p-1) [+p] = 3p-1 [4p-1] // diffusion: (p-1)+(p-1) [+p] = 2p-2 [3p-2] - const IntegrationRule &ir_i = gll_rules_.Get(sfes_->GetFE(0)->GetGeomType(), 2 * order_ + 1); - const IntegrationRule &ir_nli = gll_rules_.Get(sfes_->GetFE(0)->GetGeomType(), 4 * order_); - const IntegrationRule &ir_di = gll_rules_.Get(sfes_->GetFE(0)->GetGeomType(), 3 * order_ - 1); + const IntegrationRule& ir_i = gll_rules_.Get(sfes_->GetFE(0)->GetGeomType(), 2 * order_ + 1); + const IntegrationRule& ir_nli = gll_rules_.Get(sfes_->GetFE(0)->GetGeomType(), 4 * order_); + const IntegrationRule& ir_di = gll_rules_.Get(sfes_->GetFE(0)->GetGeomType(), 3 * order_ - 1); if (rank0_) std::cout << "Integration rules set" << endl; // coefficients for operators @@ -498,7 +520,7 @@ void CaloricallyPerfectThermoChem::initializeOperators() { } At_form_ = new ParBilinearForm(sfes_); - auto *at_blfi = new ConvectionIntegrator(*rhou_coeff_); + auto* at_blfi = new ConvectionIntegrator(*rhou_coeff_); if (numerical_integ_) { at_blfi->SetIntRule(&ir_nli); } @@ -509,7 +531,7 @@ void CaloricallyPerfectThermoChem::initializeOperators() { // mass matrix Ms_form_ = new ParBilinearForm(sfes_); - auto *ms_blfi = new MassIntegrator; + auto* ms_blfi = new MassIntegrator; if (numerical_integ_) { ms_blfi->SetIntRule(&ir_i); } @@ -522,7 +544,7 @@ void CaloricallyPerfectThermoChem::initializeOperators() { // mass matrix with rho MsRho_form_ = new ParBilinearForm(sfes_); - auto *msrho_blfi = new MassIntegrator(*rho_coeff_); + auto* msrho_blfi = new MassIntegrator(*rho_coeff_); if (numerical_integ_) { msrho_blfi->SetIntRule(&ir_i); // msrho_blfi->SetIntRule(&ir_di); @@ -534,15 +556,15 @@ void CaloricallyPerfectThermoChem::initializeOperators() { // Helmholtz Ht_form_ = new ParBilinearForm(sfes_); - auto *hmt_blfi = new MassIntegrator(*rho_over_dt_coeff_); - auto *hdt_blfi = new DiffusionIntegrator(*thermal_diff_total_coeff_); + auto* hmt_blfi = new MassIntegrator(*rho_over_dt_coeff_); + auto* hdt_blfi = new DiffusionIntegrator(*thermal_diff_total_coeff_); if (numerical_integ_) { hmt_blfi->SetIntRule(&ir_di); hdt_blfi->SetIntRule(&ir_di); } // SUPG diffusion if (sw_stab_) { - auto *sdt_blfi = new DiffusionIntegrator(*supg_coeff_); + auto* sdt_blfi = new DiffusionIntegrator(*supg_coeff_); if (numerical_integ_) { sdt_blfi->SetIntRule(&ir_di); } @@ -560,10 +582,10 @@ void CaloricallyPerfectThermoChem::initializeOperators() { MsInvPC_ = new OperatorJacobiSmoother(diag_pa, empty); } else { MsInvPC_ = new HypreSmoother(*Ms_.As()); - dynamic_cast(MsInvPC_)->SetType(HypreSmoother::Jacobi, smoother_passes_); - dynamic_cast(MsInvPC_)->SetSOROptions(smoother_relax_weight_, smoother_relax_omega_); - dynamic_cast(MsInvPC_)->SetPolyOptions(smoother_poly_order_, smoother_poly_fraction_, - smoother_eig_est_); + dynamic_cast(MsInvPC_)->SetType(HypreSmoother::Jacobi, smoother_passes_); + dynamic_cast(MsInvPC_)->SetSOROptions(smoother_relax_weight_, smoother_relax_omega_); + dynamic_cast(MsInvPC_)->SetPolyOptions(smoother_poly_order_, smoother_poly_fraction_, + smoother_eig_est_); } MsInv_ = new CGSolver(sfes_->GetComm()); MsInv_->iterative_mode = false; @@ -575,10 +597,10 @@ void CaloricallyPerfectThermoChem::initializeOperators() { MsInv_->SetMaxIter(mass_inverse_max_iter_); HtInvPC_ = new HypreSmoother(*Ht_.As()); - dynamic_cast(HtInvPC_)->SetType(HypreSmoother::Jacobi, smoother_passes_); - dynamic_cast(HtInvPC_)->SetSOROptions(hsmoother_relax_weight_, hsmoother_relax_omega_); - dynamic_cast(HtInvPC_)->SetPolyOptions(smoother_poly_order_, smoother_poly_fraction_, - smoother_eig_est_); + dynamic_cast(HtInvPC_)->SetType(HypreSmoother::Jacobi, smoother_passes_); + dynamic_cast(HtInvPC_)->SetSOROptions(hsmoother_relax_weight_, hsmoother_relax_omega_); + dynamic_cast(HtInvPC_)->SetPolyOptions(smoother_poly_order_, smoother_poly_fraction_, + smoother_eig_est_); HtInv_ = new CGSolver(sfes_->GetComm()); HtInv_->iterative_mode = true; @@ -592,7 +614,7 @@ void CaloricallyPerfectThermoChem::initializeOperators() { // Qt ..................................... Mq_form_ = new ParBilinearForm(sfes_); - auto *mq_blfi = new MassIntegrator; + auto* mq_blfi = new MassIntegrator; if (numerical_integ_) { mq_blfi->SetIntRule(&ir_i); } @@ -611,10 +633,10 @@ void CaloricallyPerfectThermoChem::initializeOperators() { MqInvPC_ = new OperatorJacobiSmoother(diag_pa, empty); } else { MqInvPC_ = new HypreSmoother(*Mq_.As()); - dynamic_cast(MqInvPC_)->SetType(HypreSmoother::Jacobi, smoother_passes_); - dynamic_cast(MqInvPC_)->SetSOROptions(smoother_relax_weight_, smoother_relax_omega_); - dynamic_cast(MqInvPC_)->SetPolyOptions(smoother_poly_order_, smoother_poly_fraction_, - smoother_eig_est_); + dynamic_cast(MqInvPC_)->SetType(HypreSmoother::Jacobi, smoother_passes_); + dynamic_cast(MqInvPC_)->SetSOROptions(smoother_relax_weight_, smoother_relax_omega_); + dynamic_cast(MqInvPC_)->SetPolyOptions(smoother_poly_order_, smoother_poly_fraction_, + smoother_eig_est_); } MqInv_ = new CGSolver(sfes_->GetComm()); MqInv_->iterative_mode = false; @@ -626,20 +648,25 @@ void CaloricallyPerfectThermoChem::initializeOperators() { MqInv_->SetMaxIter(mass_inverse_max_iter_); LQ_form_ = new ParBilinearForm(sfes_); - auto *lqd_blfi = new DiffusionIntegrator(*thermal_diff_total_coeff_); + // auto *lqd_blfi = new DiffusionIntegrator(*thermal_diff_total_coeff_); + // if (axisym_) { + // auto *lqd_blfi = new DiffusionIntegrator(*rad_thermal_diff_total_coeff_); + // } else { + auto* lqd_blfi = new DiffusionIntegrator(*thermal_diff_total_coeff_); + //} if (numerical_integ_) { lqd_blfi->SetIntRule(&ir_di); } LQ_form_->AddDomainIntegrator(lqd_blfi); - // SUPG diffusion - if (sw_stab_) { - auto *slqd_blfi = new DiffusionIntegrator(*supg_coeff_); - if (numerical_integ_) { - slqd_blfi->SetIntRule(&ir_di); - } - LQ_form_->AddDomainIntegrator(slqd_blfi); - } + // NO, this is not consistent and will degrade stability + // if (sw_stab_) { + // auto *slqd_blfi = new DiffusionIntegrator(*supg_coeff_); + // if (numerical_integ_) { + // slqd_blfi->SetIntRule(&ir_di); + // } + // LQ_form_->AddDomainIntegrator(slqd_blfi); + // } if (partial_assembly_) { LQ_form_->SetAssemblyLevel(AssemblyLevel::PARTIAL); @@ -648,7 +675,7 @@ void CaloricallyPerfectThermoChem::initializeOperators() { LQ_form_->FormSystemMatrix(empty, LQ_); LQ_bdry_ = new ParLinearForm(sfes_); - auto *lq_bdry_lfi = new BoundaryNormalLFIntegrator(*kap_gradT_coeff_, 2, -1); + auto* lq_bdry_lfi = new BoundaryNormalLFIntegrator(*kap_gradT_coeff_, 2, -1); if (numerical_integ_) { lq_bdry_lfi->SetIntRule(&ir_di); } @@ -704,7 +731,7 @@ void CaloricallyPerfectThermoChem::step() { time_ = time_coeff_.time; // Set current time for velocity Dirichlet boundary conditions. - for (auto &temp_dbc : temp_dbcs_) { + for (auto& temp_dbc : temp_dbcs_) { temp_dbc.coeff->SetTime(time_ + dt_); } @@ -746,7 +773,7 @@ void CaloricallyPerfectThermoChem::step() { HtInv_->SetOperator(*Ht_); // Prepare for the solve - for (auto &temp_dbc : temp_dbcs_) { + for (auto& temp_dbc : temp_dbcs_) { Tn_next_gf_.ProjectBdrCoefficient(*temp_dbc.coeff, temp_dbc.attr); } sfes_->GetRestrictionMatrix()->MultTranspose(resT_, resT_gf_); @@ -802,19 +829,19 @@ void CaloricallyPerfectThermoChem::computeExplicitTempConvectionOP(bool extrap) } } -void CaloricallyPerfectThermoChem::initializeIO(IODataOrganizer &io) { +void CaloricallyPerfectThermoChem::initializeIO(IODataOrganizer& io) { io.registerIOFamily("Temperature", "/temperature", &Tn_gf_, true, true, sfec_); io.registerIOVar("/temperature", "temperature", 0); } -void CaloricallyPerfectThermoChem::initializeViz(ParaViewDataCollection &pvdc) { +void CaloricallyPerfectThermoChem::initializeViz(ParaViewDataCollection& pvdc) { pvdc.RegisterField("temperature", &Tn_gf_); pvdc.RegisterField("density", &rn_gf_); pvdc.RegisterField("kappa", &kappa_gf_); pvdc.RegisterField("Qt", &Qt_gf_); } -void CaloricallyPerfectThermoChem::initializeStats(Averaging &average, IODataOrganizer &io, bool continuation) { +void CaloricallyPerfectThermoChem::initializeStats(Averaging& average, IODataOrganizer& io, bool continuation) { if (average.ComputeMean()) { // fields for averaging average.registerField(std::string("temperature"), &Tn_gf_, false, 0, 1); @@ -881,8 +908,8 @@ void CaloricallyPerfectThermoChem::updateThermoP() { void CaloricallyPerfectThermoChem::updateDiffusivity() { // viscosity if (!constant_viscosity_) { - double *d_visc = visc_.Write(); - const double *d_T = Tn_.Read(); + double* d_visc = visc_.Write(); + const double* d_T = Tn_.Read(); const double mu_star = mu0_; const double T_star = sutherland_T0_; const double S_star = sutherland_S0_; @@ -978,7 +1005,7 @@ void CaloricallyPerfectThermoChem::computeSystemMass() { } /// Add a Dirichlet boundary condition to the temperature field -void CaloricallyPerfectThermoChem::AddTempDirichletBC(const double &temp, Array &attr) { +void CaloricallyPerfectThermoChem::AddTempDirichletBC(const double& temp, Array& attr) { temp_dbcs_.emplace_back(attr, new ConstantCoefficient(temp)); for (int i = 0; i < attr.Size(); ++i) { if (attr[i] == 1) { @@ -988,7 +1015,7 @@ void CaloricallyPerfectThermoChem::AddTempDirichletBC(const double &temp, Array< } } -void CaloricallyPerfectThermoChem::AddTempDirichletBC(Coefficient *coeff, Array &attr) { +void CaloricallyPerfectThermoChem::AddTempDirichletBC(Coefficient* coeff, Array& attr) { temp_dbcs_.emplace_back(attr, coeff); for (int i = 0; i < attr.Size(); ++i) { if (attr[i] == 1) { @@ -1018,11 +1045,11 @@ void CaloricallyPerfectThermoChem::AddTempDirichletBC(Coefficient *coeff, Array< */ } -void CaloricallyPerfectThermoChem::AddTempDirichletBC(ScalarFuncT *f, Array &attr) { +void CaloricallyPerfectThermoChem::AddTempDirichletBC(ScalarFuncT* f, Array& attr) { AddTempDirichletBC(new FunctionCoefficient(f), attr); } -void CaloricallyPerfectThermoChem::AddQtDirichletBC(Coefficient *coeff, Array &attr) { +void CaloricallyPerfectThermoChem::AddQtDirichletBC(Coefficient* coeff, Array& attr) { Qt_dbcs_.emplace_back(attr, coeff); if (rank0_ && pmesh_->GetMyRank() == 0) { @@ -1043,7 +1070,7 @@ void CaloricallyPerfectThermoChem::AddQtDirichletBC(Coefficient *coeff, Array &attr) { +void CaloricallyPerfectThermoChem::AddQtDirichletBC(ScalarFuncT* f, Array& attr) { AddQtDirichletBC(new FunctionCoefficient(f), attr); } @@ -1076,14 +1103,14 @@ void CaloricallyPerfectThermoChem::computeQtTO() { Qt_gf_.SetFromTrueDofs(Qt_); } -void CaloricallyPerfectThermoChem::screenHeader(std::vector &header) const { +void CaloricallyPerfectThermoChem::screenHeader(std::vector& header) const { if (!domain_is_open_) { header.resize(1); header[0] = "P/P0"; } } -void CaloricallyPerfectThermoChem::screenValues(std::vector &values) { +void CaloricallyPerfectThermoChem::screenValues(std::vector& values) { if (!domain_is_open_) { values.resize(1); values[0] = thermo_pressure_ / ambient_pressure_; diff --git a/src/calorically_perfect.hpp b/src/calorically_perfect.hpp index 46b3378b..1265d4dc 100644 --- a/src/calorically_perfect.hpp +++ b/src/calorically_perfect.hpp @@ -50,8 +50,8 @@ class Tps; #include "tps_mfem_wrap.hpp" #include "utils.hpp" -using VecFuncT = void(const Vector &x, double t, Vector &u); -using ScalarFuncT = double(const Vector &x, double t); +using VecFuncT = void(const Vector& x, double t, Vector& u); +using ScalarFuncT = double(const Vector& x, double t); class LoMachOptions; struct temporalSchemeCoefficients; @@ -62,13 +62,13 @@ struct temporalSchemeCoefficients; class CaloricallyPerfectThermoChem : public ThermoChemModelBase { private: // Options-related structures - TPS::Tps *tpsP_ = nullptr; + TPS::Tps* tpsP_ = nullptr; // Mesh and discretization scheme info - ParMesh *pmesh_ = nullptr; + ParMesh* pmesh_ = nullptr; int order_; IntegrationRules gll_rules_; - const temporalSchemeCoefficients &time_coeff_; + const temporalSchemeCoefficients& time_coeff_; double dt_; double time_; @@ -141,13 +141,16 @@ class CaloricallyPerfectThermoChem : public ThermoChemModelBase { bool sw_stab_; double Reh_factor_, Reh_offset_; + // not currently implemented but we need to yell if someone tries this + bool axisym_; + // FEM related fields and objects // Scalar \f$H^1\f$ finite element collection. - FiniteElementCollection *sfec_ = nullptr; + FiniteElementCollection* sfec_ = nullptr; // Scalar \f$H^1\f$ finite element space. - ParFiniteElementSpace *sfes_ = nullptr; + ParFiniteElementSpace* sfes_ = nullptr; // Fields ParGridFunction Tnm1_gf_, Tnm2_gf_; @@ -160,46 +163,46 @@ class CaloricallyPerfectThermoChem : public ThermoChemModelBase { ParGridFunction R0PM0_gf_; ParGridFunction Qt_gf_; - ParGridFunction *gridScale_gf_ = nullptr; + ParGridFunction* gridScale_gf_ = nullptr; // ParGridFunction *buffer_tInlet_ = nullptr; - GridFunctionCoefficient *temperature_bc_field_ = nullptr; - - VectorGridFunctionCoefficient *un_next_coeff_ = nullptr; - GridFunctionCoefficient *rhon_next_coeff_ = nullptr; - ScalarVectorProductCoefficient *rhou_coeff_ = nullptr; - GridFunctionCoefficient *thermal_diff_coeff_ = nullptr; - GridFunctionCoefficient *mut_coeff_ = nullptr; - GridFunctionCoefficient *mult_coeff_ = nullptr; - SumCoefficient *thermal_diff_sum_coeff_ = nullptr; - ProductCoefficient *thermal_diff_total_coeff_ = nullptr; - GradientGridFunctionCoefficient *gradT_coeff_ = nullptr; - ScalarVectorProductCoefficient *kap_gradT_coeff_ = nullptr; - GridFunctionCoefficient *rho_over_dt_coeff_ = nullptr; - GridFunctionCoefficient *rho_coeff_ = nullptr; - - VectorMagnitudeCoefficient *umag_coeff_ = nullptr; - GridFunctionCoefficient *gscale_coeff_ = nullptr; - GridFunctionCoefficient *visc_coeff_ = nullptr; - PowerCoefficient *visc_inv_coeff_ = nullptr; - ProductCoefficient *reh1_coeff_ = nullptr; - ProductCoefficient *reh2_coeff_ = nullptr; - ProductCoefficient *Reh_coeff_ = nullptr; - ExtTransformedCoefficient *csupg_coeff_ = nullptr; - ProductCoefficient *uw1_coeff_ = nullptr; - ProductCoefficient *uw2_coeff_ = nullptr; - ProductCoefficient *upwind_coeff_ = nullptr; - TransformedMatrixVectorCoefficient *swdiff_coeff_ = nullptr; - ScalarMatrixProductCoefficient *supg_coeff_ = nullptr; + GridFunctionCoefficient* temperature_bc_field_ = nullptr; + + VectorGridFunctionCoefficient* un_next_coeff_ = nullptr; + GridFunctionCoefficient* rhon_next_coeff_ = nullptr; + ScalarVectorProductCoefficient* rhou_coeff_ = nullptr; + GridFunctionCoefficient* thermal_diff_coeff_ = nullptr; + GridFunctionCoefficient* mut_coeff_ = nullptr; + GridFunctionCoefficient* mult_coeff_ = nullptr; + SumCoefficient* thermal_diff_sum_coeff_ = nullptr; + ProductCoefficient* thermal_diff_total_coeff_ = nullptr; + GradientGridFunctionCoefficient* gradT_coeff_ = nullptr; + ScalarVectorProductCoefficient* kap_gradT_coeff_ = nullptr; + GridFunctionCoefficient* rho_over_dt_coeff_ = nullptr; + GridFunctionCoefficient* rho_coeff_ = nullptr; + + VectorMagnitudeCoefficient* umag_coeff_ = nullptr; + GridFunctionCoefficient* gscale_coeff_ = nullptr; + GridFunctionCoefficient* visc_coeff_ = nullptr; + PowerCoefficient* visc_inv_coeff_ = nullptr; + ProductCoefficient* reh1_coeff_ = nullptr; + ProductCoefficient* reh2_coeff_ = nullptr; + ProductCoefficient* Reh_coeff_ = nullptr; + ExtTransformedCoefficient* csupg_coeff_ = nullptr; + ProductCoefficient* uw1_coeff_ = nullptr; + ProductCoefficient* uw2_coeff_ = nullptr; + ProductCoefficient* upwind_coeff_ = nullptr; + TransformedMatrixVectorCoefficient* swdiff_coeff_ = nullptr; + ScalarMatrixProductCoefficient* supg_coeff_ = nullptr; // operators and solvers - ParBilinearForm *At_form_ = nullptr; - ParBilinearForm *Ms_form_ = nullptr; - ParBilinearForm *MsRho_form_ = nullptr; - ParBilinearForm *Ht_form_ = nullptr; - ParBilinearForm *Mq_form_ = nullptr; - ParBilinearForm *LQ_form_ = nullptr; - ParLinearForm *LQ_bdry_ = nullptr; + ParBilinearForm* At_form_ = nullptr; + ParBilinearForm* Ms_form_ = nullptr; + ParBilinearForm* MsRho_form_ = nullptr; + ParBilinearForm* Ht_form_ = nullptr; + ParBilinearForm* Mq_form_ = nullptr; + ParBilinearForm* LQ_form_ = nullptr; + ParLinearForm* LQ_bdry_ = nullptr; OperatorHandle LQ_; OperatorHandle At_; @@ -208,12 +211,12 @@ class CaloricallyPerfectThermoChem : public ThermoChemModelBase { OperatorHandle MsRho_; OperatorHandle Mq_; - mfem::Solver *MsInvPC_ = nullptr; - mfem::CGSolver *MsInv_ = nullptr; - mfem::Solver *MqInvPC_ = nullptr; - mfem::CGSolver *MqInv_ = nullptr; - mfem::Solver *HtInvPC_ = nullptr; - mfem::CGSolver *HtInv_ = nullptr; + mfem::Solver* MsInvPC_ = nullptr; + mfem::CGSolver* MsInv_ = nullptr; + mfem::Solver* MqInvPC_ = nullptr; + mfem::CGSolver* MqInv_ = nullptr; + mfem::Solver* HtInvPC_ = nullptr; + mfem::CGSolver* HtInv_ = nullptr; // Vectors Vector Tn_, Tn_next_, Tnm1_, Tnm2_; @@ -232,8 +235,8 @@ class CaloricallyPerfectThermoChem : public ThermoChemModelBase { int filter_cutoff_modes_ = 0; double filter_alpha_ = 0.0; - FiniteElementCollection *sfec_filter_ = nullptr; - ParFiniteElementSpace *sfes_filter_ = nullptr; + FiniteElementCollection* sfec_filter_ = nullptr; + ParFiniteElementSpace* sfes_filter_ = nullptr; ParGridFunction Tn_NM1_gf_; ParGridFunction Tn_filtered_gf_; @@ -253,20 +256,20 @@ class CaloricallyPerfectThermoChem : public ThermoChemModelBase { #endif public: - CaloricallyPerfectThermoChem(mfem::ParMesh *pmesh, LoMachOptions *loMach_opts, temporalSchemeCoefficients &timeCoeff, - ParGridFunction *gridScale, TPS::Tps *tps); + CaloricallyPerfectThermoChem(mfem::ParMesh* pmesh, LoMachOptions* loMach_opts, temporalSchemeCoefficients& timeCoeff, + ParGridFunction* gridScale, TPS::Tps* tps); virtual ~CaloricallyPerfectThermoChem(); // Functions overriden from base class void initializeSelf() final; void initializeOperators() final; void step() final; - void initializeIO(IODataOrganizer &io) final; - void initializeViz(ParaViewDataCollection &pvdc) final; - void initializeStats(Averaging &average, IODataOrganizer &io, bool continuation) final; + void initializeIO(IODataOrganizer& io) final; + void initializeViz(ParaViewDataCollection& pvdc) final; + void initializeStats(Averaging& average, IODataOrganizer& io, bool continuation) final; - void screenHeader(std::vector &header) const final; - void screenValues(std::vector &values) final; + void screenHeader(std::vector& header) const final; + void screenValues(std::vector& values) final; // Functions added here void updateThermoP(); @@ -280,19 +283,19 @@ class CaloricallyPerfectThermoChem : public ThermoChemModelBase { void computeQtTO(); /// Return a pointer to the current temperature ParGridFunction. - ParGridFunction *GetCurrentTemperature() { return &Tn_gf_; } + ParGridFunction* GetCurrentTemperature() { return &Tn_gf_; } /// Return a pointer to the current density ParGridFunction. - ParGridFunction *GetCurrentDensity() { return &rn_gf_; } + ParGridFunction* GetCurrentDensity() { return &rn_gf_; } /// Return a pointer to the current total viscosity ParGridFunction. - ParGridFunction *GetCurrentViscosity() { return &visc_gf_; } + ParGridFunction* GetCurrentViscosity() { return &visc_gf_; } /// Return a pointer to the current total thermal diffusivity ParGridFunction. - ParGridFunction *GetCurrentThermalDiffusivity() { return &kappa_gf_; } + ParGridFunction* GetCurrentThermalDiffusivity() { return &kappa_gf_; } /// Return a pointer to the current total thermal diffusivity ParGridFunction. - ParGridFunction *GetCurrentThermalDiv() { return &Qt_gf_; } + ParGridFunction* GetCurrentThermalDiv() { return &Qt_gf_; } /// Return thermodynamic pressure for restarts // double GetCurrentThermoPressure() { return thermo_pressure_; } @@ -302,10 +305,10 @@ class CaloricallyPerfectThermoChem : public ThermoChemModelBase { void UpdateTimestepHistory(double dt); /// Add a Dirichlet boundary condition to the temperature and Qt field. - void AddTempDirichletBC(const double &temp, Array &attr); - void AddTempDirichletBC(Coefficient *coeff, Array &attr); - void AddTempDirichletBC(ScalarFuncT *f, Array &attr); - void AddQtDirichletBC(Coefficient *coeff, Array &attr); - void AddQtDirichletBC(ScalarFuncT *f, Array &attr); + void AddTempDirichletBC(const double& temp, Array& attr); + void AddTempDirichletBC(Coefficient* coeff, Array& attr); + void AddTempDirichletBC(ScalarFuncT* f, Array& attr); + void AddQtDirichletBC(Coefficient* coeff, Array& attr); + void AddQtDirichletBC(ScalarFuncT* f, Array& attr); }; #endif // CALORICALLY_PERFECT_HPP_ diff --git a/src/cases.cpp b/src/cases.cpp index 7a0c80c4..51a4b90b 100644 --- a/src/cases.cpp +++ b/src/cases.cpp @@ -54,28 +54,28 @@ using namespace mfem; /// generic user-specified vel ic -void velIC_user(const Vector &x, double t, Vector &u) { +void velIC_user(const Vector& x, double t, Vector& u) { u(0) = 0.0; u(1) = 0.0; u(2) = 0.0; } /// generic user-specified vel bc -void velBC_user(const Vector &x, double t, Vector &u) { +void velBC_user(const Vector& x, double t, Vector& u) { u(0) = 0.0; u(1) = 0.0; u(2) = 0.0; } /// generic user-specified temp ic -double tempIC_user(const Vector &coords, double t) { +double tempIC_user(const Vector& coords, double t) { double temp; temp = -1.0; return temp; } /// Used to set the velocity IC (and to check error) -void vel_exact_tgv2d(const Vector &x, double t, Vector &u) { +void vel_exact_tgv2d(const Vector& x, double t, Vector& u) { const double nu = 1.0; const double F = std::exp(-2 * nu * t); @@ -85,7 +85,7 @@ void vel_exact_tgv2d(const Vector &x, double t, Vector &u) { } /// Used to set the velocity IC with TG field and uniform -void vel_tgv2d_uniform(const Vector &x, double t, Vector &u) { +void vel_tgv2d_uniform(const Vector& x, double t, Vector& u) { const double u0 = 1.0; const double F = 0.1; const double PI = 3.14159265359; @@ -100,7 +100,7 @@ void vel_tgv2d_uniform(const Vector &x, double t, Vector &u) { } /// Used to set the channel IC -void vel_channel(const Vector &x, double t, Vector &u) { +void vel_channel(const Vector& x, double t, Vector& u) { double PI = 3.14159265359; double Lx = 25.0; double Ly = 2.0; @@ -157,13 +157,13 @@ vfptr vel_ic(std::string ic_string_) { } /// Used for pipe flow test case -void vel_exact_pipe(const Vector &x, double t, Vector &u) { +void vel_exact_pipe(const Vector& x, double t, Vector& u) { u(0) = 0.0; u(1) = 2.0 * (1 - x[0] * x[0]); } /// Used for pipe with swirl -double swirl_pipe(const Vector &x, double t) { +double swirl_pipe(const Vector& x, double t) { double rt = 0.9; double R = 1.0; double u_th_max = 1.0; @@ -176,7 +176,7 @@ double swirl_pipe(const Vector &x, double t) { } /// rough tke bc for pipe flow test case -double tke_pipe(const Vector &x, double t) { +double tke_pipe(const Vector& x, double t) { // return 0.05 * std::exp(-50. * (x[0] - 0.75) * (x[0] - 0.75)); return 0.005 * std::exp(-50. * (x[0] - 0.75) * (x[0] - 0.75)); } @@ -195,7 +195,7 @@ vfptr vel_bc(std::string type) { } /// Rayleigh-Taylor ic -double temp_rt3d(const Vector &x, double t) { +double temp_rt3d(const Vector& x, double t) { double CC = 0.05; double twoPi = 6.28318530718; double yWidth = 0.1; @@ -218,7 +218,7 @@ double temp_rt3d(const Vector &x, double t) { } /// Hot/Cold wall channel -double temp_channel(const Vector &coords, double t) { +double temp_channel(const Vector& coords, double t) { double Thi = 400.0; double Tlo = 200.0; double y = coords(1); @@ -228,7 +228,7 @@ double temp_channel(const Vector &coords, double t) { } /// Bouyancy-driven cavity -double temp_lequereBox(const Vector &coords, double t) { +double temp_lequereBox(const Vector& coords, double t) { double Thi = 480.0; double Tlo = 120.0; double Tmean; diff --git a/src/cases.hpp b/src/cases.hpp index a49b911c..a6ba60aa 100644 --- a/src/cases.hpp +++ b/src/cases.hpp @@ -44,27 +44,27 @@ #include "tps_mfem_wrap.hpp" -typedef std::function vfptr; +typedef std::function vfptr; vfptr vel_ic(std::string ic_string_); vfptr vel_bc(std::string type); -typedef std::function sfptr; +typedef std::function sfptr; sfptr temp_ic(std::string ic_string_); sfptr temp_bc(std::string type); -void velIC_user(const mfem::Vector &x, double t, mfem::Vector &u); -void velBC_user(const mfem::Vector &x, double t, mfem::Vector &u); -void vel_exact_tgv2d(const mfem::Vector &x, double t, mfem::Vector &u); -void vel_tgv2d_uniform(const mfem::Vector &x, double t, mfem::Vector &u); -void vel_channel(const mfem::Vector &x, double t, mfem::Vector &u); -void vel_exact_pipe(const mfem::Vector &x, double t, mfem::Vector &u); +void velIC_user(const mfem::Vector& x, double t, mfem::Vector& u); +void velBC_user(const mfem::Vector& x, double t, mfem::Vector& u); +void vel_exact_tgv2d(const mfem::Vector& x, double t, mfem::Vector& u); +void vel_tgv2d_uniform(const mfem::Vector& x, double t, mfem::Vector& u); +void vel_channel(const mfem::Vector& x, double t, mfem::Vector& u); +void vel_exact_pipe(const mfem::Vector& x, double t, mfem::Vector& u); -double swirl_pipe(const mfem::Vector &x, double t); -double tke_pipe(const mfem::Vector &x, double t); +double swirl_pipe(const mfem::Vector& x, double t); +double tke_pipe(const mfem::Vector& x, double t); -double tempIC_user(const mfem::Vector &x, double t); -double temp_rt3d(const mfem::Vector &x, double t); -double temp_channel(const mfem::Vector &x, double t); -double temp_lequereBox(const mfem::Vector &x, double t); +double tempIC_user(const mfem::Vector& x, double t); +double temp_rt3d(const mfem::Vector& x, double t); +double temp_channel(const mfem::Vector& x, double t); +double temp_lequereBox(const mfem::Vector& x, double t); #endif // CASES_HPP_ diff --git a/src/chemistry.cpp b/src/chemistry.cpp index c21e88a5..ad94b1bb 100644 --- a/src/chemistry.cpp +++ b/src/chemistry.cpp @@ -35,9 +35,9 @@ using namespace mfem; using namespace std; -Chemistry::Chemistry(GasMixture *mixture, RunConfiguration &config) : Chemistry(mixture, config.chemistryInput) {} +Chemistry::Chemistry(GasMixture* mixture, RunConfiguration& config) : Chemistry(mixture, config.chemistryInput) {} -MFEM_HOST_DEVICE Chemistry::Chemistry(GasMixture *mixture, const ChemistryInput &inputs) : mixture_(mixture) { +MFEM_HOST_DEVICE Chemistry::Chemistry(GasMixture* mixture, const ChemistryInput& inputs) : mixture_(mixture) { numEquations_ = mixture->GetNumEquations(); numSpecies_ = mixture->GetNumSpecies(); numActiveSpecies_ = mixture->GetNumActiveSpecies(); @@ -121,19 +121,19 @@ MFEM_HOST_DEVICE Chemistry::~Chemistry() { } } -MFEM_HOST_DEVICE void Chemistry::setRates(const double *data, int size) { +MFEM_HOST_DEVICE void Chemistry::setRates(const double* data, int size) { for (int r = 0; r < numReactions_; r++) { if (reactions_[r]->reactionModel == GRIDFUNCTION_RXN) { - GridFunctionReaction *rx = (GridFunctionReaction *)(reactions_[r]); + GridFunctionReaction* rx = (GridFunctionReaction*)(reactions_[r]); rx->setData(data, size); } } } -void Chemistry::setGridFunctionRates(mfem::GridFunction &f) { +void Chemistry::setGridFunctionRates(mfem::GridFunction& f) { for (int r = 0; r < numReactions_; r++) { if (reactions_[r]->reactionModel == GRIDFUNCTION_RXN) { - GridFunctionReaction *rx = dynamic_cast(reactions_[r]); + GridFunctionReaction* rx = dynamic_cast(reactions_[r]); rx->setGridFunction(f); } } @@ -158,8 +158,8 @@ void Chemistry::computeForwardRateCoeffs(const mfem::Vector &ns, const double &T } #endif -MFEM_HOST_DEVICE void Chemistry::computeForwardRateCoeffs(const double *ns, const double &T_h, const double &T_e, - const int &dofindex, double *kfwd) { +MFEM_HOST_DEVICE void Chemistry::computeForwardRateCoeffs(const double* ns, const double& T_h, const double& T_e, + const int& dofindex, double* kfwd) { // kfwd.SetSize(numReactions_); for (int r = 0; r < numReactions_; r++) kfwd[r] = 0.0; @@ -198,7 +198,7 @@ void Chemistry::computeEquilibriumConstants(const double &T_h, const double &T_e } #endif -MFEM_HOST_DEVICE void Chemistry::computeEquilibriumConstants(const double &T_h, const double &T_e, double *kC) { +MFEM_HOST_DEVICE void Chemistry::computeEquilibriumConstants(const double& T_h, const double& T_e, double* kC) { for (int r = 0; r < numReactions_; r++) kC[r] = 0.0; const double Thlim = max(T_h, min_temperature_); @@ -217,8 +217,8 @@ MFEM_HOST_DEVICE void Chemistry::computeEquilibriumConstants(const double &T_h, } // compute progress rate based on mass-action law. -void Chemistry::computeProgressRate(const mfem::Vector &ns, const mfem::Vector &kfwd, const mfem::Vector &keq, - mfem::Vector &progressRate) { +void Chemistry::computeProgressRate(const mfem::Vector& ns, const mfem::Vector& kfwd, const mfem::Vector& keq, + mfem::Vector& progressRate) { progressRate.SetSize(numReactions_); computeProgressRate(&ns[0], &kfwd[0], &keq[0], &progressRate[0]); // for (int r = 0; r < numReactions_; r++) { @@ -235,8 +235,8 @@ void Chemistry::computeProgressRate(const mfem::Vector &ns, const mfem::Vector & // } } -MFEM_HOST_DEVICE void Chemistry::computeProgressRate(const double *ns, const double *kfwd, const double *keq, - double *progressRate) { +MFEM_HOST_DEVICE void Chemistry::computeProgressRate(const double* ns, const double* kfwd, const double* keq, + double* progressRate) { // progressRate.SetSize(numReactions_); for (int r = 0; r < numReactions_; r++) { // forward reaction rate @@ -253,8 +253,8 @@ MFEM_HOST_DEVICE void Chemistry::computeProgressRate(const double *ns, const dou } // compute creation rate based on progress rates. -void Chemistry::computeCreationRate(const mfem::Vector &progressRate, mfem::Vector &creationRate, - mfem::Vector &emissionRate) { +void Chemistry::computeCreationRate(const mfem::Vector& progressRate, mfem::Vector& creationRate, + mfem::Vector& emissionRate) { creationRate.SetSize(numSpecies_); emissionRate.SetSize(numSpecies_); computeCreationRate(&progressRate[0], &creationRate[0], &emissionRate[0]); @@ -274,8 +274,8 @@ void Chemistry::computeCreationRate(const mfem::Vector &progressRate, mfem::Vect // // assert(fabs(totMass) < 1e-7); } -MFEM_HOST_DEVICE void Chemistry::computeCreationRate(const double *progressRate, double *creationRate, - double *emissionRate) { +MFEM_HOST_DEVICE void Chemistry::computeCreationRate(const double* progressRate, double* creationRate, + double* emissionRate) { // creationRate.SetSize(numSpecies_); for (int sp = 0; sp < numSpecies_; sp++) creationRate[sp] = 0.; for (int sp = 0; sp < numSpecies_; sp++) emissionRate[sp] = 0.; diff --git a/src/chemistry.hpp b/src/chemistry.hpp index b38fe7b4..6f334dbe 100644 --- a/src/chemistry.hpp +++ b/src/chemistry.hpp @@ -66,7 +66,7 @@ class Chemistry { productStoich_[gpudata::MAXSPECIES * gpudata::MAXREACTIONS]; // std::vector reactions_; - Reaction *reactions_[gpudata::MAXREACTIONS]; + Reaction* reactions_[gpudata::MAXREACTIONS]; double reactionEnergies_[gpudata::MAXREACTIONS]; // std::map *mixtureToInputMap_; @@ -85,55 +85,55 @@ class Chemistry { // // Kevin: should we use a vector of function pointers? // Kevin: currently, I doubt we need mixture class here. but left it just in case. - GasMixture *mixture_ = NULL; + GasMixture* mixture_ = NULL; double min_temperature_; ReactionModel reactionModels_[gpudata::MAXREACTIONS]; public: - Chemistry(GasMixture *mixture, RunConfiguration &config); - MFEM_HOST_DEVICE Chemistry(GasMixture *mixture, const ChemistryInput &inputs); + Chemistry(GasMixture* mixture, RunConfiguration& config); + MFEM_HOST_DEVICE Chemistry(GasMixture* mixture, const ChemistryInput& inputs); MFEM_HOST_DEVICE ~Chemistry(); // Set the grid function rates for GRIDFUNCTION_RXN reaction types - void setGridFunctionRates(mfem::GridFunction &f); - MFEM_HOST_DEVICE void setRates(const double *data, int size); + void setGridFunctionRates(mfem::GridFunction& f); + MFEM_HOST_DEVICE void setRates(const double* data, int size); // return Vector of reaction rate coefficients, with the size of numReaction_. // WARNING(marc) I have removed "virtual" qualifier here assuming these functions will not // change for child classes. Correct if wrong - void computeForwardRateCoeffs(const Vector &ns, const double &T_h, const double &T_e, Vector &kfwd); - MFEM_HOST_DEVICE void computeForwardRateCoeffs(const double *ns, const double &T_h, const double &T_e, - const int &dofindex, double *kfwd); + void computeForwardRateCoeffs(const Vector& ns, const double& T_h, const double& T_e, Vector& kfwd); + MFEM_HOST_DEVICE void computeForwardRateCoeffs(const double* ns, const double& T_h, const double& T_e, + const int& dofindex, double* kfwd); // void computeEquilibriumConstants(const double &T_h, const double &T_e, Vector &kC); - MFEM_HOST_DEVICE void computeEquilibriumConstants(const double &T_h, const double &T_e, double *kC); + MFEM_HOST_DEVICE void computeEquilibriumConstants(const double& T_h, const double& T_e, double* kC); // return rate coefficients of (reactionIndex)-th reaction. (start from 0) // reactionIndex is taken from reactionMapping.right. // virtual Vector computeRateCoeffOf(const int reactionIndex, const double T_h, const double T_e) {}; - const double *getReactantStoichiometry(const int reactionIndex) { + const double* getReactantStoichiometry(const int reactionIndex) { return &reactantStoich_[reactionIndex * numSpecies_]; } - const double *getProductStoichiometry(const int reactionIndex) { + const double* getProductStoichiometry(const int reactionIndex) { return &productStoich_[reactionIndex * numSpecies_]; } // compute progress rate by mass-action law. - void computeProgressRate(const Vector &ns, const Vector &kfwd, const Vector &keq, Vector &progressRate); - MFEM_HOST_DEVICE void computeProgressRate(const double *ns, const double *kfwd, const double *keq, - double *progressRate); - void computeCreationRate(const Vector &progressRate, Vector &creationRate, Vector &emmisionRate); - MFEM_HOST_DEVICE void computeCreationRate(const double *progressRate, double *creationRate, double *emmisionRate); + void computeProgressRate(const Vector& ns, const Vector& kfwd, const Vector& keq, Vector& progressRate); + MFEM_HOST_DEVICE void computeProgressRate(const double* ns, const double* kfwd, const double* keq, + double* progressRate); + void computeCreationRate(const Vector& progressRate, Vector& creationRate, Vector& emmisionRate); + MFEM_HOST_DEVICE void computeCreationRate(const double* progressRate, double* creationRate, double* emmisionRate); - MFEM_HOST_DEVICE double getReactionEnergy(const int &reactionIndex) { return reactionEnergies_[reactionIndex]; } + MFEM_HOST_DEVICE double getReactionEnergy(const int& reactionIndex) { return reactionEnergies_[reactionIndex]; } int getNumReactions() { return numReactions_; } - MFEM_HOST_DEVICE bool isElectronInvolvedAt(const int &reactionIndex) { + MFEM_HOST_DEVICE bool isElectronInvolvedAt(const int& reactionIndex) { return (electronIndex_ < 0) ? false : (reactantStoich_[electronIndex_ + reactionIndex * numSpecies_] != 0); } diff --git a/src/collision_integrals.cpp b/src/collision_integrals.cpp index 83c28a4f..7cecde7b 100644 --- a/src/collision_integrals.cpp +++ b/src/collision_integrals.cpp @@ -50,67 +50,67 @@ namespace charged { laser-plasma interactions. Journal of Computational Physics, 406, 109190. https://doi.org/10.1016/j.jcp.2019.109190 */ -MFEM_HOST_DEVICE double att11(const double &Tp) { +MFEM_HOST_DEVICE double att11(const double& Tp) { return 0.2150 * pow(log(1.0 + 5.2194 * pow(Tp, 1.0472)), 1.2435) / Tp / Tp; } -MFEM_HOST_DEVICE double att12(const double &Tp) { +MFEM_HOST_DEVICE double att12(const double& Tp) { return 0.0991 * pow(log(1.0 + 7.4684 * pow(Tp, 1.0155)), 1.1536) / Tp / Tp; } -MFEM_HOST_DEVICE double att13(const double &Tp) { +MFEM_HOST_DEVICE double att13(const double& Tp) { return 0.0616 * pow(log(1.0 + 7.8271 * pow(Tp, 0.9452)), 1.1105) / Tp / Tp; } -MFEM_HOST_DEVICE double att14(const double &Tp) { +MFEM_HOST_DEVICE double att14(const double& Tp) { return 0.0308 * pow(log(1.0 + 13.9567 * pow(Tp, 0.9511)), 1.1803) / Tp / Tp; } -MFEM_HOST_DEVICE double att15(const double &Tp) { +MFEM_HOST_DEVICE double att15(const double& Tp) { return 0.0232 * pow(log(1.0 + 13.7888 * pow(Tp, 0.9148)), 1.1532) / Tp / Tp; } -MFEM_HOST_DEVICE double att22(const double &Tp) { +MFEM_HOST_DEVICE double att22(const double& Tp) { return 0.2423 * pow(log(1.0 + 4.6796 * pow(Tp, 1.3290)), 1.1279) / Tp / Tp; } -MFEM_HOST_DEVICE double att23(const double &Tp) { +MFEM_HOST_DEVICE double att23(const double& Tp) { return 0.1221 * pow(log(1.0 + 8.7542 * pow(Tp, 1.3875)), 1.1110) / Tp / Tp; } -MFEM_HOST_DEVICE double att24(const double &Tp) { +MFEM_HOST_DEVICE double att24(const double& Tp) { return 0.0619 * pow(log(1.0 + 18.2538 * pow(Tp, 1.4341)), 1.1618) / Tp / Tp; } -MFEM_HOST_DEVICE double rep11(const double &Tp) { +MFEM_HOST_DEVICE double rep11(const double& Tp) { return 0.3904 * pow(log(1.0 + 0.9100 * pow(Tp, 1.1025)), 1.0544) / Tp / Tp; } -MFEM_HOST_DEVICE double rep12(const double &Tp) { +MFEM_HOST_DEVICE double rep12(const double& Tp) { return 0.1547 * pow(log(1.0 + 1.6597 * pow(Tp, 1.1725)), 0.9792) / Tp / Tp; } -MFEM_HOST_DEVICE double rep13(const double &Tp) { +MFEM_HOST_DEVICE double rep13(const double& Tp) { return 0.0814 * pow(log(1.0 + 2.5815 * pow(Tp, 1.1948)), 0.9570) / Tp / Tp; } -MFEM_HOST_DEVICE double rep14(const double &Tp) { +MFEM_HOST_DEVICE double rep14(const double& Tp) { return 0.0683 * pow(log(1.0 + 1.9774 * pow(Tp, 1.2033)), 0.8264) / Tp / Tp; } -MFEM_HOST_DEVICE double rep15(const double &Tp) { +MFEM_HOST_DEVICE double rep15(const double& Tp) { return 0.0346 * pow(log(1.0 + 4.5177 * pow(Tp, 1.2132)), 0.9294) / Tp / Tp; } -MFEM_HOST_DEVICE double rep22(const double &Tp) { +MFEM_HOST_DEVICE double rep22(const double& Tp) { return 0.4128 * pow(log(1.0 + 1.2436 * pow(Tp, 1.1830)), 1.0123) / Tp / Tp; } -MFEM_HOST_DEVICE double rep23(const double &Tp) { +MFEM_HOST_DEVICE double rep23(const double& Tp) { return 0.2203 * pow(log(1.0 + 1.8832 * pow(Tp, 1.2059)), 0.9851) / Tp / Tp; } -MFEM_HOST_DEVICE double rep24(const double &Tp) { +MFEM_HOST_DEVICE double rep24(const double& Tp) { return 0.1323 * pow(log(1.0 + 2.7248 * pow(Tp, 1.2129)), 0.9847) / Tp / Tp; } @@ -121,13 +121,13 @@ MFEM_HOST_DEVICE double rep24(const double &Tp) { // Takes T in Kelvin, returns in unit of m^2. namespace argon { -MFEM_HOST_DEVICE double ArAr11(const double &T) { +MFEM_HOST_DEVICE double ArAr11(const double& T) { // Reference : fitted from tabulated data of Amdur, I., & Mason, E. A. (1958). Properties of gases at very high // temperatures. Physics of Fluids, 1(5), 370–383. https://doi.org/10.1063/1.1724353 return 2.2910e-18 * pow(T, -0.3032); } -MFEM_HOST_DEVICE double ArAr22(const double &T) { +MFEM_HOST_DEVICE double ArAr22(const double& T) { // Reference : Liu, W. S., Whitten, B. T., & Glass, I. I. (1978). Ionizing argon boundary layers. Part 1. Quasi-steady // flat-plate laminar boundary-layer flows. Journal of Fluid Mechanics, 87(4), 609–640. // https://doi.org/10.1017/S0022112078001792 @@ -135,7 +135,7 @@ MFEM_HOST_DEVICE double ArAr22(const double &T) { } // argon neutral (Ar) - argon positive ion (Ar1P) -MFEM_HOST_DEVICE double ArAr1P11(const double &T) { +MFEM_HOST_DEVICE double ArAr1P11(const double& T) { // Reference: fitted from tabulated data of Devoto, R. S. (1973). Transport coefficients of ionized argon. Physics of // Fluids, 16(5), 616–623. https://doi.org/10.1063/1.1694396 return 4.574321e-18 * pow(T, -0.1805); @@ -165,35 +165,35 @@ MFEM_HOST_DEVICE double logT_fit(const double logT, const double coeff[9]) { Q_{e,Ar}^(1), elastic momentum transfer cross section, is determined by a 7-parameter shifted MERT model, fitted over BSR LXCat dataset. */ -MFEM_HOST_DEVICE double eAr11(const double &T) { +MFEM_HOST_DEVICE double eAr11(const double& T) { const double logT = log(T); const double coeff[9] = {6.36254140e-18, 1.84835040e-18, -5.87727093e-18, 3.20023027e-18, -8.50509054e-19, 1.28163820e-19, -1.11712910e-20, 5.25649382e-22, -1.03296658e-23}; return logT_fit(logT, coeff); } -MFEM_HOST_DEVICE double eAr12(const double &T) { +MFEM_HOST_DEVICE double eAr12(const double& T) { const double logT = log(T); const double coeff[9] = {1.91338172e-17, 5.45418129e-18, -1.78361685e-17, 9.75657946e-18, -2.61115722e-18, 3.98310268e-19, -3.53503678e-20, 1.70375066e-21, -3.45211955e-23}; return logT_fit(logT, coeff); } -MFEM_HOST_DEVICE double eAr13(const double &T) { +MFEM_HOST_DEVICE double eAr13(const double& T) { const double logT = log(T); const double coeff[9] = {3.04685398e-17, 8.39750994e-18, -2.88132528e-17, 1.60147037e-17, -4.34837891e-18, 6.73136845e-19, -6.06704580e-20, 2.97216168e-21, -6.12760944e-23}; return logT_fit(logT, coeff); } -MFEM_HOST_DEVICE double eAr14(const double &T) { +MFEM_HOST_DEVICE double eAr14(const double& T) { const double logT = log(T); const double coeff[9] = {3.90777949e-17, 1.04696956e-17, -3.73774204e-17, 2.10610498e-17, -5.79029566e-18, 9.07573157e-19, -8.28466766e-20, 4.11188110e-21, -8.59225098e-23}; return logT_fit(logT, coeff); } -MFEM_HOST_DEVICE double eAr15(const double &T) { +MFEM_HOST_DEVICE double eAr15(const double& T) { const double logT = log(T); const double coeff[9] = {4.41333290e-17, 1.15696010e-17, -4.25651305e-17, 2.42442440e-17, -6.73359258e-18, 1.06641697e-18, -9.83933863e-20, 4.93775812e-21, -1.04362372e-22}; @@ -211,7 +211,7 @@ namespace nitrogen { // Reference : Levin et. al. (1990). "Collision Integrals and High Temperature Transport Properties for N-N, O-O, and // N-O". -MFEM_HOST_DEVICE double NiNi11(const double &T) { +MFEM_HOST_DEVICE double NiNi11(const double& T) { /* double logT = log(T); double c[5]; @@ -238,7 +238,7 @@ MFEM_HOST_DEVICE double NiNi11(const double &T) { // Reference : Levin et. al. (1990). "Collision Integrals and High Temperature Transport Properties for N-N, O-O, and // N-O". -MFEM_HOST_DEVICE double NiNi22(const double &T) { +MFEM_HOST_DEVICE double NiNi22(const double& T) { /* double logT = log(T); double c[5]; @@ -266,7 +266,7 @@ MFEM_HOST_DEVICE double NiNi22(const double &T) { // N-N+: NO DATA (using N-N) // see: su 2023 -MFEM_HOST_DEVICE double NiNi1P11(const double &T) { +MFEM_HOST_DEVICE double NiNi1P11(const double& T) { /* double logT = log(T); double c[5]; @@ -296,7 +296,7 @@ MFEM_HOST_DEVICE double NiNi1P11(const double &T) { // Reference : A. V. Phelps. (1991). "Cross Sections and Swarm Coefficients for Nitrogen Ions and Neutrals in N2 and // Argon Ions and Neutrals in Ar for Energies from 0.1 eV to 10 keV" see also: Capitelli 2000 -MFEM_HOST_DEVICE double N2N211(const double &T) { +MFEM_HOST_DEVICE double N2N211(const double& T) { /* double logT = log(T); double c[5]; @@ -324,7 +324,7 @@ MFEM_HOST_DEVICE double N2N211(const double &T) { // Reference : A. V. Phelps. (1991). "Cross Sections and Swarm Coefficients for Nitrogen Ions and Neutrals in N2 and // Argon Ions and Neutrals in Ar for Energies from 0.1 eV to 10 keV" see also: Capitelli 2000 -MFEM_HOST_DEVICE double N2N222(const double &T) { +MFEM_HOST_DEVICE double N2N222(const double& T) { /* double logT = log(T); double c[5]; @@ -352,7 +352,7 @@ MFEM_HOST_DEVICE double N2N222(const double &T) { // Reference : A. V. Phelps. (1991). "Cross Sections and Swarm Coefficients for Nitrogen Ions and Neutrals in N2 and // Argon Ions and Neutrals in Ar for Energies from 0.1 eV to 10 keV" -MFEM_HOST_DEVICE double N2N21P11(const double &T) { +MFEM_HOST_DEVICE double N2N21P11(const double& T) { double logT = log(T); double c[5]; c[0] = -96.770585022102779; @@ -366,7 +366,7 @@ MFEM_HOST_DEVICE double N2N21P11(const double &T) { // Reference : A. V. Phelps. (1991). "Cross Sections and Swarm Coefficients for Nitrogen Ions and Neutrals in N2 and // Argon Ions and Neutrals in Ar for Energies from 0.1 eV to 10 keV" -MFEM_HOST_DEVICE double N2Ni1P11(const double &T) { +MFEM_HOST_DEVICE double N2Ni1P11(const double& T) { double logT = log(T); double c[7]; c[0] = -7.070758182949830; @@ -383,7 +383,7 @@ MFEM_HOST_DEVICE double N2Ni1P11(const double &T) { // N-N2+ : NO DATA (using N2-N+) // NOTE: this one doesnt really matter as N2 is all N by the temp of N2+ -MFEM_HOST_DEVICE double NiN21P11(const double &T) { +MFEM_HOST_DEVICE double NiN21P11(const double& T) { double logT = log(T); double c[7]; c[0] = -7.070758182949830; @@ -400,7 +400,7 @@ MFEM_HOST_DEVICE double NiN21P11(const double &T) { // N2-N : NO DATA (using N2-N+) // see: su2023 -MFEM_HOST_DEVICE double N2Ni11(const double &T) { +MFEM_HOST_DEVICE double N2Ni11(const double& T) { /* double logT = log(T); double c[5]; @@ -430,7 +430,7 @@ MFEM_HOST_DEVICE double N2Ni11(const double &T) { // N2-N : NO DATA (using N-N 22) // see: su2023 -MFEM_HOST_DEVICE double N2Ni22(const double &T) { +MFEM_HOST_DEVICE double N2Ni22(const double& T) { /* double logT = log(T); double c[5]; @@ -463,7 +463,7 @@ MFEM_HOST_DEVICE double N2Ni22(const double &T) { Q_{e,N}^(1), elastic momentum transfer cross section, fitted over IAA LXCat dataset. */ -MFEM_HOST_DEVICE double eNi11(const double &T) { +MFEM_HOST_DEVICE double eNi11(const double& T) { double logT = log(T); double c[7]; c[0] = 2.583657310241357; @@ -479,7 +479,7 @@ MFEM_HOST_DEVICE double eNi11(const double &T) { return exp(expOmega); } -MFEM_HOST_DEVICE double eNi12(const double &T) { +MFEM_HOST_DEVICE double eNi12(const double& T) { double logT = log(T); double c[7]; c[0] = -1.934755833917042; @@ -495,7 +495,7 @@ MFEM_HOST_DEVICE double eNi12(const double &T) { return exp(expOmega); } -MFEM_HOST_DEVICE double eNi13(const double &T) { +MFEM_HOST_DEVICE double eNi13(const double& T) { double logT = log(T); double c[7]; c[0] = -2.837349005539165; @@ -511,7 +511,7 @@ MFEM_HOST_DEVICE double eNi13(const double &T) { return exp(expOmega); } -MFEM_HOST_DEVICE double eNi14(const double &T) { +MFEM_HOST_DEVICE double eNi14(const double& T) { double logT = log(T); double c[7]; c[0] = -1.673254218486384; @@ -527,7 +527,7 @@ MFEM_HOST_DEVICE double eNi14(const double &T) { return exp(expOmega); } -MFEM_HOST_DEVICE double eNi15(const double &T) { +MFEM_HOST_DEVICE double eNi15(const double& T) { double logT = log(T); double c[7]; c[0] = -1.245791078716272; @@ -543,7 +543,7 @@ MFEM_HOST_DEVICE double eNi15(const double &T) { return exp(expOmega); } -MFEM_HOST_DEVICE double eN211(const double &T) { +MFEM_HOST_DEVICE double eN211(const double& T) { double logT = log(T); double c[6]; c[0] = -3.847278097767338; @@ -558,7 +558,7 @@ MFEM_HOST_DEVICE double eN211(const double &T) { return exp(expOmega); } -MFEM_HOST_DEVICE double eN212(const double &T) { +MFEM_HOST_DEVICE double eN212(const double& T) { double logT = log(T); double c[6]; c[0] = -5.337534425696322; @@ -573,7 +573,7 @@ MFEM_HOST_DEVICE double eN212(const double &T) { return exp(expOmega); } -MFEM_HOST_DEVICE double eN213(const double &T) { +MFEM_HOST_DEVICE double eN213(const double& T) { double logT = log(T); double c[6]; c[0] = -6.527006679994851; @@ -588,7 +588,7 @@ MFEM_HOST_DEVICE double eN213(const double &T) { return exp(expOmega); } -MFEM_HOST_DEVICE double eN214(const double &T) { +MFEM_HOST_DEVICE double eN214(const double& T) { double logT = log(T); double c[6]; c[0] = -6.527006679994851; @@ -603,7 +603,7 @@ MFEM_HOST_DEVICE double eN214(const double &T) { return exp(expOmega); } -MFEM_HOST_DEVICE double eN215(const double &T) { +MFEM_HOST_DEVICE double eN215(const double& T) { double logT = log(T); double c[6]; c[0] = -5.131403805671025; diff --git a/src/collision_integrals.hpp b/src/collision_integrals.hpp index f8682071..31a2646b 100644 --- a/src/collision_integrals.hpp +++ b/src/collision_integrals.hpp @@ -56,25 +56,25 @@ namespace charged { laser-plasma interactions. Journal of Computational Physics, 406, 109190. https://doi.org/10.1016/j.jcp.2019.109190 */ -MFEM_HOST_DEVICE double att11(const double &Tp); -MFEM_HOST_DEVICE double att12(const double &Tp); -MFEM_HOST_DEVICE double att13(const double &Tp); -MFEM_HOST_DEVICE double att14(const double &Tp); -MFEM_HOST_DEVICE double att15(const double &Tp); - -MFEM_HOST_DEVICE double att22(const double &Tp); -MFEM_HOST_DEVICE double att23(const double &Tp); -MFEM_HOST_DEVICE double att24(const double &Tp); - -MFEM_HOST_DEVICE double rep11(const double &Tp); -MFEM_HOST_DEVICE double rep12(const double &Tp); -MFEM_HOST_DEVICE double rep13(const double &Tp); -MFEM_HOST_DEVICE double rep14(const double &Tp); -MFEM_HOST_DEVICE double rep15(const double &Tp); - -MFEM_HOST_DEVICE double rep22(const double &Tp); -MFEM_HOST_DEVICE double rep23(const double &Tp); -MFEM_HOST_DEVICE double rep24(const double &Tp); +MFEM_HOST_DEVICE double att11(const double& Tp); +MFEM_HOST_DEVICE double att12(const double& Tp); +MFEM_HOST_DEVICE double att13(const double& Tp); +MFEM_HOST_DEVICE double att14(const double& Tp); +MFEM_HOST_DEVICE double att15(const double& Tp); + +MFEM_HOST_DEVICE double att22(const double& Tp); +MFEM_HOST_DEVICE double att23(const double& Tp); +MFEM_HOST_DEVICE double att24(const double& Tp); + +MFEM_HOST_DEVICE double rep11(const double& Tp); +MFEM_HOST_DEVICE double rep12(const double& Tp); +MFEM_HOST_DEVICE double rep13(const double& Tp); +MFEM_HOST_DEVICE double rep14(const double& Tp); +MFEM_HOST_DEVICE double rep15(const double& Tp); + +MFEM_HOST_DEVICE double rep22(const double& Tp); +MFEM_HOST_DEVICE double rep23(const double& Tp); +MFEM_HOST_DEVICE double rep24(const double& Tp); } // namespace charged @@ -83,23 +83,23 @@ MFEM_HOST_DEVICE double rep24(const double &Tp); // Takes T in Kelvin, returns in unit of m^2. namespace argon { -MFEM_HOST_DEVICE double ArAr11(const double &T); +MFEM_HOST_DEVICE double ArAr11(const double& T); -MFEM_HOST_DEVICE double ArAr22(const double &T); +MFEM_HOST_DEVICE double ArAr22(const double& T); // argon neutral (Ar) - argon positive ion (Ar1P) -MFEM_HOST_DEVICE double ArAr1P11(const double &T); +MFEM_HOST_DEVICE double ArAr1P11(const double& T); /* e-Ar (l,r) are fitted over numerical quadrature of definitions. Q_{e,Ar}^(1), elastic momentum transfer cross section, is determined by a 7-parameter shifted MERT model, fitted over BSR LXCat dataset. */ -MFEM_HOST_DEVICE double eAr11(const double &T); -MFEM_HOST_DEVICE double eAr12(const double &T); -MFEM_HOST_DEVICE double eAr13(const double &T); -MFEM_HOST_DEVICE double eAr14(const double &T); -MFEM_HOST_DEVICE double eAr15(const double &T); +MFEM_HOST_DEVICE double eAr11(const double& T); +MFEM_HOST_DEVICE double eAr12(const double& T); +MFEM_HOST_DEVICE double eAr13(const double& T); +MFEM_HOST_DEVICE double eAr14(const double& T); +MFEM_HOST_DEVICE double eAr15(const double& T); } // namespace argon @@ -109,37 +109,37 @@ MFEM_HOST_DEVICE double eAr15(const double &T); namespace nitrogen { // atmoic nitrogen neutral (Ar) - atomic nitrogen positive ion (Ni1P) -MFEM_HOST_DEVICE double NiNi1P11(const double &T); -MFEM_HOST_DEVICE double NiNi11(const double &T); -MFEM_HOST_DEVICE double NiNi22(const double &T); +MFEM_HOST_DEVICE double NiNi1P11(const double& T); +MFEM_HOST_DEVICE double NiNi11(const double& T); +MFEM_HOST_DEVICE double NiNi22(const double& T); // molecular nitrogen neutral (N2) - molecular nitrogen positive ion (N21P) -MFEM_HOST_DEVICE double N2N21P11(const double &T); -MFEM_HOST_DEVICE double N2N211(const double &T); -MFEM_HOST_DEVICE double N2N222(const double &T); +MFEM_HOST_DEVICE double N2N21P11(const double& T); +MFEM_HOST_DEVICE double N2N211(const double& T); +MFEM_HOST_DEVICE double N2N222(const double& T); // mixed -MFEM_HOST_DEVICE double N2Ni11(const double &T); -MFEM_HOST_DEVICE double N2Ni22(const double &T); -MFEM_HOST_DEVICE double N2Ni1P11(const double &T); -MFEM_HOST_DEVICE double NiN21P11(const double &T); +MFEM_HOST_DEVICE double N2Ni11(const double& T); +MFEM_HOST_DEVICE double N2Ni22(const double& T); +MFEM_HOST_DEVICE double N2Ni1P11(const double& T); +MFEM_HOST_DEVICE double NiN21P11(const double& T); /* e-Ar (l,r) are fitted over numerical quadrature of definitions. Q_{e,Ar}^(1), elastic momentum transfer cross section, is determined by a 7-parameter shifted MERT model, fitted over BSR LXCat dataset. */ -MFEM_HOST_DEVICE double eNi11(const double &T); -MFEM_HOST_DEVICE double eNi12(const double &T); -MFEM_HOST_DEVICE double eNi13(const double &T); -MFEM_HOST_DEVICE double eNi14(const double &T); -MFEM_HOST_DEVICE double eNi15(const double &T); - -MFEM_HOST_DEVICE double eN211(const double &T); -MFEM_HOST_DEVICE double eN212(const double &T); -MFEM_HOST_DEVICE double eN213(const double &T); -MFEM_HOST_DEVICE double eN214(const double &T); -MFEM_HOST_DEVICE double eN215(const double &T); +MFEM_HOST_DEVICE double eNi11(const double& T); +MFEM_HOST_DEVICE double eNi12(const double& T); +MFEM_HOST_DEVICE double eNi13(const double& T); +MFEM_HOST_DEVICE double eNi14(const double& T); +MFEM_HOST_DEVICE double eNi15(const double& T); + +MFEM_HOST_DEVICE double eN211(const double& T); +MFEM_HOST_DEVICE double eN212(const double& T); +MFEM_HOST_DEVICE double eN213(const double& T); +MFEM_HOST_DEVICE double eN214(const double& T); +MFEM_HOST_DEVICE double eN215(const double& T); } // namespace nitrogen diff --git a/src/cycle_avg_joule_coupling.cpp b/src/cycle_avg_joule_coupling.cpp index 296a2b78..530ec0db 100644 --- a/src/cycle_avg_joule_coupling.cpp +++ b/src/cycle_avg_joule_coupling.cpp @@ -36,7 +36,7 @@ #include "loMach.hpp" #include "quasimagnetostatic.hpp" -CycleAvgJouleCoupling::CycleAvgJouleCoupling(string &inputFileName, TPS::Tps *tps) +CycleAvgJouleCoupling::CycleAvgJouleCoupling(string& inputFileName, TPS::Tps* tps) : em_opt_(), qmsa_solver_(nullptr), flow_solver_(nullptr), @@ -90,7 +90,7 @@ CycleAvgJouleCoupling::CycleAvgJouleCoupling(string &inputFileName, TPS::Tps *tp #endif } -CycleAvgJouleCoupling::CycleAvgJouleCoupling(string &inputFileName, TPS::Tps *tps, int max_out, bool axisym, +CycleAvgJouleCoupling::CycleAvgJouleCoupling(string& inputFileName, TPS::Tps* tps, int max_out, bool axisym, double input_power, double initial_input_power) : em_opt_(), qmsa_solver_(nullptr), @@ -145,8 +145,8 @@ void CycleAvgJouleCoupling::initializeInterpolationData() { if (verbose) grvy_printf(ginfo, "Initializing interpolation data.\n"); #ifdef HAVE_GSLIB - ParMesh *flow_mesh = flow_solver_->getMesh(); - ParMesh *em_mesh = qmsa_solver_->getMesh(); + ParMesh* flow_mesh = flow_solver_->getMesh(); + ParMesh* em_mesh = qmsa_solver_->getMesh(); assert(flow_mesh != NULL); assert(em_mesh != NULL); @@ -163,14 +163,14 @@ void CycleAvgJouleCoupling::initializeInterpolationData() { interp_em_to_flow_->SetDefaultInterpolationValue(0); // Determine numbers of points to interpolate to - const ParFiniteElementSpace *em_fespace = qmsa_solver_->getFESpace(); + const ParFiniteElementSpace* em_fespace = qmsa_solver_->getFESpace(); n_em_interp_nodes_ = 0; for (int i = 0; i < em_mesh->GetNE(); i++) { n_em_interp_nodes_ += em_fespace->GetFE(i)->GetNodes().GetNPoints(); } // Determine numbers of points to interpolate to - const ParFiniteElementSpace *flow_fespace = flow_solver_->getFESpace(); + const ParFiniteElementSpace* flow_fespace = flow_solver_->getFESpace(); n_flow_interp_nodes_ = 0; for (int i = 0; i < flow_mesh->GetNE(); i++) { n_flow_interp_nodes_ += flow_fespace->GetFE(i)->GetNodes().GetNPoints(); @@ -187,8 +187,8 @@ void CycleAvgJouleCoupling::interpConductivityFromFlowToEM() { if (verbose) grvy_printf(ginfo, "Interpolating conductivity to EM mesh.\n"); #ifdef HAVE_GSLIB - const ParMesh *em_mesh = qmsa_solver_->getMesh(); - const ParFiniteElementSpace *em_fespace = qmsa_solver_->getFESpace(); + const ParMesh* em_mesh = qmsa_solver_->getMesh(); + const ParFiniteElementSpace* em_fespace = qmsa_solver_->getFESpace(); const int NE = em_mesh->GetNE(); const int dim = em_mesh->Dimension(); @@ -200,9 +200,9 @@ void CycleAvgJouleCoupling::interpConductivityFromFlowToEM() { int n0 = 0; // running total of starting index for (int i = 0; i < NE; i++) { - const FiniteElement *fe = em_fespace->GetFE(i); + const FiniteElement* fe = em_fespace->GetFE(i); const IntegrationRule ir = fe->GetNodes(); - ElementTransformation *et = em_fespace->GetElementTransformation(i); + ElementTransformation* et = em_fespace->GetElementTransformation(i); const int nsp = ir.GetNPoints(); @@ -226,11 +226,11 @@ void CycleAvgJouleCoupling::interpConductivityFromFlowToEM() { // Interpolate Vector conductivity_em(n_em_interp_nodes_); - const ParGridFunction *conductivity_flow_gf = flow_solver_->getPlasmaConductivityGF(); + const ParGridFunction* conductivity_flow_gf = flow_solver_->getPlasmaConductivityGF(); interp_flow_to_em_->Interpolate(vxyz, *conductivity_flow_gf, conductivity_em); // Set grid function - ParGridFunction *conductivity_em_gf = qmsa_solver_->getPlasmaConductivityGF(); + ParGridFunction* conductivity_em_gf = qmsa_solver_->getPlasmaConductivityGF(); Array vdofs; Vector elem_dof_vals; @@ -255,16 +255,16 @@ void CycleAvgJouleCoupling::interpConductivityFromFlowToEM() { #endif } -void CycleAvgJouleCoupling::interpolationPoints(Vector &vxyz, int n_interp_nodes, const ParFiniteElementSpace *fes) { - const ParMesh *mesh = fes->GetParMesh(); +void CycleAvgJouleCoupling::interpolationPoints(Vector& vxyz, int n_interp_nodes, const ParFiniteElementSpace* fes) { + const ParMesh* mesh = fes->GetParMesh(); const int NE = mesh->GetNE(); const int dim = mesh->Dimension(); vxyz.SetSize(n_interp_nodes * dim); int n0 = 0; for (int i = 0; i < NE; i++) { - const FiniteElement *fe = fes->GetFE(i); + const FiniteElement* fe = fes->GetFE(i); const IntegrationRule ir = fe->GetNodes(); - ElementTransformation *et = fes->GetElementTransformation(i); + ElementTransformation* et = fes->GetElementTransformation(i); const int nsp = ir.GetNPoints(); @@ -292,7 +292,7 @@ void CycleAvgJouleCoupling::interpJouleHeatingFromEMToFlow() { if (verbose) grvy_printf(ginfo, "Interpolating Joule heating to flow mesh.\n"); #ifdef HAVE_GSLIB - const ParFiniteElementSpace *flow_fespace = flow_solver_->getFESpace(); + const ParFiniteElementSpace* flow_fespace = flow_solver_->getFESpace(); // Generate list of points where the grid function will be evaluated. Vector vxyz; @@ -301,12 +301,12 @@ void CycleAvgJouleCoupling::interpJouleHeatingFromEMToFlow() { // Evaluate source grid function. Vector interp_vals(n_flow_interp_nodes_); - const ParGridFunction *joule_heating_gf = qmsa_solver_->getJouleHeatingGF(); + const ParGridFunction* joule_heating_gf = qmsa_solver_->getJouleHeatingGF(); assert(joule_heating_gf != NULL); interp_em_to_flow_->Interpolate(vxyz, *joule_heating_gf, interp_vals); - ParGridFunction *joule_heating_flow = flow_solver_->getJouleHeatingGF(); + ParGridFunction* joule_heating_flow = flow_solver_->getJouleHeatingGF(); if (flow_fespace->IsDGSpace()) { joule_heating_flow->SetFromTrueDofs(interp_vals); } else { @@ -346,10 +346,10 @@ void CycleAvgJouleCoupling::interpElectricFieldFromEMToFlow() { // Evaluate source grid function. Vector interp_vals(n_flow_interp_nodes_ * efield_ncomp_); - const ParGridFunction *efield_real_gf = qmsa_solver_->getElectricFieldreal(); + const ParGridFunction* efield_real_gf = qmsa_solver_->getElectricFieldreal(); interp_em_to_flow_->Interpolate(vxyz, *efield_real_gf, interp_vals); - const ParFiniteElementSpace *flow_fespace = flow_solver_->getFESpace(); + const ParFiniteElementSpace* flow_fespace = flow_solver_->getFESpace(); if (flow_fespace->IsDGSpace()) { efieldR_->SetFromTrueDofs(interp_vals); } else { @@ -357,7 +357,7 @@ void CycleAvgJouleCoupling::interpElectricFieldFromEMToFlow() { } efieldR_->HostRead(); - const ParGridFunction *efield_imag_gf = qmsa_solver_->getElectricFieldimag(); + const ParGridFunction* efield_imag_gf = qmsa_solver_->getElectricFieldimag(); interp_em_to_flow_->Interpolate(vxyz, *efield_imag_gf, interp_vals); if (flow_fespace->IsDGSpace()) { efieldI_->SetFromTrueDofs(interp_vals); @@ -502,7 +502,7 @@ void CycleAvgJouleCoupling::solveStep() { const double upd_jh = qmsa_solver_->totalJouleHeating(); if (rank0_) { grvy_printf(GRVY_INFO, "current_iter = %d\n", current_iter_); - grvy_printf(GRVY_INFO, "Joule heating scaling ratio = %d\n", ratio); + grvy_printf(GRVY_INFO, "Joule heating scaling ratio = %.6e\n", ratio); grvy_printf(GRVY_INFO, "The total input Joule heating after scaling = %.6e\n", upd_jh); } } @@ -523,7 +523,7 @@ void CycleAvgJouleCoupling::solveEnd() { } /// Push solver variables to interface -void CycleAvgJouleCoupling::initInterface(TPS::Tps2Boltzmann &interface) { +void CycleAvgJouleCoupling::initInterface(TPS::Tps2Boltzmann& interface) { assert(!interface.IsInitialized()); interface.init(flow_solver_); qmsa_solver_->setStoreE(true); @@ -546,10 +546,10 @@ void CycleAvgJouleCoupling::initInterface(TPS::Tps2Boltzmann &interface) { } /// Push solver variables to interface -void CycleAvgJouleCoupling::push(TPS::Tps2Boltzmann &interface) { +void CycleAvgJouleCoupling::push(TPS::Tps2Boltzmann& interface) { flow_solver_->push(interface); interface.interpolateFromNativeFES(*efield_, TPS::Tps2Boltzmann::Index::ElectricField); } /// Fetch solver variables from interface -void CycleAvgJouleCoupling::fetch(TPS::Tps2Boltzmann &interface) { flow_solver_->fetch(interface); } +void CycleAvgJouleCoupling::fetch(TPS::Tps2Boltzmann& interface) { flow_solver_->fetch(interface); } diff --git a/src/cycle_avg_joule_coupling.hpp b/src/cycle_avg_joule_coupling.hpp index beea1a6c..0c611658 100644 --- a/src/cycle_avg_joule_coupling.hpp +++ b/src/cycle_avg_joule_coupling.hpp @@ -49,17 +49,17 @@ class Tps; class CycleAvgJouleCoupling : public TPS::Solver { private: ElectromagneticOptions em_opt_; - QuasiMagnetostaticSolverBase *qmsa_solver_; - TPS::PlasmaSolver *flow_solver_; + QuasiMagnetostaticSolverBase* qmsa_solver_; + TPS::PlasmaSolver* flow_solver_; // Only needed for Boltzmann interface int efield_ncomp_; - const mfem::FiniteElementCollection *efieldFEC_; - mfem::ParFiniteElementSpace *efieldFES_; - mfem::ParFiniteElementSpace *efieldFES1_; - mfem::ParGridFunction *efield_; - mfem::ParGridFunction *efieldR_; - mfem::ParGridFunction *efieldI_; + const mfem::FiniteElementCollection* efieldFEC_; + mfem::ParFiniteElementSpace* efieldFES_; + mfem::ParFiniteElementSpace* efieldFES1_; + mfem::ParGridFunction* efield_; + mfem::ParGridFunction* efieldR_; + mfem::ParGridFunction* efieldI_; //! Maximum number of iterations int max_iters_; @@ -73,8 +73,8 @@ class CycleAvgJouleCoupling : public TPS::Solver { bool fixed_conductivity_; #ifdef HAVE_GSLIB - FindPointsGSLIB *interp_flow_to_em_; - FindPointsGSLIB *interp_em_to_flow_; + FindPointsGSLIB* interp_flow_to_em_; + FindPointsGSLIB* interp_em_to_flow_; #endif int n_em_interp_nodes_; @@ -101,14 +101,14 @@ class CycleAvgJouleCoupling : public TPS::Solver { * input-power = target power of em field [double, default = -1.] * initial-input-power = the starting power of em field [double, default = -1.] */ - CycleAvgJouleCoupling(string &inputFileName, TPS::Tps *tps); + CycleAvgJouleCoupling(string& inputFileName, TPS::Tps* tps); [[deprecated("Use CycleAvgJouleCoupling(string &inputFileName, TPS::Tps *tps instead")]] CycleAvgJouleCoupling( - string &inputFileName, TPS::Tps *tps, int max_out, bool axisym, double input_power = -1., + string& inputFileName, TPS::Tps* tps, int max_out, bool axisym, double input_power = -1., double initial_input_power = -1.); ~CycleAvgJouleCoupling(); void initializeInterpolationData(); - void interpolationPoints(mfem::Vector &vxyz, int n_interp_nodes, const mfem::ParFiniteElementSpace *fes); + void interpolationPoints(mfem::Vector& vxyz, int n_interp_nodes, const mfem::ParFiniteElementSpace* fes); void interpConductivityFromFlowToEM(); void interpJouleHeatingFromEMToFlow(); void interpElectricFieldFromEMToFlow(); @@ -122,13 +122,13 @@ class CycleAvgJouleCoupling : public TPS::Solver { void solveEnd() override; /// Push solver variables to interface - void initInterface(TPS::Tps2Boltzmann &interface) override; + void initInterface(TPS::Tps2Boltzmann& interface) override; /// Push solver variables to interface - void push(TPS::Tps2Boltzmann &interface) override; + void push(TPS::Tps2Boltzmann& interface) override; /// Fetch solver variables from interface - void fetch(TPS::Tps2Boltzmann &interface) override; + void fetch(TPS::Tps2Boltzmann& interface) override; - TPS::PlasmaSolver *getFlowSolver() { return flow_solver_; } - QuasiMagnetostaticSolverBase *getEMSolver() { return qmsa_solver_; } + TPS::PlasmaSolver* getFlowSolver() { return flow_solver_; } + QuasiMagnetostaticSolverBase* getEMSolver() { return qmsa_solver_; } }; #endif // CYCLE_AVG_JOULE_COUPLING_HPP_ diff --git a/src/dataStructures.hpp b/src/dataStructures.hpp index a555c1fe..61990b31 100644 --- a/src/dataStructures.hpp +++ b/src/dataStructures.hpp @@ -512,8 +512,8 @@ struct dataTransferArrays { // MPI communicators data int num_face_nbrs; - MPI_Request *requests; - MPI_Status *statuses; + MPI_Request* requests; + MPI_Status* statuses; }; // structure to encapsulate passive scalar data @@ -582,7 +582,7 @@ struct BoundaryViscousFluxData { // NOTE(kevin): while auto-generated operator= works in the same way, // the function is still defined to be safe. - MFEM_HOST_DEVICE BoundaryViscousFluxData &operator=(const BoundaryViscousFluxData &rhs) { + MFEM_HOST_DEVICE BoundaryViscousFluxData& operator=(const BoundaryViscousFluxData& rhs) { for (int eq = 0; eq < gpudata::MAXEQUATIONS; eq++) { primFlux[eq] = rhs.primFlux[eq]; primFluxIdxs[eq] = rhs.primFluxIdxs[eq]; @@ -596,7 +596,7 @@ struct BoundaryPrimitiveData { double prim[gpudata::MAXEQUATIONS]; bool primIdxs[gpudata::MAXEQUATIONS]; - MFEM_HOST_DEVICE BoundaryPrimitiveData &operator=(const BoundaryPrimitiveData &rhs) { + MFEM_HOST_DEVICE BoundaryPrimitiveData& operator=(const BoundaryPrimitiveData& rhs) { for (int eq = 0; eq < gpudata::MAXEQUATIONS; eq++) { prim[eq] = rhs.prim[eq]; primIdxs[eq] = rhs.primIdxs[eq]; @@ -667,8 +667,8 @@ struct GasTransportInput { struct TableInput { int Ndata; - const double *xdata; - const double *fdata; + const double* xdata; + const double* fdata; bool xLogScale; bool fLogScale; @@ -681,7 +681,7 @@ struct TableInput { struct ReactionInput { TableInput tableInput; // NOTE(kevin): with gpu, this pointer is only valid on the device. - const double *modelParams; + const double* modelParams; int indexInput; }; diff --git a/src/dgNonlinearForm.cpp b/src/dgNonlinearForm.cpp index a291bcdd..4156c48e 100644 --- a/src/dgNonlinearForm.cpp +++ b/src/dgNonlinearForm.cpp @@ -35,11 +35,11 @@ #include "riemann_solver.hpp" -DGNonLinearForm::DGNonLinearForm(RiemannSolverTPS *rsolver, Fluxes *_flux, ParFiniteElementSpace *_vfes, - ParFiniteElementSpace *_gradFes, ParGridFunction *_gradUp, BCintegrator *_bcIntegrator, - IntegrationRules *_intRules, const int _dim, const int _num_equation, - GasMixture *_mixture, const precomputedIntegrationData &gpu_precomputed_data, - const int &_maxIntPoints, const int &_maxDofs) +DGNonLinearForm::DGNonLinearForm(RiemannSolverTPS* rsolver, Fluxes* _flux, ParFiniteElementSpace* _vfes, + ParFiniteElementSpace* _gradFes, ParGridFunction* _gradUp, BCintegrator* _bcIntegrator, + IntegrationRules* _intRules, const int _dim, const int _num_equation, + GasMixture* _mixture, const precomputedIntegrationData& gpu_precomputed_data, + const int& _maxIntPoints, const int& _maxDofs) : ParNonlinearForm(_vfes), rsolver_(rsolver), fluxes(_flux), @@ -74,7 +74,7 @@ DGNonLinearForm::DGNonLinearForm(RiemannSolverTPS *rsolver, Fluxes *_flux, ParFi face_flux_ = 0.; } -void DGNonLinearForm::setParallelData(dataTransferArrays *_transferU, dataTransferArrays *_transferGradUp) { +void DGNonLinearForm::setParallelData(dataTransferArrays* _transferU, dataTransferArrays* _transferGradUp) { transferU = _transferU; transferGradUp = _transferGradUp; @@ -87,8 +87,8 @@ void DGNonLinearForm::setParallelData(dataTransferArrays *_transferU, dataTransf } #ifdef _GPU_ -void DGNonLinearForm::Mult_domain(const Vector &x, Vector &y) { - const elementIndexingData &elem_data = gpu_precomputed_data_.element_indexing_data; +void DGNonLinearForm::Mult_domain(const Vector& x, Vector& y) { + const elementIndexingData& elem_data = gpu_precomputed_data_.element_indexing_data; auto h_num_elems_of_type = elem_data.num_elems_of_type.HostRead(); auto h_elem_dof_num = elem_data.dof_number.HostRead(); @@ -119,8 +119,8 @@ void DGNonLinearForm::Mult_domain(const Vector &x, Vector &y) { if (bfnfi.Size()) bcIntegrator->integrateBCs(y, x, elem_data); } -void DGNonLinearForm::Mult_bdr(const Vector &x, Vector &y) { - ParMesh *pmesh = vfes->GetParMesh(); +void DGNonLinearForm::Mult_bdr(const Vector& x, Vector& y) { + ParMesh* pmesh = vfes->GetParMesh(); const int Nshared = pmesh->GetNSharedFaces(); if (Nshared > 0) { sharedFaceInterpolation_gpu(x); @@ -128,23 +128,23 @@ void DGNonLinearForm::Mult_bdr(const Vector &x, Vector &y) { } } -void DGNonLinearForm::setToZero_gpu(Vector &x, const int size) { - double *d_x = x.Write(); +void DGNonLinearForm::setToZero_gpu(Vector& x, const int size) { + double* d_x = x.Write(); MFEM_FORALL(i, size, { d_x[i] = 0.; }); } -void DGNonLinearForm::faceIntegration_gpu(Vector &y, int elType, int elemOffset, int elDof) { - double *d_y = y.ReadWrite(); - const double *d_f = face_flux_.Read(); +void DGNonLinearForm::faceIntegration_gpu(Vector& y, int elType, int elemOffset, int elDof) { + double* d_y = y.ReadWrite(); + const double* d_f = face_flux_.Read(); - const elementIndexingData &elem_data = gpu_precomputed_data_.element_indexing_data; + const elementIndexingData& elem_data = gpu_precomputed_data_.element_indexing_data; auto h_num_elems_of_type = elem_data.num_elems_of_type.HostRead(); auto d_elem_dofs_list = elem_data.dofs_list.Read(); auto d_elem_dof_off = elem_data.dof_offset.Read(); - const interiorFaceIntegrationData &face_data = gpu_precomputed_data_.interior_face_data; + const interiorFaceIntegrationData& face_data = gpu_precomputed_data_.interior_face_data; auto d_element_to_faces = face_data.element_to_faces.Read(); auto d_shape1 = face_data.el1_shape.Read(); auto d_weight = face_data.quad_weight.Read(); @@ -231,13 +231,13 @@ void DGNonLinearForm::faceIntegration_gpu(Vector &y, int elType, int elemOffset, } void DGNonLinearForm::evalFaceFlux_gpu() { - double *d_f = face_flux_.Write(); - const double *d_uk_el1 = uk_el1.Read(); - const double *d_uk_el2 = uk_el2.Read(); - const double *d_grad_uk_el1 = grad_upk_el1.Read(); - const double *d_grad_uk_el2 = grad_upk_el2.Read(); + double* d_f = face_flux_.Write(); + const double* d_uk_el1 = uk_el1.Read(); + const double* d_uk_el2 = uk_el2.Read(); + const double* d_grad_uk_el1 = grad_upk_el1.Read(); + const double* d_grad_uk_el2 = grad_upk_el2.Read(); - const interiorFaceIntegrationData &face_data = gpu_precomputed_data_.interior_face_data; + const interiorFaceIntegrationData& face_data = gpu_precomputed_data_.interior_face_data; auto d_normal = face_data.normal.Read(); auto d_face_nqp = face_data.num_quad.Read(); @@ -247,15 +247,15 @@ void DGNonLinearForm::evalFaceFlux_gpu() { auto d_dist1 = face_data.dist1.Read(); auto d_dist2 = face_data.dist2.Read(); - Mesh *mesh = fes->GetMesh(); + Mesh* mesh = fes->GetMesh(); const int Nf = mesh->GetNumFaces(); const int dim = dim_; const int num_equation = num_equation_; const int maxIntPoints = maxIntPoints_; - const RiemannSolverTPS *d_rsolver = rsolver_; - Fluxes *d_flux = fluxes; + const RiemannSolverTPS* d_rsolver = rsolver_; + Fluxes* d_flux = fluxes; // clang-format off MFEM_FORALL(iface, Nf, @@ -346,26 +346,26 @@ void DGNonLinearForm::evalFaceFlux_gpu() { // clang-format on } -void DGNonLinearForm::interpFaceData_gpu(const Vector &x, int elType, int elemOffset, int elDof) { - const elementIndexingData &elem_data = gpu_precomputed_data_.element_indexing_data; - const interiorFaceIntegrationData &face_data = gpu_precomputed_data_.interior_face_data; +void DGNonLinearForm::interpFaceData_gpu(const Vector& x, int elType, int elemOffset, int elDof) { + const elementIndexingData& elem_data = gpu_precomputed_data_.element_indexing_data; + const interiorFaceIntegrationData& face_data = gpu_precomputed_data_.interior_face_data; auto h_num_elems_of_type = elem_data.num_elems_of_type.HostRead(); auto d_x = x.Read(); - double *d_uk_el1 = uk_el1.Write(); - double *d_uk_el2 = uk_el2.Write(); - double *d_grad_uk_el1 = grad_upk_el1.Write(); - double *d_grad_uk_el2 = grad_upk_el2.Write(); + double* d_uk_el1 = uk_el1.Write(); + double* d_uk_el2 = uk_el2.Write(); + double* d_grad_uk_el1 = grad_upk_el1.Write(); + double* d_grad_uk_el2 = grad_upk_el2.Write(); - const ParGridFunction *gradUp = gradUp_; + const ParGridFunction* gradUp = gradUp_; - const double *d_gradUp = gradUp->Read(); + const double* d_gradUp = gradUp->Read(); auto d_element_to_faces = face_data.element_to_faces.Read(); auto d_elem_dofs_list = elem_data.dofs_list.Read(); auto d_elem_dof_off = elem_data.dof_offset.Read(); auto d_shape1 = face_data.el1_shape.Read(); - const double *d_shape2 = face_data.el2_shape.Read(); + const double* d_shape2 = face_data.el2_shape.Read(); auto d_face_el1 = face_data.el1.Read(); auto d_face_nqp = face_data.num_quad.Read(); @@ -376,7 +376,7 @@ void DGNonLinearForm::interpFaceData_gpu(const Vector &x, int elType, int elemOf const int maxIntPoints = maxIntPoints_; const int maxDofs = maxDofs_; - Fluxes *d_fluxes = fluxes; + Fluxes* d_fluxes = fluxes; // clang-format off MFEM_FORALL_2D(el, NumElemsType, maxIntPoints, 1, 1, @@ -571,27 +571,27 @@ void DGNonLinearForm::sharedFaceIntegration_gpu(Vector &y) { } // clang-format on -void DGNonLinearForm::sharedFaceInterpolation_gpu(const Vector &x) { - const double *d_x = x.Read(); - const double *d_gradUp = gradUp_->Read(); - const double *d_faceGradUp = transferGradUp->face_nbr_data.Read(); - const double *d_faceData = transferU->face_nbr_data.Read(); +void DGNonLinearForm::sharedFaceInterpolation_gpu(const Vector& x) { + const double* d_x = x.Read(); + const double* d_gradUp = gradUp_->Read(); + const double* d_faceGradUp = transferGradUp->face_nbr_data.Read(); + const double* d_faceData = transferU->face_nbr_data.Read(); - const elementIndexingData &elem_data = gpu_precomputed_data_.element_indexing_data; + const elementIndexingData& elem_data = gpu_precomputed_data_.element_indexing_data; auto d_elem_dofs_list = elem_data.dofs_list.Read(); auto d_elem_dof_off = elem_data.dof_offset.Read(); auto d_elem_dof_num = elem_data.dof_number.Read(); - const sharedFaceIntegrationData &shared_face_data = gpu_precomputed_data_.shared_face_data; - const double *d_normal = shared_face_data.normal.Read(); - const double *d_xyz = shared_face_data.xyz.Read(); - const double *d_shape1 = shared_face_data.el1_shape.Read(); - const double *d_shape2 = shared_face_data.el2_shape.Read(); - const int *d_face_num_quad = shared_face_data.num_quad.Read(); - const int *d_face_num_dof2 = shared_face_data.num_dof2.Read(); - const int *d_elem2_dofs = shared_face_data.elem2_dofs.Read(); - const int *d_elem2_grad_dofs = shared_face_data.elem2_grad_dofs.Read(); - const int *d_shared_elements_to_shared_faces = shared_face_data.shared_elements_to_shared_faces.Read(); + const sharedFaceIntegrationData& shared_face_data = gpu_precomputed_data_.shared_face_data; + const double* d_normal = shared_face_data.normal.Read(); + const double* d_xyz = shared_face_data.xyz.Read(); + const double* d_shape1 = shared_face_data.el1_shape.Read(); + const double* d_shape2 = shared_face_data.el2_shape.Read(); + const int* d_face_num_quad = shared_face_data.num_quad.Read(); + const int* d_face_num_dof2 = shared_face_data.num_dof2.Read(); + const int* d_elem2_dofs = shared_face_data.elem2_dofs.Read(); + const int* d_elem2_grad_dofs = shared_face_data.elem2_grad_dofs.Read(); + const int* d_shared_elements_to_shared_faces = shared_face_data.shared_elements_to_shared_faces.Read(); auto d_delta_el1 = shared_face_data.delta_el1.Read(); auto d_delta_el2 = shared_face_data.delta_el2.Read(); @@ -605,10 +605,10 @@ void DGNonLinearForm::sharedFaceInterpolation_gpu(const Vector &x) { const int maxIntPoints = maxIntPoints_; const int maxDofs = maxDofs_; - double *d_shared_flux = shared_flux.Write(); + double* d_shared_flux = shared_flux.Write(); - const RiemannSolverTPS *d_rsolver = rsolver_; - Fluxes *d_flux = fluxes; + const RiemannSolverTPS* d_rsolver = rsolver_; + Fluxes* d_flux = fluxes; MFEM_FORALL_2D(el, maxNumElems, maxIntPoints, 1, 1, { double l1[gpudata::MAXDOFS], l2[gpudata::MAXDOFS]; // double l1[216], l2[216]; diff --git a/src/dgNonlinearForm.hpp b/src/dgNonlinearForm.hpp index 6c7c8cc3..90b39bd8 100644 --- a/src/dgNonlinearForm.hpp +++ b/src/dgNonlinearForm.hpp @@ -48,27 +48,27 @@ using namespace std; // so that we can use GPU class DGNonLinearForm : public ParNonlinearForm { private: - RiemannSolverTPS *rsolver_; - Fluxes *fluxes; - ParFiniteElementSpace *vfes; - ParFiniteElementSpace *gradFes; + RiemannSolverTPS* rsolver_; + Fluxes* fluxes; + ParFiniteElementSpace* vfes; + ParFiniteElementSpace* gradFes; - ParGridFunction *gradUp_; + ParGridFunction* gradUp_; - BCintegrator *bcIntegrator; + BCintegrator* bcIntegrator; - IntegrationRules *intRules; + IntegrationRules* intRules; const int dim_; const int num_equation_; - GasMixture *mixture; + GasMixture* mixture; - const precomputedIntegrationData &gpu_precomputed_data_; + const precomputedIntegrationData& gpu_precomputed_data_; - mutable dataTransferArrays *transferU; - mutable dataTransferArrays *transferGradUp; + mutable dataTransferArrays* transferU; + mutable dataTransferArrays* transferGradUp; - const int &maxIntPoints_; - const int &maxDofs_; + const int& maxIntPoints_; + const int& maxDofs_; Vector uk_el1, grad_upk_el1; Vector uk_el2, grad_upk_el2; @@ -77,26 +77,26 @@ class DGNonLinearForm : public ParNonlinearForm { Vector shared_flux; public: - DGNonLinearForm(RiemannSolverTPS *rsolver, Fluxes *_flux, ParFiniteElementSpace *f, ParFiniteElementSpace *gradFes, - ParGridFunction *_gradUp, BCintegrator *_bcIntegrator, IntegrationRules *intRules, const int dim, - const int num_equation, GasMixture *mixture, const precomputedIntegrationData &gpu_precomputed_data, - const int &maxIntPoints, const int &maxDofs); + DGNonLinearForm(RiemannSolverTPS* rsolver, Fluxes* _flux, ParFiniteElementSpace* f, ParFiniteElementSpace* gradFes, + ParGridFunction* _gradUp, BCintegrator* _bcIntegrator, IntegrationRules* intRules, const int dim, + const int num_equation, GasMixture* mixture, const precomputedIntegrationData& gpu_precomputed_data, + const int& maxIntPoints, const int& maxDofs); - void setParallelData(dataTransferArrays *_transferU, dataTransferArrays *_transferGradUp); + void setParallelData(dataTransferArrays* _transferU, dataTransferArrays* _transferGradUp); - void faceIntegration_gpu(Vector &y, int elType, int elemOffset, int elDof); + void faceIntegration_gpu(Vector& y, int elType, int elemOffset, int elDof); - void sharedFaceIntegration_gpu(Vector &y); + void sharedFaceIntegration_gpu(Vector& y); - void interpFaceData_gpu(const Vector &x, int elType, int elemOffset, int elDof); + void interpFaceData_gpu(const Vector& x, int elType, int elemOffset, int elDof); - void sharedFaceInterpolation_gpu(const Vector &x); + void sharedFaceInterpolation_gpu(const Vector& x); void evalFaceFlux_gpu(); #ifdef _GPU_ - void Mult_domain(const Vector &x, Vector &y); - void Mult_bdr(const Vector &x, Vector &y); - static void setToZero_gpu(Vector &x, const int size); + void Mult_domain(const Vector& x, Vector& y); + void Mult_bdr(const Vector& x, Vector& y); + static void setToZero_gpu(Vector& x, const int size); #endif }; diff --git a/src/dirichlet_bc_helper.hpp b/src/dirichlet_bc_helper.hpp index fe41078b..c3b68333 100644 --- a/src/dirichlet_bc_helper.hpp +++ b/src/dirichlet_bc_helper.hpp @@ -39,10 +39,10 @@ template class DirichletBC_T { public: - DirichletBC_T(mfem::Array attr, Tcoeff *coeff) : attr(attr), coeff(coeff) {} + DirichletBC_T(mfem::Array attr, Tcoeff* coeff) : attr(attr), coeff(coeff) {} // Move constructor (required for emplace_back) - DirichletBC_T(DirichletBC_T &&obj) { + DirichletBC_T(DirichletBC_T&& obj) { // Deep copy the attribute array this->attr = obj.attr; @@ -54,6 +54,6 @@ class DirichletBC_T { ~DirichletBC_T() { delete coeff; } mfem::Array attr; - Tcoeff *coeff; + Tcoeff* coeff; }; #endif // DIRICHLET_BC_HELPER_HPP_ diff --git a/src/domain_integrator.cpp b/src/domain_integrator.cpp index 050933c8..c713b96f 100644 --- a/src/domain_integrator.cpp +++ b/src/domain_integrator.cpp @@ -33,7 +33,7 @@ #include "domain_integrator.hpp" // Implementation of class DomainIntegrator -DomainIntegrator::DomainIntegrator(Fluxes *_fluxClass, IntegrationRules *_intRules, int _intRuleType, const int _dim, +DomainIntegrator::DomainIntegrator(Fluxes* _fluxClass, IntegrationRules* _intRules, int _intRuleType, const int _dim, const int _num_equation, bool axisym) : fluxClass(_fluxClass), dim(_dim), @@ -42,8 +42,8 @@ DomainIntegrator::DomainIntegrator(Fluxes *_fluxClass, IntegrationRules *_intRul intRuleType(_intRuleType), axisymmetric_(axisym) {} -void DomainIntegrator::AssembleElementMatrix2(const FiniteElement &trial_fe, const FiniteElement &test_fe, - ElementTransformation &Tr, DenseMatrix &elmat) { +void DomainIntegrator::AssembleElementMatrix2(const FiniteElement& trial_fe, const FiniteElement& test_fe, + ElementTransformation& Tr, DenseMatrix& elmat) { // Assemble the form (vec(v), grad(w)) Vector shape; shape.UseDevice(false); @@ -67,9 +67,9 @@ void DomainIntegrator::AssembleElementMatrix2(const FiniteElement &trial_fe, con const int maxorder = max(trial_fe.GetOrder(), test_fe.GetOrder()); int intorder = 2 * maxorder; - const IntegrationRule *ir = &intRules->Get(trial_fe.GetGeomType(), intorder); + const IntegrationRule* ir = &intRules->Get(trial_fe.GetGeomType(), intorder); for (int i = 0; i < ir->GetNPoints(); i++) { - const IntegrationPoint &ip = ir->IntPoint(i); + const IntegrationPoint& ip = ir->IntPoint(i); // Calculate the shape functions trial_fe.CalcShape(ip, shape); diff --git a/src/domain_integrator.hpp b/src/domain_integrator.hpp index e777233b..01a65910 100644 --- a/src/domain_integrator.hpp +++ b/src/domain_integrator.hpp @@ -50,20 +50,20 @@ using namespace std; // dim) and test space = scalar L2 space. class DomainIntegrator : public BilinearFormIntegrator { private: - Fluxes *fluxClass; + Fluxes* fluxClass; const int dim; const int num_equation; - IntegrationRules *intRules; + IntegrationRules* intRules; const int intRuleType; const bool axisymmetric_; public: - DomainIntegrator(Fluxes *_fluxClass, IntegrationRules *_intRules, int _intRuleType, const int _dim, + DomainIntegrator(Fluxes* _fluxClass, IntegrationRules* _intRules, int _intRuleType, const int _dim, const int _num_equation, bool axisym); - virtual void AssembleElementMatrix2(const FiniteElement &trial_fe, const FiniteElement &test_fe, - ElementTransformation &Tr, DenseMatrix &elmat); + virtual void AssembleElementMatrix2(const FiniteElement& trial_fe, const FiniteElement& test_fe, + ElementTransformation& Tr, DenseMatrix& elmat); }; #endif // DOMAIN_INTEGRATOR_HPP_ diff --git a/src/em_options.hpp b/src/em_options.hpp index d192c88f..a379c48b 100644 --- a/src/em_options.hpp +++ b/src/em_options.hpp @@ -95,7 +95,7 @@ class ElectromagneticOptions { variable_current = false; } - void print(std::ostream &out) { + void print(std::ostream& out) { out << std::endl; out << "Electromagnetics options:" << std::endl; out << " mesh_file = " << mesh_file << std::endl; diff --git a/src/equation_of_state.cpp b/src/equation_of_state.cpp index fe432d67..22f944ba 100644 --- a/src/equation_of_state.cpp +++ b/src/equation_of_state.cpp @@ -34,7 +34,7 @@ // EquationOfState::EquationOfState() {} -GasMixture::GasMixture(RunConfiguration &_runfile, int _dim, int nvel) +GasMixture::GasMixture(RunConfiguration& _runfile, int _dim, int nvel) : GasMixture(_runfile.workFluid, _dim, nvel, _runfile.const_plasma_conductivity_) {} MFEM_HOST_DEVICE GasMixture::GasMixture(WorkingFluid f, int _dim, int nvel, double pc) { @@ -44,13 +44,13 @@ MFEM_HOST_DEVICE GasMixture::GasMixture(WorkingFluid f, int _dim, int nvel, doub const_plasma_conductivity_ = pc; } -void GasMixture::SetConstantPlasmaConductivity(ParGridFunction *pc, const ParGridFunction *Up, - const ParGridFunction *coords) { +void GasMixture::SetConstantPlasmaConductivity(ParGridFunction* pc, const ParGridFunction* Up, + const ParGridFunction* coords) { // quick return if pc is NULL (nothing to set) if (pc == NULL) return; // otherwise, set plasma conductivity - double *plasma_conductivity_gf = pc->HostWrite(); + double* plasma_conductivity_gf = pc->HostWrite(); // To a constant const int nnode = pc->FESpace()->GetNDofs(); @@ -79,9 +79,9 @@ void GasMixture::SetConstantPlasmaConductivity(ParGridFunction *pc, const ParGri // } } -void GasMixture::UpdatePressureGridFunction(ParGridFunction *press, const ParGridFunction *Up) { - double *pGridFunc = press->HostWrite(); - const double *UpData = Up->HostRead(); +void GasMixture::UpdatePressureGridFunction(ParGridFunction* press, const ParGridFunction* Up) { + double* pGridFunc = press->HostWrite(); + const double* UpData = Up->HostRead(); const int nnode = press->FESpace()->GetNDofs(); @@ -97,7 +97,7 @@ void GasMixture::UpdatePressureGridFunction(ParGridFunction *press, const ParGri // total energy of stagnation state is essentially the same as // the total energy of input state subtracted by its bulk kinetic energy. // Do not necessarily need mixture-specific routines. -void GasMixture::computeStagnationState(const mfem::Vector &stateIn, mfem::Vector &stagnationState) { +void GasMixture::computeStagnationState(const mfem::Vector& stateIn, mfem::Vector& stagnationState) { stagnationState.SetSize(num_equation); stagnationState = stateIn; @@ -114,8 +114,8 @@ void GasMixture::computeStagnationState(const mfem::Vector &stateIn, mfem::Vecto // NOTE: electron energy is purely internal energy, so no change. } -void GasMixture::modifyStateFromPrimitive(const Vector &state, const BoundaryPrimitiveData &bcState, - Vector &outputState) { +void GasMixture::modifyStateFromPrimitive(const Vector& state, const BoundaryPrimitiveData& bcState, + Vector& outputState) { outputState.SetSize(num_equation); // assert(bcState.prim.Size() == num_equation); @@ -128,8 +128,8 @@ void GasMixture::modifyStateFromPrimitive(const Vector &state, const BoundaryPri GetConservativesFromPrimitives(prim, outputState); } -MFEM_HOST_DEVICE void GasMixture::modifyStateFromPrimitive(const double *state, const BoundaryPrimitiveData &bcState, - double *outputState) { +MFEM_HOST_DEVICE void GasMixture::modifyStateFromPrimitive(const double* state, const BoundaryPrimitiveData& bcState, + double* outputState) { double prim[gpudata::MAXEQUATIONS]; GetPrimitivesFromConservatives(state, prim); for (int i = 0; i < num_equation; i++) { @@ -143,7 +143,7 @@ MFEM_HOST_DEVICE void GasMixture::modifyStateFromPrimitive(const double *state, //////// Dry Air mixture ////////////////////////////////////////////////////// -DryAir::DryAir(RunConfiguration &_runfile, int _dim, int nvel) +DryAir::DryAir(RunConfiguration& _runfile, int _dim, int nvel) // : DryAir(_runfile.workFluid, _runfile.GetEquationSystem(), _runfile.visc_mult, _runfile.bulk_visc, _dim, nvel) {} : DryAir(_runfile.dryAirInput, _dim, nvel) {} @@ -217,19 +217,19 @@ void DryAir::setNumEquations() { // } // } -void DryAir::computeSpeciesEnthalpies(const Vector &state, Vector &speciesEnthalpies) { +void DryAir::computeSpeciesEnthalpies(const Vector& state, Vector& speciesEnthalpies) { speciesEnthalpies.SetSize(numSpecies); speciesEnthalpies = 0.0; return; } -MFEM_HOST_DEVICE void DryAir::computeSpeciesEnthalpies(const double *state, double *speciesEnthalpies) { +MFEM_HOST_DEVICE void DryAir::computeSpeciesEnthalpies(const double* state, double* speciesEnthalpies) { for (int sp = 0; sp < numSpecies; sp++) speciesEnthalpies[sp] = 0.0; return; } -bool DryAir::StateIsPhysical(const mfem::Vector &state) { +bool DryAir::StateIsPhysical(const mfem::Vector& state) { const double den = state(0); const Vector den_vel(state.GetData() + 1, nvel_); const double den_energy = state(iTh); @@ -273,9 +273,9 @@ bool DryAir::StateIsPhysical(const mfem::Vector &state) { // TODO(kevin): We need to move this routine to upper level, i.e. M2ulPhys. // Diffusion velocity contributes to the characteristic speed, which mixture cannot handle or know. // Compute the maximum characteristic speed. -double DryAir::ComputeMaxCharSpeed(const Vector &state) { return ComputeMaxCharSpeed(state.GetData()); } +double DryAir::ComputeMaxCharSpeed(const Vector& state) { return ComputeMaxCharSpeed(state.GetData()); } -MFEM_HOST_DEVICE double DryAir::ComputeMaxCharSpeed(const double *state) { +MFEM_HOST_DEVICE double DryAir::ComputeMaxCharSpeed(const double* state) { const double den = state[0]; double den_vel2 = 0; @@ -291,11 +291,11 @@ MFEM_HOST_DEVICE double DryAir::ComputeMaxCharSpeed(const double *state) { return vel + sound; } -void DryAir::GetConservativesFromPrimitives(const Vector &primit, Vector &conserv) { +void DryAir::GetConservativesFromPrimitives(const Vector& primit, Vector& conserv) { GetConservativesFromPrimitives(primit.GetData(), conserv.GetData()); } -MFEM_HOST_DEVICE void DryAir::GetConservativesFromPrimitives(const double *primit, double *conserv) { +MFEM_HOST_DEVICE void DryAir::GetConservativesFromPrimitives(const double* primit, double* conserv) { for (int eq = 0; eq < num_equation; eq++) conserv[eq] = primit[eq]; double v2 = 0.; @@ -314,11 +314,11 @@ MFEM_HOST_DEVICE void DryAir::GetConservativesFromPrimitives(const double *primi } } -void DryAir::GetPrimitivesFromConservatives(const Vector &conserv, Vector &primit) { +void DryAir::GetPrimitivesFromConservatives(const Vector& conserv, Vector& primit) { GetPrimitivesFromConservatives(conserv.GetData(), primit.GetData()); } -MFEM_HOST_DEVICE void DryAir::GetPrimitivesFromConservatives(const double *conserv, double *primit) { +MFEM_HOST_DEVICE void DryAir::GetPrimitivesFromConservatives(const double* conserv, double* primit) { double T = ComputeTemperature(conserv); for (int eq = 0; eq < num_equation; eq++) primit[eq] = conserv[eq]; @@ -334,7 +334,7 @@ MFEM_HOST_DEVICE void DryAir::GetPrimitivesFromConservatives(const double *conse } } -double DryAir::ComputeSpeedOfSound(const mfem::Vector &Uin, bool primitive) { +double DryAir::ComputeSpeedOfSound(const mfem::Vector& Uin, bool primitive) { double T; if (primitive) { @@ -347,7 +347,7 @@ double DryAir::ComputeSpeedOfSound(const mfem::Vector &Uin, bool primitive) { return sqrt(specific_heat_ratio * gas_constant * T); } -double DryAir::ComputePressureDerivative(const Vector &dUp_dx, const Vector &Uin, bool primitive) { +double DryAir::ComputePressureDerivative(const Vector& dUp_dx, const Vector& Uin, bool primitive) { double T; if (primitive) { T = Uin[iTh]; @@ -358,13 +358,13 @@ double DryAir::ComputePressureDerivative(const Vector &dUp_dx, const Vector &Uin return gas_constant * (T * dUp_dx[0] + Uin[0] * dUp_dx[iTh]); } -double DryAir::ComputePressureFromPrimitives(const mfem::Vector &Up) { return gas_constant * Up[0] * Up[iTh]; } +double DryAir::ComputePressureFromPrimitives(const mfem::Vector& Up) { return gas_constant * Up[0] * Up[iTh]; } -MFEM_HOST_DEVICE double DryAir::ComputePressureFromPrimitives(const double *Up) { +MFEM_HOST_DEVICE double DryAir::ComputePressureFromPrimitives(const double* Up) { return gas_constant * Up[0] * Up[iTh]; } -void DryAir::computeStagnationState(const mfem::Vector &stateIn, mfem::Vector &stagnationState) { +void DryAir::computeStagnationState(const mfem::Vector& stateIn, mfem::Vector& stagnationState) { const double p = ComputePressure(stateIn); stagnationState.SetSize(num_equation); @@ -377,7 +377,7 @@ void DryAir::computeStagnationState(const mfem::Vector &stateIn, mfem::Vector &s stagnationState(iTh) = p / (specific_heat_ratio - 1.); } -void DryAir::computeStagnantStateWithTemp(const mfem::Vector &stateIn, const double Temp, mfem::Vector &stateOut) { +void DryAir::computeStagnantStateWithTemp(const mfem::Vector& stateIn, const double Temp, mfem::Vector& stateOut) { stateOut.SetSize(num_equation); stateOut = stateIn; @@ -387,7 +387,7 @@ void DryAir::computeStagnantStateWithTemp(const mfem::Vector &stateIn, const dou } // NOTE: modifyElectronEnergy will not be used for DryAir. -void DryAir::modifyEnergyForPressure(const mfem::Vector &stateIn, mfem::Vector &stateOut, const double &p, +void DryAir::modifyEnergyForPressure(const mfem::Vector& stateIn, mfem::Vector& stateOut, const double& p, bool modifyElectronEnergy) { stateOut.SetSize(num_equation); stateOut = stateIn; @@ -399,7 +399,7 @@ void DryAir::modifyEnergyForPressure(const mfem::Vector &stateIn, mfem::Vector & stateOut(iTh) = p / (specific_heat_ratio - 1.) + ke; } -MFEM_HOST_DEVICE void DryAir::modifyEnergyForPressure(const double *stateIn, double *stateOut, const double &p, +MFEM_HOST_DEVICE void DryAir::modifyEnergyForPressure(const double* stateIn, double* stateOut, const double& p, bool modifyElectronEnergy) { for (int eq = 0; eq < num_equation; eq++) stateOut[eq] = stateIn[eq]; @@ -411,8 +411,8 @@ MFEM_HOST_DEVICE void DryAir::modifyEnergyForPressure(const double *stateIn, dou } // TODO(kevin): check if this works for axisymmetric case. -void DryAir::computeConservedStateFromConvectiveFlux(const Vector &meanNormalFluxes, const Vector &normal, - Vector &conservedState) { +void DryAir::computeConservedStateFromConvectiveFlux(const Vector& meanNormalFluxes, const Vector& normal, + Vector& conservedState) { const double gamma = specific_heat_ratio; double temp = 0.; @@ -472,7 +472,7 @@ double EquationOfState::pressure( double *state, ////// Perfect Mixture GasMixture //////////////////// ////////////////////////////////////////////////////////////////////////// -PerfectMixture::PerfectMixture(RunConfiguration &_runfile, int _dim, int nvel) +PerfectMixture::PerfectMixture(RunConfiguration& _runfile, int _dim, int nvel) : PerfectMixture(_runfile.perfectMixtureInput, _dim, nvel, _runfile.const_plasma_conductivity_) {} MFEM_HOST_DEVICE PerfectMixture::PerfectMixture(PerfectMixtureInput inputs, int _dim, int nvel, double pc) @@ -573,7 +573,7 @@ MFEM_HOST_DEVICE PerfectMixture::PerfectMixture(PerfectMixtureInput inputs, int } // compute heavy-species heat capacity from number densities. -MFEM_HOST_DEVICE double PerfectMixture::computeHeaviesHeatCapacity(const double *n_sp, const double &nB) const { +MFEM_HOST_DEVICE double PerfectMixture::computeHeaviesHeatCapacity(const double* n_sp, const double& nB) const { double heatCapacity = 0.0; for (int sp = 0; sp < numActiveSpecies; sp++) { if (sp == iElectron) continue; // neglect electron. @@ -583,7 +583,7 @@ MFEM_HOST_DEVICE double PerfectMixture::computeHeaviesHeatCapacity(const double return heatCapacity; } -MFEM_HOST_DEVICE double PerfectMixture::computeHeaviesCp(const double *n_sp, const double &nB) const { +MFEM_HOST_DEVICE double PerfectMixture::computeHeaviesCp(const double* n_sp, const double& nB) const { double heatCapacity = 0.0; for (int sp = 0; sp < numActiveSpecies; sp++) { if (sp == iElectron) continue; // neglect electron. @@ -594,7 +594,7 @@ MFEM_HOST_DEVICE double PerfectMixture::computeHeaviesCp(const double *n_sp, con return heatCapacity; } -MFEM_HOST_DEVICE double PerfectMixture::computeSpeciesCp(const double *n_sp, const double &nB, int sp) { +MFEM_HOST_DEVICE double PerfectMixture::computeSpeciesCp(const double* n_sp, const double& nB, int sp) { double heatCapacity; if (sp == iBackground) { heatCapacity = nB * molarCP_[iBackground]; @@ -604,7 +604,7 @@ MFEM_HOST_DEVICE double PerfectMixture::computeSpeciesCp(const double *n_sp, con return heatCapacity; } -MFEM_HOST_DEVICE double PerfectMixture::computeAmbipolarElectronNumberDensity(const double *n_sp) const { +MFEM_HOST_DEVICE double PerfectMixture::computeAmbipolarElectronNumberDensity(const double* n_sp) const { double n_e = 0.0; for (int sp = 0; sp < numActiveSpecies; sp++) { @@ -617,7 +617,7 @@ MFEM_HOST_DEVICE double PerfectMixture::computeAmbipolarElectronNumberDensity(co return n_e; } -MFEM_HOST_DEVICE double PerfectMixture::computeBackgroundMassDensity(const double &rho, const double *n_sp, double &n_e, +MFEM_HOST_DEVICE double PerfectMixture::computeBackgroundMassDensity(const double& rho, const double* n_sp, double& n_e, bool isElectronComputed) const { if ((!isElectronComputed) && (ambipolar)) { n_e = computeAmbipolarElectronNumberDensity(n_sp); @@ -653,7 +653,7 @@ MFEM_HOST_DEVICE double PerfectMixture::computeBackgroundMassDensity(const doubl // Right now, it's alwasy the same as conserved variables, to minimize gradient computation. // Additional primitive variables (such as temperature currently) needs to be evaluated every time it is needed. // Gradient computation can still keep the same number, while expanding the primitive variables. -void PerfectMixture::GetPrimitivesFromConservatives(const Vector &conserv, Vector &primit) { +void PerfectMixture::GetPrimitivesFromConservatives(const Vector& conserv, Vector& primit) { // Vector n_sp; // computeNumberDensities(conserv, n_sp); // @@ -676,7 +676,7 @@ void PerfectMixture::GetPrimitivesFromConservatives(const Vector &conserv, Vecto GetPrimitivesFromConservatives(&conserv[0], &primit[0]); } -MFEM_HOST_DEVICE void PerfectMixture::GetPrimitivesFromConservatives(const double *conserv, double *primit) { +MFEM_HOST_DEVICE void PerfectMixture::GetPrimitivesFromConservatives(const double* conserv, double* primit) { double n_sp[gpudata::MAXSPECIES]; computeNumberDensities(conserv, n_sp); @@ -699,7 +699,7 @@ MFEM_HOST_DEVICE void PerfectMixture::GetPrimitivesFromConservatives(const doubl primit[iTe] = T_e; } -void PerfectMixture::GetConservativesFromPrimitives(const Vector &primit, Vector &conserv) { +void PerfectMixture::GetConservativesFromPrimitives(const Vector& primit, Vector& conserv) { // conserv[0] = primit[0]; // for (int d = 0; d < nvel_; d++) conserv[d + 1] = primit[d + 1] * primit[0]; // @@ -741,7 +741,7 @@ void PerfectMixture::GetConservativesFromPrimitives(const Vector &primit, Vector GetConservativesFromPrimitives(&primit[0], &conserv[0]); } -MFEM_HOST_DEVICE void PerfectMixture::GetConservativesFromPrimitives(const double *primit, double *conserv) { +MFEM_HOST_DEVICE void PerfectMixture::GetConservativesFromPrimitives(const double* primit, double* conserv) { conserv[0] = primit[0]; for (int d = 0; d < nvel_; d++) conserv[d + 1] = primit[d + 1] * primit[0]; @@ -782,11 +782,11 @@ MFEM_HOST_DEVICE void PerfectMixture::GetConservativesFromPrimitives(const doubl conserv[iTh] = totalEnergy; } -void PerfectMixture::GetMixtureCp(const Vector &ns, const double &rho, double &CpMix) { +void PerfectMixture::GetMixtureCp(const Vector& ns, const double& rho, double& CpMix) { GetMixtureCp(&ns[0], &rho, &CpMix); } -MFEM_HOST_DEVICE void PerfectMixture::GetMixtureCp(const double *ns, const double *rho, double *CpMix) { +MFEM_HOST_DEVICE void PerfectMixture::GetMixtureCp(const double* ns, const double* rho, double* CpMix) { double n_e = 0.0; if (ambipolar) { n_e = computeAmbipolarElectronNumberDensity(ns); @@ -803,11 +803,11 @@ MFEM_HOST_DEVICE void PerfectMixture::GetMixtureCp(const double *ns, const doubl *CpMix = totalHeatCapacity; } -void PerfectMixture::GetSpeciesCp(const Vector &ns, const double &rho, int sp, double &CpY) { +void PerfectMixture::GetSpeciesCp(const Vector& ns, const double& rho, int sp, double& CpY) { GetSpeciesCp(&ns[0], &rho, sp, &CpY); } -MFEM_HOST_DEVICE void PerfectMixture::GetSpeciesCp(const double *ns, const double *rho, int sp, double *CpY) { +MFEM_HOST_DEVICE void PerfectMixture::GetSpeciesCp(const double* ns, const double* rho, int sp, double* CpY) { double n_e = 0.0; if (ambipolar) { n_e = computeAmbipolarElectronNumberDensity(ns); @@ -831,7 +831,7 @@ MFEM_HOST_DEVICE void PerfectMixture::GetSpeciesCp(const double *ns, const doubl // Mole fraction X will be needed almost everywhere, though it requires Y and n to be evaluated first. // TODO(kevin): It is better to include all X, Y, n into primitive variable Up, // in order to reduce repeated evaluation. -void PerfectMixture::computeSpeciesPrimitives(const Vector &conservedState, Vector &X_sp, Vector &Y_sp, Vector &n_sp) { +void PerfectMixture::computeSpeciesPrimitives(const Vector& conservedState, Vector& X_sp, Vector& Y_sp, Vector& n_sp) { X_sp.SetSize(numSpecies); Y_sp.SetSize(numSpecies); n_sp.SetSize(numSpecies); @@ -879,8 +879,8 @@ void PerfectMixture::computeSpeciesPrimitives(const Vector &conservedState, Vect computeSpeciesPrimitives(&conservedState[0], &X_sp[0], &Y_sp[0], &n_sp[0]); } -MFEM_HOST_DEVICE void PerfectMixture::computeSpeciesPrimitives(const double *conservedState, double *X_sp, double *Y_sp, - double *n_sp) { +MFEM_HOST_DEVICE void PerfectMixture::computeSpeciesPrimitives(const double* conservedState, double* X_sp, double* Y_sp, + double* n_sp) { for (int sp = 0; sp < numSpecies; sp++) { X_sp[sp] = 0.0; Y_sp[sp] = 0.0; @@ -926,7 +926,7 @@ MFEM_HOST_DEVICE void PerfectMixture::computeSpeciesPrimitives(const double *con for (int sp = 0; sp < numSpecies; sp++) X_sp[sp] = n_sp[sp] / n; } -void PerfectMixture::computeNumberDensities(const Vector &conservedState, Vector &n_sp) { +void PerfectMixture::computeNumberDensities(const Vector& conservedState, Vector& n_sp) { n_sp.SetSize(numSpecies); // n_sp = 0.0; // @@ -944,7 +944,7 @@ void PerfectMixture::computeNumberDensities(const Vector &conservedState, Vector computeNumberDensities(&conservedState[0], &n_sp[0]); } -MFEM_HOST_DEVICE void PerfectMixture::computeNumberDensities(const double *conservedState, double *n_sp) const { +MFEM_HOST_DEVICE void PerfectMixture::computeNumberDensities(const double* conservedState, double* n_sp) const { for (int sp = 0; sp < numSpecies; sp++) n_sp[sp] = 0.0; double n_e = 0.0; @@ -960,7 +960,7 @@ MFEM_HOST_DEVICE void PerfectMixture::computeNumberDensities(const double *conse n_sp[iBackground] = rhoB / GetGasParams(iBackground, GasParams::SPECIES_MW); } -double PerfectMixture::ComputePressureFromPrimitives(const mfem::Vector &Up) { +double PerfectMixture::ComputePressureFromPrimitives(const mfem::Vector& Up) { // // NOTE: For now, we do not include all species number densities into Up. // // This requires us to re-evaluate electron/background-species number density. // double n_e = 0.0; @@ -985,7 +985,7 @@ double PerfectMixture::ComputePressureFromPrimitives(const mfem::Vector &Up) { return ComputePressureFromPrimitives(&Up[0]); } -MFEM_HOST_DEVICE double PerfectMixture::ComputePressureFromPrimitives(const double *Up) { +MFEM_HOST_DEVICE double PerfectMixture::ComputePressureFromPrimitives(const double* Up) { // NOTE: For now, we do not include all species number densities into Up. // This requires us to re-evaluate electron/background-species number density. double n_e = 0.0; @@ -1010,7 +1010,7 @@ MFEM_HOST_DEVICE double PerfectMixture::ComputePressureFromPrimitives(const doub } // NOTE: This is almost the same as GetPrimitivesFromConservatives except storing other primitive variables. -double PerfectMixture::ComputePressure(const Vector &state, double *electronPressure) { +double PerfectMixture::ComputePressure(const Vector& state, double* electronPressure) { // Vector n_sp; // computeNumberDensities(state, n_sp); // @@ -1026,7 +1026,7 @@ double PerfectMixture::ComputePressure(const Vector &state, double *electronPres return ComputePressure(&state[0], electronPressure); } -MFEM_HOST_DEVICE double PerfectMixture::ComputePressure(const double *state, double *electronPressure) { +MFEM_HOST_DEVICE double PerfectMixture::ComputePressure(const double* state, double* electronPressure) { double n_sp[gpudata::MAXSPECIES]; computeNumberDensities(state, n_sp); @@ -1041,7 +1041,7 @@ MFEM_HOST_DEVICE double PerfectMixture::ComputePressure(const double *state, dou return p; } -MFEM_HOST_DEVICE double PerfectMixture::computePressureBase(const double *n_sp, const double n_e, const double n_B, +MFEM_HOST_DEVICE double PerfectMixture::computePressureBase(const double* n_sp, const double n_e, const double n_B, const double T_h, const double T_e) const { // NOTE: compute pressure. double n_h = 0.0; // total number density of all heavy species. @@ -1062,7 +1062,7 @@ MFEM_HOST_DEVICE double PerfectMixture::computePressureBase(const double *n_sp, return p; } -bool PerfectMixture::StateIsPhysical(const Vector &state) { +bool PerfectMixture::StateIsPhysical(const Vector& state) { bool physical = true; if (state(0) < 0) { @@ -1116,7 +1116,7 @@ bool PerfectMixture::StateIsPhysical(const Vector &state) { } // NOTE: this routine only return heavy-species temperature. Need name-change. -double PerfectMixture::ComputeTemperature(const Vector &state) { +double PerfectMixture::ComputeTemperature(const Vector& state) { // Vector n_sp; // computeNumberDensities(state, n_sp); // @@ -1128,7 +1128,7 @@ double PerfectMixture::ComputeTemperature(const Vector &state) { } // NOTE: this routine only return heavy-species temperature. Need name-change. -MFEM_HOST_DEVICE double PerfectMixture::ComputeTemperature(const double *state) { +MFEM_HOST_DEVICE double PerfectMixture::ComputeTemperature(const double* state) { double n_sp[gpudata::MAXSPECIES]; computeNumberDensities(state, n_sp); @@ -1138,9 +1138,9 @@ MFEM_HOST_DEVICE double PerfectMixture::ComputeTemperature(const double *state) return T_h; } -MFEM_HOST_DEVICE void PerfectMixture::computeTemperaturesBase(const double *conservedState, const double *n_sp, - const double n_e, const double n_B, double &T_h, - double &T_e) const { +MFEM_HOST_DEVICE void PerfectMixture::computeTemperaturesBase(const double* conservedState, const double* n_sp, + const double n_e, const double n_B, double& T_h, + double& T_e) const { // compute mixture heat capacity. double totalHeatCapacity = computeHeaviesHeatCapacity(&n_sp[0], n_B); if (!twoTemperature_) totalHeatCapacity += n_e * molarCV_[iElectron]; @@ -1171,7 +1171,7 @@ MFEM_HOST_DEVICE void PerfectMixture::computeTemperaturesBase(const double *cons return; } -void PerfectMixture::computeSpeciesEnthalpies(const Vector &state, Vector &speciesEnthalpies) { +void PerfectMixture::computeSpeciesEnthalpies(const Vector& state, Vector& speciesEnthalpies) { speciesEnthalpies.SetSize(numSpecies); // Vector n_sp; @@ -1189,7 +1189,7 @@ void PerfectMixture::computeSpeciesEnthalpies(const Vector &state, Vector &speci return; } -MFEM_HOST_DEVICE void PerfectMixture::computeSpeciesEnthalpies(const double *state, double *speciesEnthalpies) { +MFEM_HOST_DEVICE void PerfectMixture::computeSpeciesEnthalpies(const double* state, double* speciesEnthalpies) { for (int sp = 0; sp < numSpecies; sp++) speciesEnthalpies[sp] = 0.0; double n_sp[gpudata::MAXSPECIES]; @@ -1206,7 +1206,7 @@ MFEM_HOST_DEVICE void PerfectMixture::computeSpeciesEnthalpies(const double *sta return; } -double PerfectMixture::ComputePressureDerivative(const Vector &dUp_dx, const Vector &Uin, bool primitive) { +double PerfectMixture::ComputePressureDerivative(const Vector& dUp_dx, const Vector& Uin, bool primitive) { if (primitive) { return computePressureDerivativeFromPrimitives(dUp_dx, Uin); } else { @@ -1215,7 +1215,7 @@ double PerfectMixture::ComputePressureDerivative(const Vector &dUp_dx, const Vec } // NOTE(kevin): normal-vector-related parts are already handled. -double PerfectMixture::computePressureDerivativeFromPrimitives(const Vector &dUp_dx, const Vector &Uin) { +double PerfectMixture::computePressureDerivativeFromPrimitives(const Vector& dUp_dx, const Vector& Uin) { double pressureGradient = 0.0; double n_e = 0.0; @@ -1263,7 +1263,7 @@ double PerfectMixture::computePressureDerivativeFromPrimitives(const Vector &dUp } // NOTE(kevin): normal-vector-related parts are already handled. -double PerfectMixture::computePressureDerivativeFromConservatives(const Vector &dUp_dx, const Vector &Uin) { +double PerfectMixture::computePressureDerivativeFromConservatives(const Vector& dUp_dx, const Vector& Uin) { double pressureGradient = 0.0; Vector n_sp; @@ -1308,7 +1308,7 @@ double PerfectMixture::computePressureDerivativeFromConservatives(const Vector & return pressureGradient; } -MFEM_HOST_DEVICE double PerfectMixture::computeHeaviesMixtureCV(const double *n_sp, const double n_B) const { +MFEM_HOST_DEVICE double PerfectMixture::computeHeaviesMixtureCV(const double* n_sp, const double n_B) const { double mixtureCV = 0.0; for (int sp = 0; sp < numActiveSpecies; sp++) { @@ -1320,7 +1320,7 @@ MFEM_HOST_DEVICE double PerfectMixture::computeHeaviesMixtureCV(const double *n_ return mixtureCV; } -MFEM_HOST_DEVICE double PerfectMixture::computeHeaviesMixtureHeatRatio(const double *n_sp, const double n_B) const { +MFEM_HOST_DEVICE double PerfectMixture::computeHeaviesMixtureHeatRatio(const double* n_sp, const double n_B) const { double mixtureCV = computeHeaviesMixtureCV(n_sp, n_B); double n_h = n_B; for (int sp = 0; sp < numActiveSpecies; sp++) { @@ -1331,7 +1331,7 @@ MFEM_HOST_DEVICE double PerfectMixture::computeHeaviesMixtureHeatRatio(const dou return 1.0 + n_h * UNIVERSALGASCONSTANT / mixtureCV; } -MFEM_HOST_DEVICE double PerfectMixture::computeSpeedOfSoundBase(const double *n_sp, const double n_B, const double rho, +MFEM_HOST_DEVICE double PerfectMixture::computeSpeedOfSoundBase(const double* n_sp, const double n_B, const double rho, const double p) const { double gamma = computeHeaviesMixtureHeatRatio(n_sp, n_B); @@ -1339,7 +1339,7 @@ MFEM_HOST_DEVICE double PerfectMixture::computeSpeedOfSoundBase(const double *n_ } // Compute the maximum characteristic speed. -double PerfectMixture::ComputeMaxCharSpeed(const Vector &state) { +double PerfectMixture::ComputeMaxCharSpeed(const Vector& state) { // const double den = state(0); // const Vector den_vel(state.GetData() + 1, nvel_); // @@ -1356,7 +1356,7 @@ double PerfectMixture::ComputeMaxCharSpeed(const Vector &state) { return ComputeMaxCharSpeed(&state[0]); } -MFEM_HOST_DEVICE double PerfectMixture::ComputeMaxCharSpeed(const double *state) { +MFEM_HOST_DEVICE double PerfectMixture::ComputeMaxCharSpeed(const double* state) { const double den = state[0]; // const double den_vel(state.GetData() + 1, nvel_); @@ -1372,7 +1372,7 @@ MFEM_HOST_DEVICE double PerfectMixture::ComputeMaxCharSpeed(const double *state) return vel + sound; } -double PerfectMixture::ComputeSpeedOfSound(const mfem::Vector &Uin, bool primitive) { +double PerfectMixture::ComputeSpeedOfSound(const mfem::Vector& Uin, bool primitive) { // if (primitive) { // double n_e = 0.0; // if (ambipolar) { @@ -1402,7 +1402,7 @@ double PerfectMixture::ComputeSpeedOfSound(const mfem::Vector &Uin, bool primiti return ComputeSpeedOfSound(&Uin[0], primitive); } -MFEM_HOST_DEVICE double PerfectMixture::ComputeSpeedOfSound(const double *Uin, bool primitive) const { +MFEM_HOST_DEVICE double PerfectMixture::ComputeSpeedOfSound(const double* Uin, bool primitive) const { if (primitive) { double n_e = 0.0; if (ambipolar) { @@ -1433,8 +1433,8 @@ MFEM_HOST_DEVICE double PerfectMixture::ComputeSpeedOfSound(const double *Uin, b // NOTE: numberDensities have all species number density. // NOTE(kevin): for axisymmetric case, this handles only r- and z-direction. -void PerfectMixture::ComputeMassFractionGradient(const double rho, const Vector &numberDensities, - const DenseMatrix &gradUp, DenseMatrix &massFractionGrad) { +void PerfectMixture::ComputeMassFractionGradient(const double rho, const Vector& numberDensities, + const DenseMatrix& gradUp, DenseMatrix& massFractionGrad) { massFractionGrad.SetSize(numSpecies, dim); massFractionGrad = 0.0; for (int sp = 0; sp < numActiveSpecies; sp++) { // if not ambipolar, electron is included. @@ -1472,8 +1472,8 @@ void PerfectMixture::ComputeMassFractionGradient(const double rho, const Vector } // NOTE(kevin): for axisymmetric case, this handles only r- and z-direction. -void PerfectMixture::ComputeMoleFractionGradient(const Vector &numberDensities, const DenseMatrix &gradUp, - DenseMatrix &moleFractionGrad) { +void PerfectMixture::ComputeMoleFractionGradient(const Vector& numberDensities, const DenseMatrix& gradUp, + DenseMatrix& moleFractionGrad) { moleFractionGrad.SetSize(numSpecies, dim); // double totalN = 0.0; // for (int sp = 0; sp < numSpecies; sp++) totalN += numberDensities(sp); @@ -1526,13 +1526,13 @@ void PerfectMixture::ComputeMoleFractionGradient(const Vector &numberDensities, // for (int d = 0; d < dim; d++) { // moleFractionGrad(sp, d) = nBGrad(d) / totalN - numberDensities(sp) / totalN / totalN * totalNGrad(d); // } - const double *d_gradUp = gradUp.Read(); - double *d_moleFractionGrad = moleFractionGrad.Write(); + const double* d_gradUp = gradUp.Read(); + double* d_moleFractionGrad = moleFractionGrad.Write(); ComputeMoleFractionGradient(&numberDensities[0], d_gradUp, d_moleFractionGrad); } -MFEM_HOST_DEVICE void PerfectMixture::ComputeMoleFractionGradient(const double *numberDensities, const double *gradUp, - double *moleFractionGrad) { +MFEM_HOST_DEVICE void PerfectMixture::ComputeMoleFractionGradient(const double* numberDensities, const double* gradUp, + double* moleFractionGrad) { // moleFractionGrad.SetSize(numSpecies, dim); for (int d = 0; d < dim; d++) { for (int sp = 0; sp < numSpecies; sp++) moleFractionGrad[sp + d * numSpecies] = 0.0; @@ -1593,8 +1593,8 @@ MFEM_HOST_DEVICE void PerfectMixture::ComputeMoleFractionGradient(const double * // NOTE: this is used in isothermal wall, where gas temperature and electron temperature is assumed equal. // i.e. it assumes single temperature at the wall regardless of two temperature condition inside the domain. -void PerfectMixture::computeStagnantStateWithTemp(const mfem::Vector &stateIn, const double Temp, - mfem::Vector &stateOut) { +void PerfectMixture::computeStagnantStateWithTemp(const mfem::Vector& stateIn, const double Temp, + mfem::Vector& stateOut) { stateOut.SetSize(num_equation); stateOut = stateIn; @@ -1621,7 +1621,7 @@ void PerfectMixture::computeStagnantStateWithTemp(const mfem::Vector &stateIn, c // At Inlet BC, for two-temperature, electron temperature is set to be equal to gas temperature, where the total // pressure is p. -void PerfectMixture::modifyEnergyForPressure(const mfem::Vector &stateIn, mfem::Vector &stateOut, const double &p, +void PerfectMixture::modifyEnergyForPressure(const mfem::Vector& stateIn, mfem::Vector& stateOut, const double& p, bool modifyElectronEnergy) { // // will change the total energy to adjust to p // stateOut.SetSize(num_equation); @@ -1695,7 +1695,7 @@ void PerfectMixture::modifyEnergyForPressure(const mfem::Vector &stateIn, mfem:: modifyEnergyForPressure(&stateIn[0], &stateOut[0], p, modifyElectronEnergy); } -MFEM_HOST_DEVICE void PerfectMixture::modifyEnergyForPressure(const double *stateIn, double *stateOut, const double &p, +MFEM_HOST_DEVICE void PerfectMixture::modifyEnergyForPressure(const double* stateIn, double* stateOut, const double& p, bool modifyElectronEnergy) { // will change the total energy to adjust to p for (int eq = 0; eq < num_equation; eq++) stateOut[eq] = stateIn[eq]; @@ -1741,8 +1741,8 @@ MFEM_HOST_DEVICE void PerfectMixture::modifyEnergyForPressure(const double *stat } // TODO(kevin): check if this works for axisymmetric case. -void PerfectMixture::computeConservedStateFromConvectiveFlux(const Vector &meanNormalFluxes, const Vector &normal, - Vector &conservedState) { +void PerfectMixture::computeConservedStateFromConvectiveFlux(const Vector& meanNormalFluxes, const Vector& normal, + Vector& conservedState) { Vector Up(num_equation); Vector numberDensityFluxes(numActiveSpecies); @@ -1820,8 +1820,8 @@ void PerfectMixture::computeConservedStateFromConvectiveFlux(const Vector &meanN } // NOTE(kevin): for axisymmetric case, this handles only r- and z-direction. -void PerfectMixture::computeElectronPressureGrad(const double n_e, const double T_e, const DenseMatrix &gradUp, - Vector &gradPe) { +void PerfectMixture::computeElectronPressureGrad(const double n_e, const double T_e, const DenseMatrix& gradUp, + Vector& gradPe) { gradPe.SetSize(dim); // Vector neGrad; @@ -1840,12 +1840,12 @@ void PerfectMixture::computeElectronPressureGrad(const double n_e, const double // gradPe(d) = (neGrad(d) * T_e + n_e * gradUp(iTe, d)) * UNIVERSALGASCONSTANT; // // return; - const double *d_gradUp = gradUp.Read(); + const double* d_gradUp = gradUp.Read(); computeElectronPressureGrad(n_e, T_e, d_gradUp, &gradPe[0]); } MFEM_HOST_DEVICE void PerfectMixture::computeElectronPressureGrad(const double n_e, const double T_e, - const double *gradUp, double *gradPe) { + const double* gradUp, double* gradPe) { for (int d = 0; d < dim; d++) gradPe[d] = 0.0; double neGrad[gpudata::MAXDIM]; @@ -1870,7 +1870,7 @@ MFEM_HOST_DEVICE void PerfectMixture::computeElectronPressureGrad(const double n // are recombined with electron into the background species. // For air plasma, we will need specific reaction inputs. // We may need to move this to rather chemistry class. -void PerfectMixture::computeSheathBdrFlux(const Vector &state, BoundaryViscousFluxData &bcFlux) { +void PerfectMixture::computeSheathBdrFlux(const Vector& state, BoundaryViscousFluxData& bcFlux) { // Vector n_sp(numSpecies); // computeNumberDensities(state, n_sp); // @@ -1906,7 +1906,7 @@ void PerfectMixture::computeSheathBdrFlux(const Vector &state, BoundaryViscousFl computeSheathBdrFlux(&state[0], bcFlux); } -MFEM_HOST_DEVICE void PerfectMixture::computeSheathBdrFlux(const double *state, BoundaryViscousFluxData &bcFlux) { +MFEM_HOST_DEVICE void PerfectMixture::computeSheathBdrFlux(const double* state, BoundaryViscousFluxData& bcFlux) { double n_sp[gpudata::MAXSPECIES]; computeNumberDensities(state, n_sp); @@ -1941,9 +1941,9 @@ MFEM_HOST_DEVICE void PerfectMixture::computeSheathBdrFlux(const double *state, } } -void PerfectMixture::GetSpeciesFromLTE(double *conserv, double *primit, TableInterpolator2D *energy_table, - TableInterpolator2D *R_table, TableInterpolator2D *c_table, - TableInterpolator2D *T_table) { +void PerfectMixture::GetSpeciesFromLTE(double* conserv, double* primit, TableInterpolator2D* energy_table, + TableInterpolator2D* R_table, TableInterpolator2D* c_table, + TableInterpolator2D* T_table) { for (int sp = 0; sp < numActiveSpecies; sp++) { conserv[nvel_ + 2 + sp] = 0.0; primit[nvel_ + 2 + sp] = 0.0; @@ -2093,7 +2093,7 @@ void PerfectMixture::GetSpeciesFromLTE(double *conserv, double *primit, TableInt primit[iTh] = T; } -void PerfectMixture::GetSpeciesFromLTE(const double T, const double p, double *n_sp) { +void PerfectMixture::GetSpeciesFromLTE(const double T, const double p, double* n_sp) { // This routine makes the following assumptions: // // 1) There is only 1 charged specie and it is a positive ion with diff --git a/src/equation_of_state.hpp b/src/equation_of_state.hpp index a2796577..2f0d2ab9 100644 --- a/src/equation_of_state.hpp +++ b/src/equation_of_state.hpp @@ -146,7 +146,7 @@ class GasMixture { } public: - GasMixture(RunConfiguration &_runfile, int _dim, int nvel); + GasMixture(RunConfiguration& _runfile, int _dim, int nvel); MFEM_HOST_DEVICE GasMixture(WorkingFluid f, int _dim, int nvel, double pc = 0); GasMixture() {} @@ -181,20 +181,20 @@ class GasMixture { int GetNumConservativeVariables() { return Nconservative; } int GetNumPrimitiveVariables() { return Nprimitive; } - virtual double ComputePressure(const Vector &state, - double *electronPressure = NULL) = 0; // pressure from conservatives - MFEM_HOST_DEVICE virtual double ComputePressure(const double *state, double *electronPressure = NULL) { + virtual double ComputePressure(const Vector& state, + double* electronPressure = NULL) = 0; // pressure from conservatives + MFEM_HOST_DEVICE virtual double ComputePressure(const double* state, double* electronPressure = NULL) { printf("ComputePressure not implemented"); return 0; } - virtual double ComputePressureFromPrimitives(const Vector &Up) = 0; // pressure from primitive variables - MFEM_HOST_DEVICE virtual double ComputePressureFromPrimitives(const double *Up) { + virtual double ComputePressureFromPrimitives(const Vector& Up) = 0; // pressure from primitive variables + MFEM_HOST_DEVICE virtual double ComputePressureFromPrimitives(const double* Up) { // mfem_error("ComputePressureFromPrimitives is not implemented."); return -1.0; } - virtual double ComputeTemperature(const Vector &state) = 0; - MFEM_HOST_DEVICE virtual double ComputeTemperature(const double *state) { + virtual double ComputeTemperature(const Vector& state) = 0; + MFEM_HOST_DEVICE virtual double ComputeTemperature(const double* state) { // mfem_error("ComputeTemperature is not implemented."); return -1.0; } @@ -202,53 +202,53 @@ class GasMixture { // virtual double Temperature(double *rho, double *p, // int nsp) = 0; // temperature given densities and pressures of all species - virtual void computeSpeciesPrimitives(const Vector &conservedState, Vector &X_sp, Vector &Y_sp, Vector &n_sp) { + virtual void computeSpeciesPrimitives(const Vector& conservedState, Vector& X_sp, Vector& Y_sp, Vector& n_sp) { mfem_error("computeSpeciesPrimitives not implemented"); } - MFEM_HOST_DEVICE virtual void computeSpeciesPrimitives(const double *conservedState, double *X_sp, double *Y_sp, - double *n_sp) { + MFEM_HOST_DEVICE virtual void computeSpeciesPrimitives(const double* conservedState, double* X_sp, double* Y_sp, + double* n_sp) { printf("ERROR: computeSpeciesPrimitives is not implemented!\n"); assert(false); // device-compatible exit? } - virtual void computeSpeciesEnthalpies(const Vector &state, Vector &speciesEnthalpies) = 0; - MFEM_HOST_DEVICE virtual void computeSpeciesEnthalpies(const double *state, double *speciesEnthalpies) = 0; + virtual void computeSpeciesEnthalpies(const Vector& state, Vector& speciesEnthalpies) = 0; + MFEM_HOST_DEVICE virtual void computeSpeciesEnthalpies(const double* state, double* speciesEnthalpies) = 0; - virtual void GetPrimitivesFromConservatives(const Vector &conserv, Vector &primit) = 0; - virtual void GetConservativesFromPrimitives(const Vector &primit, Vector &conserv) = 0; + virtual void GetPrimitivesFromConservatives(const Vector& conserv, Vector& primit) = 0; + virtual void GetConservativesFromPrimitives(const Vector& primit, Vector& conserv) = 0; - MFEM_HOST_DEVICE virtual void GetPrimitivesFromConservatives(const double *conserv, double *primit) { + MFEM_HOST_DEVICE virtual void GetPrimitivesFromConservatives(const double* conserv, double* primit) { printf("GetPrimitivesFromConservatives is not implemented."); return; } - MFEM_HOST_DEVICE virtual void GetConservativesFromPrimitives(const double *primit, double *conserv) { + MFEM_HOST_DEVICE virtual void GetConservativesFromPrimitives(const double* primit, double* conserv) { printf("GetPrimitivesFromConservatives is not implemented."); return; } - virtual double ComputeSpeedOfSound(const Vector &Uin, bool primitive = true) = 0; + virtual double ComputeSpeedOfSound(const Vector& Uin, bool primitive = true) = 0; // Compute the maximum characteristic speed. - virtual double ComputeMaxCharSpeed(const Vector &state) = 0; - MFEM_HOST_DEVICE virtual double ComputeMaxCharSpeed(const double *state) { + virtual double ComputeMaxCharSpeed(const Vector& state) = 0; + MFEM_HOST_DEVICE virtual double ComputeMaxCharSpeed(const double* state) { printf("ComputeMaxCharSpeed not implemented"); return 0; } - virtual double ComputePressureDerivative(const Vector &dUp_dx, const Vector &Uin, bool primitive = true) = 0; + virtual double ComputePressureDerivative(const Vector& dUp_dx, const Vector& Uin, bool primitive = true) = 0; // Physicality check (at end) - virtual bool StateIsPhysical(const Vector &state) = 0; + virtual bool StateIsPhysical(const Vector& state) = 0; // Compute X, Y gradients from number density gradient. // NOTE(kevin): for axisymmetric case, these handle only r- and z-direction. - virtual void ComputeMassFractionGradient(const double rho, const Vector &numberDensities, const DenseMatrix &gradUp, - DenseMatrix &massFractionGrad) = 0; - virtual void ComputeMoleFractionGradient(const Vector &numberDensities, const DenseMatrix &gradUp, - DenseMatrix &moleFractionGrad) = 0; - MFEM_HOST_DEVICE virtual void ComputeMoleFractionGradient(const double *numberDensities, const double *gradUp, - double *moleFractionGrad) = 0; + virtual void ComputeMassFractionGradient(const double rho, const Vector& numberDensities, const DenseMatrix& gradUp, + DenseMatrix& massFractionGrad) = 0; + virtual void ComputeMoleFractionGradient(const Vector& numberDensities, const DenseMatrix& gradUp, + DenseMatrix& moleFractionGrad) = 0; + MFEM_HOST_DEVICE virtual void ComputeMoleFractionGradient(const double* numberDensities, const double* gradUp, + double* moleFractionGrad) = 0; // TODO(kevin): Compute pressure gradient from temperature gradient. - virtual void ComputePressureGradient(const Vector &state, const DenseMatrix &gradUp, DenseMatrix &PressureGrad) { + virtual void ComputePressureGradient(const Vector& state, const DenseMatrix& gradUp, DenseMatrix& PressureGrad) { mfem_error("ComputePressureGradient not implemented"); } @@ -264,13 +264,13 @@ class GasMixture { virtual double GetGasConstant() = 0; #endif - virtual void computeNumberDensities(const Vector &conservedState, Vector &n_sp) { + virtual void computeNumberDensities(const Vector& conservedState, Vector& n_sp) { mfem::mfem_error("GasMixture::computeNumberDensities not implemented"); } - void SetConstantPlasmaConductivity(ParGridFunction *pc, const ParGridFunction *Up, const ParGridFunction *coords); + void SetConstantPlasmaConductivity(ParGridFunction* pc, const ParGridFunction* Up, const ParGridFunction* coords); - virtual void UpdatePressureGridFunction(ParGridFunction *press, const ParGridFunction *Up); + virtual void UpdatePressureGridFunction(ParGridFunction* press, const ParGridFunction* Up); // TODO(kevin): GPU routines are not yet fully gas-agnostic. Need to be removed. #ifdef _GPU_ @@ -290,15 +290,15 @@ class GasMixture { } // BC related functions - virtual void computeStagnationState(const Vector &stateIn, Vector &stagnationState); - virtual void computeStagnantStateWithTemp(const Vector &stateIn, const double Temp, Vector &stateOut) { + virtual void computeStagnationState(const Vector& stateIn, Vector& stagnationState); + virtual void computeStagnantStateWithTemp(const Vector& stateIn, const double Temp, Vector& stateOut) { mfem_error("computeStagnantStateWithTemp not implemented"); } - virtual void modifyEnergyForPressure(const Vector &stateIn, Vector &stateOut, const double &p, + virtual void modifyEnergyForPressure(const Vector& stateIn, Vector& stateOut, const double& p, bool modifyElectronEnergy = false) { mfem_error("modifyEnergyForPressure not implemented"); } - MFEM_HOST_DEVICE virtual void modifyEnergyForPressure(const double *stateIn, double *stateOut, const double &p, + MFEM_HOST_DEVICE virtual void modifyEnergyForPressure(const double* stateIn, double* stateOut, const double& p, bool modifyElectronEnergy = false) { // mfem_error("modifyEnergyForPressure not implemented"); return; @@ -306,11 +306,11 @@ class GasMixture { // Modify state with a prescribed condition at boundary. // TODO(kevin): it is possible to use this routine for all BCs, so no need of making so many functions as above. - void modifyStateFromPrimitive(const Vector &state, const BoundaryPrimitiveData &bcState, Vector &outputState); - MFEM_HOST_DEVICE void modifyStateFromPrimitive(const double *state, const BoundaryPrimitiveData &bcState, - double *outputState); - virtual void computeSheathBdrFlux(const Vector &state, BoundaryViscousFluxData &bcFlux) = 0; - MFEM_HOST_DEVICE virtual void computeSheathBdrFlux(const double *state, BoundaryViscousFluxData &bcFlux) { + void modifyStateFromPrimitive(const Vector& state, const BoundaryPrimitiveData& bcState, Vector& outputState); + MFEM_HOST_DEVICE void modifyStateFromPrimitive(const double* state, const BoundaryPrimitiveData& bcState, + double* outputState); + virtual void computeSheathBdrFlux(const Vector& state, BoundaryViscousFluxData& bcFlux) = 0; + MFEM_HOST_DEVICE virtual void computeSheathBdrFlux(const double* state, BoundaryViscousFluxData& bcFlux) { // mfem_error("computeSheathBdrFlux is not implemented"); return; } @@ -326,26 +326,26 @@ class GasMixture { // } // TODO(kevin): check if this works for axisymmetric case. - virtual void computeConservedStateFromConvectiveFlux(const Vector &meanNormalFluxes, const Vector &normal, - Vector &conservedState) { + virtual void computeConservedStateFromConvectiveFlux(const Vector& meanNormalFluxes, const Vector& normal, + Vector& conservedState) { mfem_error("computeConservedStateFromConvectiveFlux not implemented"); } virtual double computeElectronEnergy(const double n_e, const double T_e) = 0; virtual double computeElectronPressure(const double n_e, const double T_e) = 0; // NOTE(kevin): for axisymmetric case, this handles only r- and z-direction. - virtual void computeElectronPressureGrad(const double n_e, const double T_e, const DenseMatrix &gradUp, - Vector &gradPe) = 0; - MFEM_HOST_DEVICE virtual void computeElectronPressureGrad(const double n_e, const double T_e, const double *gradUp, - double *gradPe) = 0; - - virtual void GetSpeciesFromLTE(double *conserv, double *primit, TableInterpolator2D *energy_table, - TableInterpolator2D *R_table, TableInterpolator2D *c_table, - TableInterpolator2D *T_table) { + virtual void computeElectronPressureGrad(const double n_e, const double T_e, const DenseMatrix& gradUp, + Vector& gradPe) = 0; + MFEM_HOST_DEVICE virtual void computeElectronPressureGrad(const double n_e, const double T_e, const double* gradUp, + double* gradPe) = 0; + + virtual void GetSpeciesFromLTE(double* conserv, double* primit, TableInterpolator2D* energy_table, + TableInterpolator2D* R_table, TableInterpolator2D* c_table, + TableInterpolator2D* T_table) { printf("GetSpeciesFromLTE is not implemented."); return; } - virtual void GetSpeciesFromLTE(const double T, const double p, double *n_sp) { + virtual void GetSpeciesFromLTE(const double T, const double p, double* n_sp) { printf("GetSpeciesFromLTE is not implemented."); return; } @@ -363,7 +363,7 @@ class DryAir : public GasMixture { virtual void setNumEquations(); public: - DryAir(RunConfiguration &_runfile, int _dim, int nvel); + DryAir(RunConfiguration& _runfile, int _dim, int nvel); // MFEM_HOST_DEVICE DryAir(const WorkingFluid f, const Equations eq_sys, const double viscosity_multiplier, // const double bulk_viscosity, int _dim, int nvel); MFEM_HOST_DEVICE DryAir(const DryAirInput inputs, int _dim, int nvel); @@ -378,47 +378,47 @@ class DryAir : public GasMixture { } // implementation virtual methods - virtual double ComputePressure(const Vector &state, double *electronPressure = NULL); - MFEM_HOST_DEVICE virtual double ComputePressure(const double *state, double *electronPressure = NULL); + virtual double ComputePressure(const Vector& state, double* electronPressure = NULL); + MFEM_HOST_DEVICE virtual double ComputePressure(const double* state, double* electronPressure = NULL); - virtual double ComputePressureFromPrimitives(const Vector &Up); - MFEM_HOST_DEVICE virtual double ComputePressureFromPrimitives(const double *Up); - virtual double ComputeTemperature(const Vector &state); - MFEM_HOST_DEVICE virtual double ComputeTemperature(const double *state); + virtual double ComputePressureFromPrimitives(const Vector& Up); + MFEM_HOST_DEVICE virtual double ComputePressureFromPrimitives(const double* Up); + virtual double ComputeTemperature(const Vector& state); + MFEM_HOST_DEVICE virtual double ComputeTemperature(const double* state); // virtual double Temperature(double *rho, double *p, int nsp = 1) { return p[0] / gas_constant / rho[0]; } - virtual void computeSpeciesEnthalpies(const Vector &state, Vector &speciesEnthalpies); - MFEM_HOST_DEVICE virtual void computeSpeciesEnthalpies(const double *state, double *speciesEnthalpies); + virtual void computeSpeciesEnthalpies(const Vector& state, Vector& speciesEnthalpies); + MFEM_HOST_DEVICE virtual void computeSpeciesEnthalpies(const double* state, double* speciesEnthalpies); - virtual void GetPrimitivesFromConservatives(const Vector &conserv, Vector &primit); - MFEM_HOST_DEVICE virtual void GetPrimitivesFromConservatives(const double *conserv, double *primit); - virtual void GetConservativesFromPrimitives(const Vector &primit, Vector &conserv); - MFEM_HOST_DEVICE virtual void GetConservativesFromPrimitives(const double *primit, double *conserv); + virtual void GetPrimitivesFromConservatives(const Vector& conserv, Vector& primit); + MFEM_HOST_DEVICE virtual void GetPrimitivesFromConservatives(const double* conserv, double* primit); + virtual void GetConservativesFromPrimitives(const Vector& primit, Vector& conserv); + MFEM_HOST_DEVICE virtual void GetConservativesFromPrimitives(const double* primit, double* conserv); - virtual double ComputeSpeedOfSound(const Vector &Uin, bool primitive = true); + virtual double ComputeSpeedOfSound(const Vector& Uin, bool primitive = true); // Compute the maximum characteristic speed. - virtual double ComputeMaxCharSpeed(const Vector &state); - MFEM_HOST_DEVICE virtual double ComputeMaxCharSpeed(const double *state); + virtual double ComputeMaxCharSpeed(const Vector& state); + MFEM_HOST_DEVICE virtual double ComputeMaxCharSpeed(const double* state); - virtual double ComputePressureDerivative(const Vector &dUp_dx, const Vector &Uin, bool primitive = true); + virtual double ComputePressureDerivative(const Vector& dUp_dx, const Vector& Uin, bool primitive = true); // Physicality check (at end) - virtual bool StateIsPhysical(const Vector &state); + virtual bool StateIsPhysical(const Vector& state); MFEM_HOST_DEVICE virtual double GetSpecificHeatRatio() { return specific_heat_ratio; } MFEM_HOST_DEVICE virtual double GetGasConstant() { return gas_constant; } - virtual void ComputeMassFractionGradient(const double rho, const Vector &numberDensities, const DenseMatrix &gradUp, - DenseMatrix &massFractionGrad) { + virtual void ComputeMassFractionGradient(const double rho, const Vector& numberDensities, const DenseMatrix& gradUp, + DenseMatrix& massFractionGrad) { mfem_error("computeMassFractionGradient not implemented"); } - virtual void ComputeMoleFractionGradient(const Vector &numberDensities, const DenseMatrix &gradUp, - DenseMatrix &moleFractionGrad) { + virtual void ComputeMoleFractionGradient(const Vector& numberDensities, const DenseMatrix& gradUp, + DenseMatrix& moleFractionGrad) { mfem_error("computeMoleFractionGradient not implemented"); } - MFEM_HOST_DEVICE virtual void ComputeMoleFractionGradient(const double *numberDensities, const double *gradUp, - double *moleFractionGrad) { + MFEM_HOST_DEVICE virtual void ComputeMoleFractionGradient(const double* numberDensities, const double* gradUp, + double* moleFractionGrad) { printf("computeMoleFractionGradient not implemented"); assert(false); } @@ -426,23 +426,23 @@ class DryAir : public GasMixture { // virtual void UpdatePressureGridFunction(ParGridFunction *press, const ParGridFunction *Up); // BC related functions - virtual void computeStagnationState(const Vector &stateIn, Vector &stagnationState); - virtual void computeStagnantStateWithTemp(const Vector &stateIn, const double Temp, Vector &stateOut); - virtual void modifyEnergyForPressure(const Vector &stateIn, Vector &stateOut, const double &p, + virtual void computeStagnationState(const Vector& stateIn, Vector& stagnationState); + virtual void computeStagnantStateWithTemp(const Vector& stateIn, const double Temp, Vector& stateOut); + virtual void modifyEnergyForPressure(const Vector& stateIn, Vector& stateOut, const double& p, bool modifyElectronEnergy = false); - MFEM_HOST_DEVICE virtual void modifyEnergyForPressure(const double *stateIn, double *stateOut, const double &p, + MFEM_HOST_DEVICE virtual void modifyEnergyForPressure(const double* stateIn, double* stateOut, const double& p, bool modifyElectronEnergy = false); - virtual void computeSheathBdrFlux(const Vector &state, BoundaryViscousFluxData &bcFlux) { + virtual void computeSheathBdrFlux(const Vector& state, BoundaryViscousFluxData& bcFlux) { mfem_error("computeSheathBdrFlux not implemented"); } - MFEM_HOST_DEVICE virtual void computeSheathBdrFlux(const double *state, BoundaryViscousFluxData &bcFlux) { + MFEM_HOST_DEVICE virtual void computeSheathBdrFlux(const double* state, BoundaryViscousFluxData& bcFlux) { printf("ERROR: computeSheathBdrFlux is not supposed to be executed for DryAir!"); return; } - virtual void computeConservedStateFromConvectiveFlux(const Vector &meanNormalFluxes, const Vector &normal, - Vector &conservedState); + virtual void computeConservedStateFromConvectiveFlux(const Vector& meanNormalFluxes, const Vector& normal, + Vector& conservedState); virtual double computeElectronEnergy(const double n_e, const double T_e) { mfem_error("computeElectronEnergy not implemented"); @@ -452,39 +452,39 @@ class DryAir : public GasMixture { mfem_error("computeElectronPressure not implemented"); return 0; } - virtual void computeElectronPressureGrad(const double n_e, const double T_e, const DenseMatrix &gradUp, - Vector &gradPe) { + virtual void computeElectronPressureGrad(const double n_e, const double T_e, const DenseMatrix& gradUp, + Vector& gradPe) { mfem_error("computeElectronPressureGrad not implemented"); } - MFEM_HOST_DEVICE virtual void computeElectronPressureGrad(const double n_e, const double T_e, const double *gradUp, - double *gradPe) { + MFEM_HOST_DEVICE virtual void computeElectronPressureGrad(const double n_e, const double T_e, const double* gradUp, + double* gradPe) { printf("computeElectronPressureGrad not implemented"); } // GPU functions // TODO(kevin): GPU part is not refactored for axisymmetric case. #ifdef _GPU_ - static MFEM_HOST_DEVICE double pressure(const double *state, double *KE, const double &gamma, const int &dim, - const int &num_equation) { + static MFEM_HOST_DEVICE double pressure(const double* state, double* KE, const double& gamma, const int& dim, + const int& num_equation) { double p = 0.; for (int k = 0; k < dim; k++) p += KE[k]; return (gamma - 1.) * (state[1 + dim] - p); } - static MFEM_HOST_DEVICE double ComputePressureFromPrimitives_gpu(const double *Up, const double &Rg, const int &dim) { + static MFEM_HOST_DEVICE double ComputePressureFromPrimitives_gpu(const double* Up, const double& Rg, const int& dim) { return Up[0] * Rg * Up[1 + dim]; } - static MFEM_HOST_DEVICE double temperature(const double *state, double *KE, const double &gamma, const double &Rgas, - const int &dim, const int &num_equation) { + static MFEM_HOST_DEVICE double temperature(const double* state, double* KE, const double& gamma, const double& Rgas, + const int& dim, const int& num_equation) { double temp = 0.; for (int k = 0; k < dim; k++) temp += KE[k]; temp /= state[0]; return (gamma - 1.0) / Rgas * (state[1 + dim] / state[0] - temp); } - static MFEM_HOST_DEVICE double temperatureFromConservative(const double *u, const double &gamma, const double &Rg, - const int &dim, const int &num_equation) { + static MFEM_HOST_DEVICE double temperatureFromConservative(const double* u, const double& gamma, const double& Rg, + const int& dim, const int& num_equation) { double k = 0.; for (int d = 0; d < dim; d++) k += u[1 + d] * u[1 + d]; k /= u[0] * u[0]; @@ -492,38 +492,38 @@ class DryAir : public GasMixture { } // Sutherland's law - static MFEM_HOST_DEVICE double GetViscosity_gpu(const double &temp) { + static MFEM_HOST_DEVICE double GetViscosity_gpu(const double& temp) { return 1.458e-6 * pow(temp, 1.5) / (temp + 110.4); } - static MFEM_HOST_DEVICE double GetThermalConductivity_gpu(const double &visc, const double &gamma, const double &Rg, - const double &Pr) { + static MFEM_HOST_DEVICE double GetThermalConductivity_gpu(const double& visc, const double& gamma, const double& Rg, + const double& Pr) { const double cp = gamma * Rg / (gamma - 1.); return visc * cp / Pr; } - static MFEM_HOST_DEVICE void computeStagnantStateWithTemp_gpu(const double *stateIn, double *stagState, - const double &Temp, const double &gamma, - const double &Rg, const int &num_equation, - const int &dim, const int &thrd, - const int &maxThreads) { + static MFEM_HOST_DEVICE void computeStagnantStateWithTemp_gpu(const double* stateIn, double* stagState, + const double& Temp, const double& gamma, + const double& Rg, const int& num_equation, + const int& dim, const int& thrd, + const int& maxThreads) { if (thrd > 0 && thrd <= dim) stagState[thrd] = 0.; if (thrd == 1 + dim) stagState[thrd] = Rg / (gamma - 1.) * stateIn[0] * Temp; } - static MFEM_HOST_DEVICE void computeStagnantStateWithTemp_gpu_serial(const double *stateIn, double *stagState, - const double &Temp, const double &gamma, - const double &Rg, const int &num_equation, - const int &dim) { + static MFEM_HOST_DEVICE void computeStagnantStateWithTemp_gpu_serial(const double* stateIn, double* stagState, + const double& Temp, const double& gamma, + const double& Rg, const int& num_equation, + const int& dim) { for (int d = 0; d < dim; d++) stagState[1 + d] = 0.; stagState[1 + dim] = Rg / (gamma - 1.) * stateIn[0] * Temp; } - static MFEM_HOST_DEVICE void modifyEnergyForPressure_gpu(const double *stateIn, double *stateOut, const double &p, - const double &gamma, const double &Rg, - const int &num_equation, const int &dim, const int &thrd, - const int &maxThreads) { + static MFEM_HOST_DEVICE void modifyEnergyForPressure_gpu(const double* stateIn, double* stateOut, const double& p, + const double& gamma, const double& Rg, + const int& num_equation, const int& dim, const int& thrd, + const int& maxThreads) { MFEM_SHARED double ke; if (thrd == maxThreads - 1) { ke = 0.; @@ -536,10 +536,10 @@ class DryAir : public GasMixture { if (thrd == 0) stateOut[1 + dim] = p / (gamma - 1.) + ke; } - static MFEM_HOST_DEVICE void modifyEnergyForPressure_gpu_serial(const double *stateIn, double *stateOut, - const double &p, const double &gamma, - const double &Rg, const int &num_equation, - const int &dim) { + static MFEM_HOST_DEVICE void modifyEnergyForPressure_gpu_serial(const double* stateIn, double* stateOut, + const double& p, const double& gamma, + const double& Rg, const int& num_equation, + const int& dim) { double ke; ke = 0.; for (int d = 0; d < dim; d++) ke += stateIn[1 + d] * stateIn[1 + d]; @@ -602,12 +602,12 @@ class DryAir : public GasMixture { // }; // additional functions inlined for speed... -inline double DryAir::ComputePressure(const Vector &state, double *electronPressure) { +inline double DryAir::ComputePressure(const Vector& state, double* electronPressure) { return ComputePressure(state.GetData(), electronPressure); } // additional functions inlined for speed... -MFEM_HOST_DEVICE inline double DryAir::ComputePressure(const double *state, double *electronPressure) { +MFEM_HOST_DEVICE inline double DryAir::ComputePressure(const double* state, double* electronPressure) { if (electronPressure != NULL) *electronPressure = 0.0; double den_vel2 = 0; for (int d = 0; d < nvel_; d++) den_vel2 += state[d + 1] * state[d + 1]; @@ -616,9 +616,9 @@ MFEM_HOST_DEVICE inline double DryAir::ComputePressure(const double *state, doub return (specific_heat_ratio - 1.0) * (state[1 + nvel_] - 0.5 * den_vel2); } -inline double DryAir::ComputeTemperature(const Vector &state) { return ComputeTemperature(state.GetData()); } +inline double DryAir::ComputeTemperature(const Vector& state) { return ComputeTemperature(state.GetData()); } -MFEM_HOST_DEVICE inline double DryAir::ComputeTemperature(const double *state) { +MFEM_HOST_DEVICE inline double DryAir::ComputeTemperature(const double* state) { double den_vel2 = 0; for (int d = 0; d < nvel_; d++) den_vel2 += state[d + 1] * state[d + 1]; den_vel2 /= state[0]; @@ -648,7 +648,7 @@ class PerfectMixture : public GasMixture { // virtual void SetNumEquations(); public: - PerfectMixture(RunConfiguration &_runfile, int _dim, int nvel); + PerfectMixture(RunConfiguration& _runfile, int _dim, int nvel); MFEM_HOST_DEVICE PerfectMixture(const PerfectMixtureInput inputs, int _dim, int nvel, double pc = 0); // FIXME: Generates compiler warning b/c this dtor implicitly calls @@ -671,104 +671,104 @@ class PerfectMixture : public GasMixture { MFEM_HOST_DEVICE virtual double GetSpecificHeatRatio() { return molarCP_[iBackground] / molarCV_[iBackground]; } MFEM_HOST_DEVICE virtual double GetGasConstant() { return specificGasConstants_[iBackground]; } - MFEM_HOST_DEVICE double computeHeaviesHeatCapacity(const double *n_sp, const double &nB) const; - MFEM_HOST_DEVICE double computeHeaviesCp(const double *n_sp, const double &nB) const; - MFEM_HOST_DEVICE double computeSpeciesCp(const double *n_sp, const double &nB, int sp); - MFEM_HOST_DEVICE double computeAmbipolarElectronNumberDensity(const double *n_sp) const; - MFEM_HOST_DEVICE double computeBackgroundMassDensity(const double &rho, const double *n_sp, double &n_e, + MFEM_HOST_DEVICE double computeHeaviesHeatCapacity(const double* n_sp, const double& nB) const; + MFEM_HOST_DEVICE double computeHeaviesCp(const double* n_sp, const double& nB) const; + MFEM_HOST_DEVICE double computeSpeciesCp(const double* n_sp, const double& nB, int sp); + MFEM_HOST_DEVICE double computeAmbipolarElectronNumberDensity(const double* n_sp) const; + MFEM_HOST_DEVICE double computeBackgroundMassDensity(const double& rho, const double* n_sp, double& n_e, bool isElectronComputed = false) const; - virtual void GetPrimitivesFromConservatives(const Vector &conserv, Vector &primit); - virtual void GetConservativesFromPrimitives(const Vector &primit, Vector &conserv); + virtual void GetPrimitivesFromConservatives(const Vector& conserv, Vector& primit); + virtual void GetConservativesFromPrimitives(const Vector& primit, Vector& conserv); - MFEM_HOST_DEVICE virtual void GetPrimitivesFromConservatives(const double *conserv, double *primit); - MFEM_HOST_DEVICE virtual void GetConservativesFromPrimitives(const double *primit, double *conserv); + MFEM_HOST_DEVICE virtual void GetPrimitivesFromConservatives(const double* conserv, double* primit); + MFEM_HOST_DEVICE virtual void GetConservativesFromPrimitives(const double* primit, double* conserv); - virtual void GetMixtureCp(const Vector &ns, const double &rho, double &CpMix); - MFEM_HOST_DEVICE virtual void GetMixtureCp(const double *ns, const double *rho, double *CpMix); + virtual void GetMixtureCp(const Vector& ns, const double& rho, double& CpMix); + MFEM_HOST_DEVICE virtual void GetMixtureCp(const double* ns, const double* rho, double* CpMix); - virtual void GetSpeciesCp(const Vector &ns, const double &rho, int sp, double &CpY); - MFEM_HOST_DEVICE virtual void GetSpeciesCp(const double *ns, const double *rho, int sp, double *CpY); + virtual void GetSpeciesCp(const Vector& ns, const double& rho, int sp, double& CpY); + MFEM_HOST_DEVICE virtual void GetSpeciesCp(const double* ns, const double* rho, int sp, double* CpY); - virtual void computeSpeciesPrimitives(const Vector &conservedState, Vector &X_sp, Vector &Y_sp, Vector &n_sp); - MFEM_HOST_DEVICE virtual void computeSpeciesPrimitives(const double *conservedState, double *X_sp, double *Y_sp, - double *n_sp); - virtual void computeNumberDensities(const Vector &conservedState, Vector &n_sp); - MFEM_HOST_DEVICE void computeNumberDensities(const double *conservedState, double *n_sp) const; + virtual void computeSpeciesPrimitives(const Vector& conservedState, Vector& X_sp, Vector& Y_sp, Vector& n_sp); + MFEM_HOST_DEVICE virtual void computeSpeciesPrimitives(const double* conservedState, double* X_sp, double* Y_sp, + double* n_sp); + virtual void computeNumberDensities(const Vector& conservedState, Vector& n_sp); + MFEM_HOST_DEVICE void computeNumberDensities(const double* conservedState, double* n_sp) const; - virtual double ComputePressure(const Vector &state, double *electronPressure = NULL); - MFEM_HOST_DEVICE virtual double ComputePressure(const double *state, double *electronPressure = NULL); - virtual double ComputePressureFromPrimitives(const Vector &Up); - MFEM_HOST_DEVICE virtual double ComputePressureFromPrimitives(const double *Up); - MFEM_HOST_DEVICE virtual double computePressureBase(const double *n_sp, const double n_e, const double n_B, + virtual double ComputePressure(const Vector& state, double* electronPressure = NULL); + MFEM_HOST_DEVICE virtual double ComputePressure(const double* state, double* electronPressure = NULL); + virtual double ComputePressureFromPrimitives(const Vector& Up); + MFEM_HOST_DEVICE virtual double ComputePressureFromPrimitives(const double* Up); + MFEM_HOST_DEVICE virtual double computePressureBase(const double* n_sp, const double n_e, const double n_B, const double T_h, const double T_e) const; // Physicality check (at end) - virtual bool StateIsPhysical(const Vector &state); + virtual bool StateIsPhysical(const Vector& state); - virtual double ComputeTemperature(const Vector &state); - MFEM_HOST_DEVICE virtual double ComputeTemperature(const double *state); - MFEM_HOST_DEVICE virtual void computeTemperaturesBase(const double *conservedState, const double *n_sp, - const double n_e, const double n_B, double &T_h, - double &T_e) const; + virtual double ComputeTemperature(const Vector& state); + MFEM_HOST_DEVICE virtual double ComputeTemperature(const double* state); + MFEM_HOST_DEVICE virtual void computeTemperaturesBase(const double* conservedState, const double* n_sp, + const double n_e, const double n_B, double& T_h, + double& T_e) const; - virtual void computeSpeciesEnthalpies(const Vector &state, Vector &speciesEnthalpies); - MFEM_HOST_DEVICE virtual void computeSpeciesEnthalpies(const double *state, double *speciesEnthalpies); + virtual void computeSpeciesEnthalpies(const Vector& state, Vector& speciesEnthalpies); + MFEM_HOST_DEVICE virtual void computeSpeciesEnthalpies(const double* state, double* speciesEnthalpies); // TODO(kevin): Kevin - I don't think we should use this for boundary condition. // virtual double Temperature(double *rho, double *p, int nsp = 1) { return p[0] / rho[0] / GetGasConstant(); } - virtual double ComputePressureDerivative(const Vector &dUp_dx, const Vector &Uin, bool primitive = true); - virtual double computePressureDerivativeFromPrimitives(const Vector &dUp_dx, const Vector &Uin); - virtual double computePressureDerivativeFromConservatives(const Vector &dUp_dx, const Vector &Uin); + virtual double ComputePressureDerivative(const Vector& dUp_dx, const Vector& Uin, bool primitive = true); + virtual double computePressureDerivativeFromPrimitives(const Vector& dUp_dx, const Vector& Uin); + virtual double computePressureDerivativeFromConservatives(const Vector& dUp_dx, const Vector& Uin); // virtual void UpdatePressureGridFunction(ParGridFunction *press, const ParGridFunction *Up); // Compute the maximum characteristic speed. - virtual double ComputeMaxCharSpeed(const Vector &state); - MFEM_HOST_DEVICE virtual double ComputeMaxCharSpeed(const double *state); + virtual double ComputeMaxCharSpeed(const Vector& state); + MFEM_HOST_DEVICE virtual double ComputeMaxCharSpeed(const double* state); - virtual double ComputeSpeedOfSound(const Vector &Uin, bool primitive = true); - MFEM_HOST_DEVICE virtual double ComputeSpeedOfSound(const double *Uin, bool primitive = true) const; - MFEM_HOST_DEVICE double computeSpeedOfSoundBase(const double *n_sp, const double n_B, const double rho, + virtual double ComputeSpeedOfSound(const Vector& Uin, bool primitive = true); + MFEM_HOST_DEVICE virtual double ComputeSpeedOfSound(const double* Uin, bool primitive = true) const; + MFEM_HOST_DEVICE double computeSpeedOfSoundBase(const double* n_sp, const double n_B, const double rho, const double p) const; - MFEM_HOST_DEVICE double computeHeaviesMixtureCV(const double *n_sp, const double n_B) const; - MFEM_HOST_DEVICE double computeHeaviesMixtureHeatRatio(const double *n_sp, const double n_B) const; + MFEM_HOST_DEVICE double computeHeaviesMixtureCV(const double* n_sp, const double n_B) const; + MFEM_HOST_DEVICE double computeHeaviesMixtureHeatRatio(const double* n_sp, const double n_B) const; - virtual void ComputeMassFractionGradient(const double rho, const Vector &numberDensities, const DenseMatrix &gradUp, - DenseMatrix &massFractionGrad); - virtual void ComputeMoleFractionGradient(const Vector &numberDensities, const DenseMatrix &gradUp, - DenseMatrix &moleFractionGrad); - MFEM_HOST_DEVICE virtual void ComputeMoleFractionGradient(const double *numberDensities, const double *gradUp, - double *moleFractionGrad); + virtual void ComputeMassFractionGradient(const double rho, const Vector& numberDensities, const DenseMatrix& gradUp, + DenseMatrix& massFractionGrad); + virtual void ComputeMoleFractionGradient(const Vector& numberDensities, const DenseMatrix& gradUp, + DenseMatrix& moleFractionGrad); + MFEM_HOST_DEVICE virtual void ComputeMoleFractionGradient(const double* numberDensities, const double* gradUp, + double* moleFractionGrad); // functions needed for BCs - virtual void computeStagnantStateWithTemp(const Vector &stateIn, const double Temp, Vector &stateOut); - virtual void modifyEnergyForPressure(const Vector &stateIn, Vector &stateOut, const double &p, + virtual void computeStagnantStateWithTemp(const Vector& stateIn, const double Temp, Vector& stateOut); + virtual void modifyEnergyForPressure(const Vector& stateIn, Vector& stateOut, const double& p, bool modifyElectronEnergy = false); - MFEM_HOST_DEVICE virtual void modifyEnergyForPressure(const double *stateIn, double *stateOut, const double &p, + MFEM_HOST_DEVICE virtual void modifyEnergyForPressure(const double* stateIn, double* stateOut, const double& p, bool modifyElectronEnergy = false); - virtual void computeSheathBdrFlux(const Vector &state, BoundaryViscousFluxData &bcFlux); - MFEM_HOST_DEVICE virtual void computeSheathBdrFlux(const double *state, BoundaryViscousFluxData &bcFlux); + virtual void computeSheathBdrFlux(const Vector& state, BoundaryViscousFluxData& bcFlux); + MFEM_HOST_DEVICE virtual void computeSheathBdrFlux(const double* state, BoundaryViscousFluxData& bcFlux); - virtual void computeConservedStateFromConvectiveFlux(const Vector &meanNormalFluxes, const Vector &normal, - Vector &conservedState); + virtual void computeConservedStateFromConvectiveFlux(const Vector& meanNormalFluxes, const Vector& normal, + Vector& conservedState); virtual double computeElectronEnergy(const double n_e, const double T_e) { return n_e * molarCV_[iElectron] * T_e; } virtual double computeElectronPressure(const double n_e, const double T_e) { return n_e * UNIVERSALGASCONSTANT * T_e; } - virtual void computeElectronPressureGrad(const double n_e, const double T_e, const DenseMatrix &gradUp, - Vector &gradPe); - MFEM_HOST_DEVICE virtual void computeElectronPressureGrad(const double n_e, const double T_e, const double *gradUp, - double *gradPe); + virtual void computeElectronPressureGrad(const double n_e, const double T_e, const DenseMatrix& gradUp, + Vector& gradPe); + MFEM_HOST_DEVICE virtual void computeElectronPressureGrad(const double n_e, const double T_e, const double* gradUp, + double* gradPe); // Compute species mass densities based on LTE assumptions. - virtual void GetSpeciesFromLTE(double *conserv, double *primit, TableInterpolator2D *energy_table, - TableInterpolator2D *R_table, TableInterpolator2D *c_table, - TableInterpolator2D *T_table); - virtual void GetSpeciesFromLTE(const double T, const double p, double *n_sp); + virtual void GetSpeciesFromLTE(double* conserv, double* primit, TableInterpolator2D* energy_table, + TableInterpolator2D* R_table, TableInterpolator2D* c_table, + TableInterpolator2D* T_table); + virtual void GetSpeciesFromLTE(const double T, const double p, double* n_sp); // GPU functions #ifdef _GPU_ diff --git a/src/externalData_base.hpp b/src/externalData_base.hpp index f5dede6b..96dc4539 100644 --- a/src/externalData_base.hpp +++ b/src/externalData_base.hpp @@ -42,8 +42,8 @@ * ext data to the flow. */ struct extDataToFlow { - const mfem::ParGridFunction *Udata = nullptr; - const mfem::ParGridFunction *Thdata = nullptr; + const mfem::ParGridFunction* Udata = nullptr; + const mfem::ParGridFunction* Thdata = nullptr; }; /** @@ -51,9 +51,9 @@ struct extDataToFlow { * ext data to the thermo chem model. */ struct extDataToThermoChem { - const mfem::ParGridFunction *Tdata = nullptr; - const mfem::ParGridFunction *Ydata = nullptr; - const mfem::ParGridFunction *Yfulldata = nullptr; + const mfem::ParGridFunction* Tdata = nullptr; + const mfem::ParGridFunction* Ydata = nullptr; + const mfem::ParGridFunction* Yfulldata = nullptr; }; /** @@ -61,9 +61,9 @@ struct extDataToThermoChem { * ext data to the turb model */ struct extDataToTurbModel { - const mfem::ParGridFunction *NuTdata = nullptr; - const mfem::ParGridFunction *TKEdata = nullptr; - const mfem::ParGridFunction *V2data = nullptr; + const mfem::ParGridFunction* NuTdata = nullptr; + const mfem::ParGridFunction* TKEdata = nullptr; + const mfem::ParGridFunction* V2data = nullptr; }; /** @@ -84,7 +84,7 @@ class ExternalDataBase { /** * @brief Hook to let derived classes register visualization fields with ParaViewDataCollection */ - virtual void initializeViz(mfem::ParaViewDataCollection &pvdc) {} + virtual void initializeViz(mfem::ParaViewDataCollection& pvdc) {} /** * @brief Take a single time step diff --git a/src/faceGradientIntegration.cpp b/src/faceGradientIntegration.cpp index 1fed2061..62f877af 100644 --- a/src/faceGradientIntegration.cpp +++ b/src/faceGradientIntegration.cpp @@ -33,12 +33,12 @@ #include "faceGradientIntegration.hpp" // Implementation of class FaceIntegrator -GradFaceIntegrator::GradFaceIntegrator(IntegrationRules *_intRules, const int _dim, const int _num_equation, - BCintegrator *bc, bool useBCinGrad) +GradFaceIntegrator::GradFaceIntegrator(IntegrationRules* _intRules, const int _dim, const int _num_equation, + BCintegrator* bc, bool useBCinGrad) : dim(_dim), num_equation(_num_equation), intRules(_intRules), bc_(bc), useBCinGrad_(useBCinGrad) {} -void GradFaceIntegrator::AssembleFaceVector(const FiniteElement &el1, const FiniteElement &el2, - FaceElementTransformations &Tr, const Vector &elfun, Vector &elvect) { +void GradFaceIntegrator::AssembleFaceVector(const FiniteElement& el1, const FiniteElement& el2, + FaceElementTransformations& Tr, const Vector& elfun, Vector& elvect) { // Compute the term on the interior faces. Vector nor(dim); Vector mean(num_equation); @@ -75,11 +75,11 @@ void GradFaceIntegrator::AssembleFaceVector(const FiniteElement &el1, const Fini if (el1.Space() == FunctionSpace::Pk) { intorder++; } - const IntegrationRule *ir = &intRules->Get(Tr.GetGeometryType(), intorder); + const IntegrationRule* ir = &intRules->Get(Tr.GetGeometryType(), intorder); // Quadrature point loop for (int i = 0; i < ir->GetNPoints(); i++) { - const IntegrationPoint &ip = ir->IntPoint(i); + const IntegrationPoint& ip = ir->IntPoint(i); Tr.SetAllIntPoints(&ip); // set face and element int. points @@ -98,9 +98,9 @@ void GradFaceIntegrator::AssembleFaceVector(const FiniteElement &el1, const Fini if (useBCinGrad_) { const int attr = Tr.Attribute; - std::unordered_map::const_iterator ibc = bc_->inletBCmap.find(attr); - std::unordered_map::const_iterator obc = bc_->outletBCmap.find(attr); - std::unordered_map::const_iterator wbc = bc_->wallBCmap.find(attr); + std::unordered_map::const_iterator ibc = bc_->inletBCmap.find(attr); + std::unordered_map::const_iterator obc = bc_->outletBCmap.find(attr); + std::unordered_map::const_iterator wbc = bc_->wallBCmap.find(attr); if (ibc != bc_->inletBCmap.end()) { ibc->second->computeBdrPrimitiveStateForGradient(iUp1, iUp2); } diff --git a/src/faceGradientIntegration.hpp b/src/faceGradientIntegration.hpp index f2a16f0a..b5c3f4d8 100644 --- a/src/faceGradientIntegration.hpp +++ b/src/faceGradientIntegration.hpp @@ -44,17 +44,17 @@ class GradFaceIntegrator : public NonlinearFormIntegrator { private: const int dim; const int num_equation; - IntegrationRules *intRules; + IntegrationRules* intRules; - BCintegrator *bc_; // NB: GradFaceIntegrator is a friend of BCintegrator + BCintegrator* bc_; // NB: GradFaceIntegrator is a friend of BCintegrator const bool useBCinGrad_; public: - GradFaceIntegrator(IntegrationRules *_intRules, const int _dim, const int _num_equation, BCintegrator *bc = NULL, + GradFaceIntegrator(IntegrationRules* _intRules, const int _dim, const int _num_equation, BCintegrator* bc = NULL, bool useBCinGrad = false); - virtual void AssembleFaceVector(const FiniteElement &el1, const FiniteElement &el2, FaceElementTransformations &Tr, - const Vector &elfun, Vector &elvect); + virtual void AssembleFaceVector(const FiniteElement& el1, const FiniteElement& el2, FaceElementTransformations& Tr, + const Vector& elfun, Vector& elvect); }; #endif // FACEGRADIENTINTEGRATION_HPP_ diff --git a/src/face_integrator.cpp b/src/face_integrator.cpp index 7c1897a8..50dd4a3a 100644 --- a/src/face_integrator.cpp +++ b/src/face_integrator.cpp @@ -33,10 +33,10 @@ #include "face_integrator.hpp" // Implementation of class FaceIntegrator -FaceIntegrator::FaceIntegrator(IntegrationRules *_intRules, RiemannSolverTPS *rsolver_, Fluxes *_fluxClass, - ParFiniteElementSpace *_vfes, bool _useLinear, const int _dim, const int _num_equation, - ParGridFunction *_gradUp, ParFiniteElementSpace *_gradUpfes, double &_max_char_speed, - bool axisym, ParGridFunction *distance) +FaceIntegrator::FaceIntegrator(IntegrationRules* _intRules, RiemannSolverTPS* rsolver_, Fluxes* _fluxClass, + ParFiniteElementSpace* _vfes, bool _useLinear, const int _dim, const int _num_equation, + ParGridFunction* _gradUp, ParFiniteElementSpace* _gradUpfes, double& _max_char_speed, + bool axisym, ParGridFunction* distance) : rsolver(rsolver_), fluxClass(_fluxClass), vfes(_vfes), @@ -60,9 +60,9 @@ FaceIntegrator::~FaceIntegrator() { } } -void FaceIntegrator::getElementsGrads_cpu(FaceElementTransformations &Tr, const FiniteElement &el1, - const FiniteElement &el2, DenseTensor &gradUp1, DenseTensor &gradUp2) { - double *dataGradUp = gradUp->GetData(); +void FaceIntegrator::getElementsGrads_cpu(FaceElementTransformations& Tr, const FiniteElement& el1, + const FiniteElement& el2, DenseTensor& gradUp1, DenseTensor& gradUp2) { + double* dataGradUp = gradUp->GetData(); vfes->GetElementVDofs(Tr.Elem1->ElementNo, vdofs1); int eldDof = el1.GetDof(); @@ -101,13 +101,13 @@ void FaceIntegrator::getElementsGrads_cpu(FaceElementTransformations &Tr, const } } -void FaceIntegrator::getElementsGrads_gpu(const ParGridFunction *gradUp, ParFiniteElementSpace *vfes, - const ParFiniteElementSpace *gradUpfes, FaceElementTransformations &Tr, - const FiniteElement &el1, const FiniteElement &el2, DenseTensor &gradUp1, - DenseTensor &gradUp2, const int &num_equation, const int &totalDofs, - const int &dim) { - const double *d_gradUp = gradUp->Read(); - double *d_gradUp1 = gradUp1.ReadWrite(); +void FaceIntegrator::getElementsGrads_gpu(const ParGridFunction* gradUp, ParFiniteElementSpace* vfes, + const ParFiniteElementSpace* gradUpfes, FaceElementTransformations& Tr, + const FiniteElement& el1, const FiniteElement& el2, DenseTensor& gradUp1, + DenseTensor& gradUp2, const int& num_equation, const int& totalDofs, + const int& dim) { + const double* d_gradUp = gradUp->Read(); + double* d_gradUp1 = gradUp1.ReadWrite(); Array vdofs1; vfes->GetElementVDofs(Tr.Elem1->ElementNo, vdofs1); @@ -144,7 +144,7 @@ void FaceIntegrator::getElementsGrads_gpu(const ParGridFunction *gradUp, ParFini } else { vfes->GetElementVDofs(no2, vdofs2); - double *d_gradUp2 = gradUp2.Write(); + double* d_gradUp2 = gradUp2.Write(); auto d_vdofs2 = vdofs2.Read(); MFEM_FORALL(n, eldDof, { @@ -159,11 +159,11 @@ void FaceIntegrator::getElementsGrads_gpu(const ParGridFunction *gradUp, ParFini } } -void FaceIntegrator::getDistanceDofs(FaceElementTransformations &Tr, const FiniteElement &el1, const FiniteElement &el2, - Vector &dist1, Vector &dist2) { +void FaceIntegrator::getDistanceDofs(FaceElementTransformations& Tr, const FiniteElement& el1, const FiniteElement& el2, + Vector& dist1, Vector& dist2) { assert(distance_ != NULL); - const ParFiniteElementSpace *pfes = distance_->ParFESpace(); + const ParFiniteElementSpace* pfes = distance_->ParFESpace(); Array dofs1; pfes->GetElementVDofs(Tr.Elem1->ElementNo, dofs1); @@ -186,13 +186,13 @@ void FaceIntegrator::getDistanceDofs(FaceElementTransformations &Tr, const Finit } } -void FaceIntegrator::AssembleFaceVector(const FiniteElement &el1, const FiniteElement &el2, - FaceElementTransformations &Tr, const Vector &elfun, Vector &elvect) { +void FaceIntegrator::AssembleFaceVector(const FiniteElement& el1, const FiniteElement& el2, + FaceElementTransformations& Tr, const Vector& elfun, Vector& elvect) { NonLinearFaceIntegration(el1, el2, Tr, elfun, elvect); } -void FaceIntegrator::NonLinearFaceIntegration(const FiniteElement &el1, const FiniteElement &el2, - FaceElementTransformations &Tr, const Vector &elfun, Vector &elvect) { +void FaceIntegrator::NonLinearFaceIntegration(const FiniteElement& el1, const FiniteElement& el2, + FaceElementTransformations& Tr, const Vector& elfun, Vector& elvect) { // Compute the term on the interior faces. funval1.SetSize(num_equation); @@ -240,7 +240,7 @@ void FaceIntegrator::NonLinearFaceIntegration(const FiniteElement &el1, const Fi intorder++; } // IntegrationRules IntRules2(0, Quadrature1D::GaussLobatto); - const IntegrationRule *ir = &intRules->Get(Tr.GetGeometryType(), intorder); + const IntegrationRule* ir = &intRules->Get(Tr.GetGeometryType(), intorder); gradUp1i.SetSize(num_equation, dim); gradUp2i.SetSize(num_equation, dim); @@ -249,7 +249,7 @@ void FaceIntegrator::NonLinearFaceIntegration(const FiniteElement &el1, const Fi viscF2.SetSize(num_equation, dim); // element size - Mesh *mesh = vfes->GetMesh(); + Mesh* mesh = vfes->GetMesh(); const double delta1 = mesh->GetElementSize(Tr.Elem1No, 1) / el1.GetOrder(); double delta2 = delta1; @@ -262,7 +262,7 @@ void FaceIntegrator::NonLinearFaceIntegration(const FiniteElement &el1, const Fi // below is from the variant of Mesh::GetElementSize that takes an // ElementTransformation as input, rather than an element index. // We should simply call that function, but it is not public. - ElementTransformation *T = Tr.Elem2; + ElementTransformation* T = Tr.Elem2; DenseMatrix J(dim, dim); Geometry::Type geom = T->GetGeometryType(); @@ -280,7 +280,7 @@ void FaceIntegrator::NonLinearFaceIntegration(const FiniteElement &el1, const Fi const int nvel = fluxClass->GetNumVels(); for (int i = 0; i < ir->GetNPoints(); i++) { - const IntegrationPoint &ip = ir->IntPoint(i); + const IntegrationPoint& ip = ir->IntPoint(i); Tr.SetAllIntPoints(&ip); // set face and element int. points diff --git a/src/face_integrator.hpp b/src/face_integrator.hpp index 1548d822..fc117272 100644 --- a/src/face_integrator.hpp +++ b/src/face_integrator.hpp @@ -52,21 +52,21 @@ using namespace mfem; // Interior face term: class FaceIntegrator : public NonlinearFormIntegrator { private: - RiemannSolverTPS *rsolver; - Fluxes *fluxClass; - ParFiniteElementSpace *vfes; + RiemannSolverTPS* rsolver; + Fluxes* fluxClass; + ParFiniteElementSpace* vfes; const int dim; const int num_equation; - double &max_char_speed; + double& max_char_speed; - const ParGridFunction *gradUp; - const ParFiniteElementSpace *gradUpfes; + const ParGridFunction* gradUp; + const ParFiniteElementSpace* gradUpfes; - const ParGridFunction *distance_; + const ParGridFunction* distance_; - IntegrationRules *intRules; + IntegrationRules* intRules; DenseMatrix *faceMassMatrix1, *faceMassMatrix2; int faceNum; @@ -96,29 +96,29 @@ class FaceIntegrator : public NonlinearFormIntegrator { DenseMatrix elvect1_mat; DenseMatrix elvect2_mat; - void getElementsGrads_cpu(FaceElementTransformations &Tr, const FiniteElement &el1, const FiniteElement &el2, - DenseTensor &gradUp1, DenseTensor &gradUp2); + void getElementsGrads_cpu(FaceElementTransformations& Tr, const FiniteElement& el1, const FiniteElement& el2, + DenseTensor& gradUp1, DenseTensor& gradUp2); - void NonLinearFaceIntegration(const FiniteElement &el1, const FiniteElement &el2, FaceElementTransformations &Tr, - const Vector &elfun, Vector &elvect); + void NonLinearFaceIntegration(const FiniteElement& el1, const FiniteElement& el2, FaceElementTransformations& Tr, + const Vector& elfun, Vector& elvect); - void getDistanceDofs(FaceElementTransformations &Tr, const FiniteElement &el1, const FiniteElement &el2, - Vector &dist1, Vector &dist2); + void getDistanceDofs(FaceElementTransformations& Tr, const FiniteElement& el1, const FiniteElement& el2, + Vector& dist1, Vector& dist2); public: - FaceIntegrator(IntegrationRules *_intRules, RiemannSolverTPS *rsolver_, Fluxes *_fluxClass, - ParFiniteElementSpace *_vfes, bool _useLinear, const int _dim, const int _num_equation, - ParGridFunction *_gradUp, ParFiniteElementSpace *_gradUpfes, double &_max_char_speed, bool axisym, - ParGridFunction *distance); + FaceIntegrator(IntegrationRules* _intRules, RiemannSolverTPS* rsolver_, Fluxes* _fluxClass, + ParFiniteElementSpace* _vfes, bool _useLinear, const int _dim, const int _num_equation, + ParGridFunction* _gradUp, ParFiniteElementSpace* _gradUpfes, double& _max_char_speed, bool axisym, + ParGridFunction* distance); ~FaceIntegrator(); - virtual void AssembleFaceVector(const FiniteElement &el1, const FiniteElement &el2, FaceElementTransformations &Tr, - const Vector &elfun, Vector &elvect); + virtual void AssembleFaceVector(const FiniteElement& el1, const FiniteElement& el2, FaceElementTransformations& Tr, + const Vector& elfun, Vector& elvect); - static void getElementsGrads_gpu(const ParGridFunction *gradUp, ParFiniteElementSpace *vfes, - const ParFiniteElementSpace *gradUpfes, FaceElementTransformations &Tr, - const FiniteElement &el1, const FiniteElement &el2, DenseTensor &gradUp1, - DenseTensor &gradUp2, const int &num_equation, const int &totalDofs, const int &dim); + static void getElementsGrads_gpu(const ParGridFunction* gradUp, ParFiniteElementSpace* vfes, + const ParFiniteElementSpace* gradUpfes, FaceElementTransformations& Tr, + const FiniteElement& el1, const FiniteElement& el2, DenseTensor& gradUp1, + DenseTensor& gradUp2, const int& num_equation, const int& totalDofs, const int& dim); }; #endif // FACE_INTEGRATOR_HPP_ diff --git a/src/fluxes.cpp b/src/fluxes.cpp index 4ba41676..01c8f1c2 100644 --- a/src/fluxes.cpp +++ b/src/fluxes.cpp @@ -31,7 +31,7 @@ // -----------------------------------------------------------------------------------el- #include "fluxes.hpp" -Fluxes::Fluxes(GasMixture *_mixture, Equations _eqSystem, TransportProperties *_transport, const int _num_equation, +Fluxes::Fluxes(GasMixture* _mixture, Equations _eqSystem, TransportProperties* _transport, const int _num_equation, const int _dim, bool axisym) : mixture(_mixture), eqSystem(_eqSystem), @@ -54,8 +54,8 @@ Fluxes::Fluxes(GasMixture *_mixture, Equations _eqSystem, TransportProperties *_ numActiveSpecies = mixture->GetNumActiveSpecies(); } -Fluxes::Fluxes(GasMixture *_mixture, Equations _eqSystem, TransportProperties *_transport, const int _num_equation, - const int _dim, bool axisym, RunConfiguration *config) +Fluxes::Fluxes(GasMixture* _mixture, Equations _eqSystem, TransportProperties* _transport, const int _num_equation, + const int _dim, bool axisym, RunConfiguration* config) : mixture(_mixture), eqSystem(_eqSystem), config_(config), @@ -94,7 +94,7 @@ Fluxes::Fluxes(GasMixture *_mixture, Equations _eqSystem, TransportProperties *_ numActiveSpecies = mixture->GetNumActiveSpecies(); } -MFEM_HOST_DEVICE Fluxes::Fluxes(GasMixture *_mixture, Equations _eqSystem, TransportProperties *_transport, +MFEM_HOST_DEVICE Fluxes::Fluxes(GasMixture* _mixture, Equations _eqSystem, TransportProperties* _transport, const int _num_equation, const int _dim, bool axisym, int sgs_type, double sgs_floor, double sgs_const, viscositySpongeData vsd) : mixture(_mixture), @@ -128,11 +128,11 @@ MFEM_HOST_DEVICE Fluxes::Fluxes(GasMixture *_mixture, Equations _eqSystem, Trans numActiveSpecies = mixture->GetNumActiveSpecies(); } -void Fluxes::ComputeConvectiveFluxes(const Vector &state, DenseMatrix &flux) { +void Fluxes::ComputeConvectiveFluxes(const Vector& state, DenseMatrix& flux) { ComputeConvectiveFluxes(state.GetData(), flux.GetData()); } -MFEM_HOST_DEVICE void Fluxes::ComputeConvectiveFluxes(const double *state, double *flux) const { +MFEM_HOST_DEVICE void Fluxes::ComputeConvectiveFluxes(const double* state, double* flux) const { double Pe = 0.0; const double pres = mixture->ComputePressure(state, &Pe); const int numActiveSpecies = mixture->GetNumActiveSpecies(); @@ -170,13 +170,13 @@ MFEM_HOST_DEVICE void Fluxes::ComputeConvectiveFluxes(const double *state, doubl } // TODO(kevin): check/complete axisymmetric setting for multi-component flow. -void Fluxes::ComputeViscousFluxes(const Vector &state, const DenseMatrix &gradUp, Vector transip, double delta, - double distance, DenseMatrix &flux) { +void Fluxes::ComputeViscousFluxes(const Vector& state, const DenseMatrix& gradUp, Vector transip, double delta, + double distance, DenseMatrix& flux) { ComputeViscousFluxes(state.GetData(), gradUp.GetData(), transip.GetData(), delta, distance, flux.GetData()); } -MFEM_HOST_DEVICE void Fluxes::ComputeViscousFluxes(const double *state, const double *gradUp, double *transip, - double delta, double distance, double *flux) { +MFEM_HOST_DEVICE void Fluxes::ComputeViscousFluxes(const double* state, const double* gradUp, double* transip, + double delta, double distance, double* flux) { for (int d = 0; d < dim; d++) { for (int eq = 0; eq < num_equation; eq++) { flux[eq + d * num_equation] = 0.; @@ -334,16 +334,16 @@ MFEM_HOST_DEVICE void Fluxes::ComputeViscousFluxes(const double *state, const do } } -void Fluxes::ComputeBdrViscousFluxes(const Vector &state, const DenseMatrix &gradUp, Vector transip, double delta, - double distance, const BoundaryViscousFluxData &bcFlux, Vector &normalFlux) { +void Fluxes::ComputeBdrViscousFluxes(const Vector& state, const DenseMatrix& gradUp, Vector transip, double delta, + double distance, const BoundaryViscousFluxData& bcFlux, Vector& normalFlux) { normalFlux.SetSize(num_equation); ComputeBdrViscousFluxes(state.GetData(), gradUp.GetData(), transip.GetData(), delta, distance, bcFlux, normalFlux.GetData()); } -MFEM_HOST_DEVICE void Fluxes::ComputeBdrViscousFluxes(const double *state, const double *gradUp, double *transip, +MFEM_HOST_DEVICE void Fluxes::ComputeBdrViscousFluxes(const double* state, const double* gradUp, double* transip, double delta, double distance, - const BoundaryViscousFluxData &bcFlux, double *normalFlux) { + const BoundaryViscousFluxData& bcFlux, double* normalFlux) { // normalFlux.SetSize(num_equation); for (int eq = 0; eq < num_equation; eq++) normalFlux[eq] = 0.; if (eqSystem == EULER) { @@ -506,11 +506,11 @@ MFEM_HOST_DEVICE void Fluxes::ComputeBdrViscousFluxes(const double *state, const /** Basic Smagorinksy subgrid model with user-specified cutoff grid length */ -void Fluxes::sgsSmag(const Vector &state, const DenseMatrix &gradUp, double delta, double &mu) { +void Fluxes::sgsSmag(const Vector& state, const DenseMatrix& gradUp, double delta, double& mu) { sgsSmag(state.GetData(), gradUp.GetData(), delta, mu); } -MFEM_HOST_DEVICE void Fluxes::sgsSmag(const double *state, const double *gradUp, double delta, double &mu) { +MFEM_HOST_DEVICE void Fluxes::sgsSmag(const double* state, const double* gradUp, double delta, double& mu) { double Sij[6]; double Smag = 0.; double Cd = sgs_model_const_; // user-set, defaults to 0.12 @@ -540,11 +540,11 @@ MFEM_HOST_DEVICE void Fluxes::sgsSmag(const double *state, const double *gradUp, Sigma subgrid model following Nicoud et.al., "Using singular values to build a subgrid-scale model for large eddy simulations", PoF 2011. */ -void Fluxes::sgsSigma(const Vector &state, const DenseMatrix &gradUp, double delta, double &mu) { +void Fluxes::sgsSigma(const Vector& state, const DenseMatrix& gradUp, double delta, double& mu) { sgsSigma(state.GetData(), gradUp.GetData(), delta, mu); } -MFEM_HOST_DEVICE void Fluxes::sgsSigma(const double *state, const double *gradUp, double delta, double &mu) { +MFEM_HOST_DEVICE void Fluxes::sgsSigma(const double* state, const double* gradUp, double delta, double& mu) { double Cd = sgs_model_const_; // user-set, defaults to 0.135 double sml = 1.0e-12; double l_floor, d_model, d4; @@ -666,7 +666,7 @@ MFEM_HOST_DEVICE void Fluxes::sgsSigma(const double *state, const double *gradUp Simple planar viscous sponge layer with smooth tanh-transtion using user-specified width and total amplification. Note: duplicate in M2 */ -MFEM_HOST_DEVICE void Fluxes::viscSpongePlanar(double *x, double &wgt) { +MFEM_HOST_DEVICE void Fluxes::viscSpongePlanar(double* x, double& wgt) { double s[3]; double factor, width, dist; diff --git a/src/fluxes.hpp b/src/fluxes.hpp index fb9499a8..b8decd8a 100644 --- a/src/fluxes.hpp +++ b/src/fluxes.hpp @@ -64,10 +64,10 @@ struct viscositySpongeData { // Need to discuss further. class Fluxes { private: - GasMixture *mixture; + GasMixture* mixture; Equations eqSystem; - RunConfiguration *config_; - TransportProperties *transport; + RunConfiguration* config_; + TransportProperties* transport; int nvel; const int dim; @@ -83,39 +83,39 @@ class Fluxes { viscositySpongeData vsd_; public: - Fluxes(GasMixture *_mixture, Equations _eqSystem, TransportProperties *_transport, const int _num_equation, + Fluxes(GasMixture* _mixture, Equations _eqSystem, TransportProperties* _transport, const int _num_equation, const int _dim, bool axisym); - Fluxes(GasMixture *_mixture, Equations _eqSystem, TransportProperties *_transport, const int _num_equation, - const int _dim, bool axisym, RunConfiguration *config); - MFEM_HOST_DEVICE Fluxes(GasMixture *_mixture, Equations _eqSystem, TransportProperties *_transport, + Fluxes(GasMixture* _mixture, Equations _eqSystem, TransportProperties* _transport, const int _num_equation, + const int _dim, bool axisym, RunConfiguration* config); + MFEM_HOST_DEVICE Fluxes(GasMixture* _mixture, Equations _eqSystem, TransportProperties* _transport, const int _num_equation, const int _dim, bool axisym, int sgs_type, double sgs_floor, double sgs_const, viscositySpongeData vsd); Equations GetEquationSystem() { return eqSystem; } - void ComputeConvectiveFluxes(const Vector &state, DenseMatrix &flux); - MFEM_HOST_DEVICE void ComputeConvectiveFluxes(const double *state, double *flux) const; + void ComputeConvectiveFluxes(const Vector& state, DenseMatrix& flux); + MFEM_HOST_DEVICE void ComputeConvectiveFluxes(const double* state, double* flux) const; - void ComputeViscousFluxes(const Vector &state, const DenseMatrix &gradUp, Vector transip, double delta, - double distance, DenseMatrix &flux); + void ComputeViscousFluxes(const Vector& state, const DenseMatrix& gradUp, Vector transip, double delta, + double distance, DenseMatrix& flux); - MFEM_HOST_DEVICE void ComputeViscousFluxes(const double *state, const double *gradUp, double *transip, double delta, - double distance, double *flux); + MFEM_HOST_DEVICE void ComputeViscousFluxes(const double* state, const double* gradUp, double* transip, double delta, + double distance, double* flux); - void sgsSmag(const Vector &state, const DenseMatrix &gradUp, double delta, double &mu_sgs); - MFEM_HOST_DEVICE void sgsSmag(const double *state, const double *gradUp, double delta, double &mu_sgs); - void sgsSigma(const Vector &state, const DenseMatrix &gradUp, double delta, double &mu_sgs); - MFEM_HOST_DEVICE void sgsSigma(const double *state, const double *gradUp, double delta, double &mu_sgs); + void sgsSmag(const Vector& state, const DenseMatrix& gradUp, double delta, double& mu_sgs); + MFEM_HOST_DEVICE void sgsSmag(const double* state, const double* gradUp, double delta, double& mu_sgs); + void sgsSigma(const Vector& state, const DenseMatrix& gradUp, double delta, double& mu_sgs); + MFEM_HOST_DEVICE void sgsSigma(const double* state, const double* gradUp, double delta, double& mu_sgs); - MFEM_HOST_DEVICE void viscSpongePlanar(double *x, double &wgt); + MFEM_HOST_DEVICE void viscSpongePlanar(double* x, double& wgt); // Compute viscous flux with prescribed boundary flux. - void ComputeBdrViscousFluxes(const Vector &state, const DenseMatrix &gradUp, Vector transip, double delta, - double distance, const BoundaryViscousFluxData &bcFlux, Vector &normalFlux); + void ComputeBdrViscousFluxes(const Vector& state, const DenseMatrix& gradUp, Vector transip, double delta, + double distance, const BoundaryViscousFluxData& bcFlux, Vector& normalFlux); - MFEM_HOST_DEVICE void ComputeBdrViscousFluxes(const double *state, const double *gradUp, double *transip, - double delta, double distance, const BoundaryViscousFluxData &bcFlux, - double *normalFlux); + MFEM_HOST_DEVICE void ComputeBdrViscousFluxes(const double* state, const double* gradUp, double* transip, + double delta, double distance, const BoundaryViscousFluxData& bcFlux, + double* normalFlux); MFEM_HOST_DEVICE bool isAxisymmetric() const { return axisymmetric_; } diff --git a/src/forcing_terms.cpp b/src/forcing_terms.cpp index c7f1603c..c39cddb8 100644 --- a/src/forcing_terms.cpp +++ b/src/forcing_terms.cpp @@ -33,10 +33,10 @@ #include -ForcingTerms::ForcingTerms(const int &_dim, const int &_num_equation, const int &_order, const int &_intRuleType, - IntegrationRules *_intRules, ParFiniteElementSpace *_vfes, ParGridFunction *U, - ParGridFunction *_Up, ParGridFunction *_gradUp, - const precomputedIntegrationData &gpu_precomputed_data, bool axisym) +ForcingTerms::ForcingTerms(const int& _dim, const int& _num_equation, const int& _order, const int& _intRuleType, + IntegrationRules* _intRules, ParFiniteElementSpace* _vfes, ParGridFunction* U, + ParGridFunction* _Up, ParGridFunction* _gradUp, + const precomputedIntegrationData& gpu_precomputed_data, bool axisym) : dim(_dim), nvel(axisym ? 3 : _dim), num_equation(_num_equation), @@ -49,7 +49,7 @@ ForcingTerms::ForcingTerms(const int &_dim, const int &_num_equation, const int Up_(_Up), gradUp_(_gradUp), gpu_precomputed_data_(gpu_precomputed_data) { - const elementIndexingData &elem_data = gpu_precomputed_data_.element_indexing_data; + const elementIndexingData& elem_data = gpu_precomputed_data_.element_indexing_data; h_num_elems_of_type = elem_data.num_elems_of_type.HostRead(); // b = new ParGridFunction(vfes); @@ -85,12 +85,12 @@ ForcingTerms::~ForcingTerms() { // } // TODO(kevin): gpu capability. -ConstantPressureGradient::ConstantPressureGradient(const int &_dim, const int &_num_equation, const int &_order, - const int &_intRuleType, IntegrationRules *_intRules, - ParFiniteElementSpace *_vfes, ParGridFunction *U, - ParGridFunction *_Up, ParGridFunction *_gradUp, - const precomputedIntegrationData &gpu_precomputed_data, - RunConfiguration &_config, GasMixture *mixture) +ConstantPressureGradient::ConstantPressureGradient(const int& _dim, const int& _num_equation, const int& _order, + const int& _intRuleType, IntegrationRules* _intRules, + ParFiniteElementSpace* _vfes, ParGridFunction* U, + ParGridFunction* _Up, ParGridFunction* _gradUp, + const precomputedIntegrationData& gpu_precomputed_data, + RunConfiguration& _config, GasMixture* mixture) : ForcingTerms(_dim, _num_equation, _order, _intRuleType, _intRules, _vfes, U, _Up, _gradUp, gpu_precomputed_data, _config.isAxisymmetric()), mixture_(mixture) { @@ -102,9 +102,9 @@ ConstantPressureGradient::ConstantPressureGradient(const int &_dim, const int &_ pressGrad.UseDevice(true); pressGrad.SetSize(3); pressGrad = 0.; - double *h_pressGrad = pressGrad.HostWrite(); + double* h_pressGrad = pressGrad.HostWrite(); { - double *data = _config.GetImposedPressureGradient(); + double* data = _config.GetImposedPressureGradient(); for (int jj = 0; jj < 3; jj++) h_pressGrad[jj] = data[jj]; } pressGrad.ReadWrite(); @@ -112,9 +112,9 @@ ConstantPressureGradient::ConstantPressureGradient(const int &_dim, const int &_ // ConstantPressureGradient::~ConstantPressureGradient() { delete mixture; } -void ConstantPressureGradient::updateTerms(Vector &in) { +void ConstantPressureGradient::updateTerms(Vector& in) { #ifdef _GPU_ - const elementIndexingData &elem_data = gpu_precomputed_data_.element_indexing_data; + const elementIndexingData& elem_data = gpu_precomputed_data_.element_indexing_data; auto h_elem_dof_number = elem_data.dof_number.HostRead(); @@ -132,9 +132,9 @@ void ConstantPressureGradient::updateTerms(Vector &in) { int numElem = vfes->GetNE(); int dof = vfes->GetNDofs(); - double *data = in.GetData(); - const double *dataUp = Up_->GetData(); - const double *dataGradUp = gradUp_->GetData(); + double* data = in.GetData(); + const double* dataUp = Up_->GetData(); + const double* dataGradUp = gradUp_->GetData(); Vector gradUpk; // interpolated gradient gradUpk.SetSize(num_equation * dim); @@ -142,7 +142,7 @@ void ConstantPressureGradient::updateTerms(Vector &in) { upk.SetSize(num_equation); for (int el = 0; el < numElem; el++) { - const FiniteElement *elem = vfes->GetFE(el); + const FiniteElement* elem = vfes->GetFE(el); // ElementTransformation *Tr = vfes->GetElementTransformation(el); const int dof_elem = elem->GetDof(); @@ -173,16 +173,16 @@ void ConstantPressureGradient::updateTerms(Vector &in) { #ifdef _GPU_ void ConstantPressureGradient::updateTerms_gpu(const int numElems, const int offsetElems, const int elDof, - const int totalDofs, Vector &pressGrad, Vector &in, const Vector &Up, - Vector &gradUp, const int num_equation, const int dim, - const precomputedIntegrationData &gpu_precomputed_data) { - const double *d_pressGrad = pressGrad.Read(); - double *d_in = in.ReadWrite(); + const int totalDofs, Vector& pressGrad, Vector& in, const Vector& Up, + Vector& gradUp, const int num_equation, const int dim, + const precomputedIntegrationData& gpu_precomputed_data) { + const double* d_pressGrad = pressGrad.Read(); + double* d_in = in.ReadWrite(); - const double *d_Up = Up.Read(); - double *d_gradUp = gradUp.ReadWrite(); + const double* d_Up = Up.Read(); + double* d_gradUp = gradUp.ReadWrite(); - const elementIndexingData &elem_data = gpu_precomputed_data.element_indexing_data; + const elementIndexingData& elem_data = gpu_precomputed_data.element_indexing_data; auto d_elem_dof_off = elem_data.dof_offset.Read(); auto d_elem_dofs_list = elem_data.dofs_list.Read(); @@ -235,13 +235,13 @@ void ConstantPressureGradient::updateTerms_gpu(const int numElems, const int off #endif -AxisymmetricSource::AxisymmetricSource(const int &_dim, const int &_num_equation, const int &_order, - GasMixture *_mixture, TransportProperties *_transport, - const Equations &_eqSystem, const int &_intRuleType, IntegrationRules *_intRules, - ParFiniteElementSpace *_vfes, ParGridFunction *U, ParGridFunction *_Up, - ParGridFunction *_gradUp, ParGridFunction *spaceVaryViscMult, - const precomputedIntegrationData &gpu_precomputed_data, - RunConfiguration &_config, ParGridFunction *distance) +AxisymmetricSource::AxisymmetricSource(const int& _dim, const int& _num_equation, const int& _order, + GasMixture* _mixture, TransportProperties* _transport, + const Equations& _eqSystem, const int& _intRuleType, IntegrationRules* _intRules, + ParFiniteElementSpace* _vfes, ParGridFunction* U, ParGridFunction* _Up, + ParGridFunction* _gradUp, ParGridFunction* spaceVaryViscMult, + const precomputedIntegrationData& gpu_precomputed_data, + RunConfiguration& _config, ParGridFunction* distance) : ForcingTerms(_dim, _num_equation, _order, _intRuleType, _intRules, _vfes, U, _Up, _gradUp, gpu_precomputed_data, _config.isAxisymmetric()), mixture(_mixture), @@ -252,26 +252,26 @@ AxisymmetricSource::AxisymmetricSource(const int &_dim, const int &_num_equation // no-op } -void AxisymmetricSource::updateTerms(Vector &in) { +void AxisymmetricSource::updateTerms(Vector& in) { assert(dim == 2); assert(nvel == 3); - double *d_y = in.ReadWrite(); - const double *d_U = U_->Read(); - const double *d_Up = Up_->Read(); - const double *d_gradUp = gradUp_->Read(); + double* d_y = in.ReadWrite(); + const double* d_U = U_->Read(); + const double* d_Up = Up_->Read(); + const double* d_gradUp = gradUp_->Read(); int dof = vfes->GetNDofs(); // get coords - const FiniteElementCollection *fec = vfes->FEColl(); - ParMesh *mesh = vfes->GetParMesh(); + const FiniteElementCollection* fec = vfes->FEColl(); + ParMesh* mesh = vfes->GetParMesh(); ParFiniteElementSpace dfes(mesh, fec, dim, Ordering::byNODES); ParGridFunction coordsDof(&dfes); mesh->GetNodes(coordsDof); auto d_coords = coordsDof.Read(); - const double *alpha; + const double* alpha; if (space_vary_viscosity_mult_ != NULL) { alpha = space_vary_viscosity_mult_->Read(); } else { @@ -279,7 +279,7 @@ void AxisymmetricSource::updateTerms(Vector &in) { } // and distance - const double *d_dist; + const double* d_dist; if (distance_ != NULL) { d_dist = distance_->Read(); } else { @@ -291,8 +291,8 @@ void AxisymmetricSource::updateTerms(Vector &in) { const Equations eqSys = eqSystem; - GasMixture *d_mix = mixture; - TransportProperties *d_trans = transport_; + GasMixture* d_mix = mixture; + TransportProperties* d_trans = transport_; MFEM_FORALL(n, dof, { double U[gpudata::MAXEQUATIONS]; @@ -427,11 +427,11 @@ void AxisymmetricSource::updateTerms(Vector &in) { // } } -JouleHeating::JouleHeating(const int &_dim, const int &_num_equation, const int &_order, GasMixture *_mixture, - const Equations &_eqSystem, const int &_intRuleType, IntegrationRules *_intRules, - ParFiniteElementSpace *_vfes, ParGridFunction *U, ParGridFunction *_Up, - ParGridFunction *_gradUp, const precomputedIntegrationData &gpu_precomputed_data, - RunConfiguration &_config, ParGridFunction *jh_) +JouleHeating::JouleHeating(const int& _dim, const int& _num_equation, const int& _order, GasMixture* _mixture, + const Equations& _eqSystem, const int& _intRuleType, IntegrationRules* _intRules, + ParFiniteElementSpace* _vfes, ParGridFunction* U, ParGridFunction* _Up, + ParGridFunction* _gradUp, const precomputedIntegrationData& gpu_precomputed_data, + RunConfiguration& _config, ParGridFunction* jh_) : ForcingTerms(_dim, _num_equation, _order, _intRuleType, _intRules, _vfes, U, _Up, _gradUp, gpu_precomputed_data, _config.isAxisymmetric()), eqSystem(_eqSystem), @@ -440,15 +440,15 @@ JouleHeating::JouleHeating(const int &_dim, const int &_num_equation, const int // no-op } -void JouleHeating::updateTerms(Vector &in) { +void JouleHeating::updateTerms(Vector& in) { assert(nvel == 3); const int dof = vfes->GetNDofs(); const int nvel_ = nvel; const int neqn = num_equation; - double *data = in.ReadWrite(); - const double *jh = joule_heating_->Read(); + double* data = in.ReadWrite(); + const double* jh = joule_heating_->Read(); // NB: This GasMixture is valid on the HOST! const bool twoT = mixture_->IsTwoTemperature(); @@ -472,10 +472,10 @@ void JouleHeating::updateTerms(Vector &in) { } // TODO(kevin): implment gpu -SpongeZone::SpongeZone(const int &_dim, const int &_num_equation, const int &_order, const int &_intRuleType, - Fluxes *_fluxClass, GasMixture *_mixture, IntegrationRules *_intRules, - ParFiniteElementSpace *_vfes, ParGridFunction *U, ParGridFunction *_Up, ParGridFunction *_gradUp, - const precomputedIntegrationData &gpu_precomputed_data, RunConfiguration &_config, const int sz) +SpongeZone::SpongeZone(const int& _dim, const int& _num_equation, const int& _order, const int& _intRuleType, + Fluxes* _fluxClass, GasMixture* _mixture, IntegrationRules* _intRules, + ParFiniteElementSpace* _vfes, ParGridFunction* U, ParGridFunction* _Up, ParGridFunction* _gradUp, + const precomputedIntegrationData& gpu_precomputed_data, RunConfiguration& _config, const int sz) : ForcingTerms(_dim, _num_equation, _order, _intRuleType, _intRules, _vfes, U, _Up, _gradUp, gpu_precomputed_data, _config.isAxisymmetric()), fluxes(_fluxClass), @@ -534,13 +534,13 @@ SpongeZone::SpongeZone(const int &_dim, const int &_num_equation, const int &_or meanNormalFluxes.SetSize(num_equation + 1); - ParMesh *mesh = vfes->GetParMesh(); - const FiniteElementCollection *fec = vfes->FEColl(); + ParMesh* mesh = vfes->GetParMesh(); + const FiniteElementCollection* fec = vfes->FEColl(); ParFiniteElementSpace dfes(mesh, fec, dim, Ordering::byNODES); ParFiniteElementSpace fes(mesh, fec); sigma = new ParGridFunction(&fes); - double *hSigma = sigma->HostWrite(); + double* hSigma = sigma->HostWrite(); ParGridFunction coords(&dfes); mesh->GetNodes(coords); @@ -628,16 +628,16 @@ SpongeZone::SpongeZone(const int &_dim, const int &_num_equation, const int &_or SpongeZone::~SpongeZone() { delete sigma; } -void SpongeZone::updateTerms(Vector &in) { +void SpongeZone::updateTerms(Vector& in) { if (szData.szSolType == SpongeZoneSolution::MIXEDOUT) computeMixedOutValues(); addSpongeZoneForcing(in); } -void SpongeZone::addSpongeZoneForcing(Vector &in) { - const double *ds = sigma->HostRead(); - double *dataIn = in.HostReadWrite(); - const double *dataUp = Up_->HostRead(); +void SpongeZone::addSpongeZoneForcing(Vector& in) { + const double* ds = sigma->HostRead(); + double* dataIn = in.HostReadWrite(); + const double* dataUp = Up_->HostRead(); int nnodes = vfes->GetNDofs(); @@ -712,7 +712,7 @@ void SpongeZone::addSpongeZoneForcing(Vector &in) { // TODO(kevin): change to conserved variables. void SpongeZone::computeMixedOutValues() { int nnodes = vfes->GetNDofs(); - const double *dataUp = Up_->HostRead(); + const double* dataUp = Up_->HostRead(); // double gamma = mixture->GetSpecificHeatRatio(); // compute mean normal fluxes @@ -765,10 +765,10 @@ void SpongeZone::computeMixedOutValues() { // mixture->GetConservativesFromPrimitives(Up, targetU); } -PassiveScalar::PassiveScalar(const int &_dim, const int &_num_equation, const int &_order, const int &_intRuleType, - IntegrationRules *_intRules, ParFiniteElementSpace *_vfes, GasMixture *_mixture, - ParGridFunction *U, ParGridFunction *_Up, ParGridFunction *_gradUp, - const precomputedIntegrationData &gpu_precomputed_data, RunConfiguration &_config) +PassiveScalar::PassiveScalar(const int& _dim, const int& _num_equation, const int& _order, const int& _intRuleType, + IntegrationRules* _intRules, ParFiniteElementSpace* _vfes, GasMixture* _mixture, + ParGridFunction* U, ParGridFunction* _Up, ParGridFunction* _gradUp, + const precomputedIntegrationData& gpu_precomputed_data, RunConfiguration& _config) : ForcingTerms(_dim, _num_equation, _order, _intRuleType, _intRules, _vfes, U, _Up, _gradUp, gpu_precomputed_data, _config.isAxisymmetric()), mixture(_mixture) { @@ -817,7 +817,7 @@ PassiveScalar::~PassiveScalar() { for (int i = 0; i < psData_.Size(); i++) delete psData_[i]; } -void PassiveScalar::updateTerms(Vector &in) { +void PassiveScalar::updateTerms(Vector& in) { #ifdef _GPU_ updateTerms_gpu(in, Up_, psData_, vfes->GetNDofs(), num_equation); #else @@ -841,11 +841,11 @@ void PassiveScalar::updateTerms(Vector &in) { #endif } -void PassiveScalar::updateTerms_gpu(Vector &in, ParGridFunction *Up, Array &psData, - const int nnode, const int num_equation) { +void PassiveScalar::updateTerms_gpu(Vector& in, ParGridFunction* Up, Array& psData, const int nnode, + const int num_equation) { #ifdef _GPU_ - double *d_in = in.ReadWrite(); - const double *d_Up = Up_->Read(); + double* d_in = in.ReadWrite(); + const double* d_Up = Up_->Read(); double Z = 0.; double radius = 1.; @@ -855,7 +855,7 @@ void PassiveScalar::updateTerms_gpu(Vector &in, ParGridFunction *Up, Arrayvalue; radius = psData[i]->radius; - const int *d_nodes = psData[i]->nodes.Read(); + const int* d_nodes = psData[i]->nodes.Read(); const int size = psData[i]->nodes.Size(); MFEM_FORALL(n, size, { @@ -870,11 +870,11 @@ void PassiveScalar::updateTerms_gpu(Vector &in, ParGridFunction *Up, ArrayGetNDofs(); @@ -954,10 +954,10 @@ void HeatSource::updateTerms_gpu(mfem::Vector &in) { } #ifdef HAVE_MASA -MASA_forcings::MASA_forcings(const int &_dim, const int &_num_equation, const int &_order, const int &_intRuleType, - IntegrationRules *_intRules, ParFiniteElementSpace *_vfes, ParGridFunction *U, - ParGridFunction *_Up, ParGridFunction *_gradUp, - const precomputedIntegrationData &gpu_precomputed_data, RunConfiguration &_config) +MASA_forcings::MASA_forcings(const int& _dim, const int& _num_equation, const int& _order, const int& _intRuleType, + IntegrationRules* _intRules, ParFiniteElementSpace* _vfes, ParGridFunction* U, + ParGridFunction* _Up, ParGridFunction* _gradUp, + const precomputedIntegrationData& gpu_precomputed_data, RunConfiguration& _config) : ForcingTerms(_dim, _num_equation, _order, _intRuleType, _intRules, _vfes, U, _Up, _gradUp, gpu_precomputed_data, _config.isAxisymmetric()) { // NOTE: This has been taken care of by M2ulPhyS.masaHandler_. @@ -976,22 +976,22 @@ MASA_forcings::MASA_forcings(const int &_dim, const int &_num_equation, const in } } -void MASA_forcings::updateTerms(Vector &in) { +void MASA_forcings::updateTerms(Vector& in) { int numElem = vfes->GetNE(); int dof = vfes->GetNDofs(); - double *data = in.HostReadWrite(); + double* data = in.HostReadWrite(); // const double *dataUp = Up->GetData(); // get coords - const FiniteElementCollection *fec = vfes->FEColl(); - ParMesh *mesh = vfes->GetParMesh(); + const FiniteElementCollection* fec = vfes->FEColl(); + ParMesh* mesh = vfes->GetParMesh(); ParFiniteElementSpace dfes(mesh, fec, dim, Ordering::byNODES); ParGridFunction coordsDof(&dfes); mesh->GetNodes(coordsDof); for (int el = 0; el < numElem; el++) { - const FiniteElement *elem = vfes->GetFE(el); + const FiniteElement* elem = vfes->GetFE(el); // ElementTransformation *Tr = vfes->GetElementTransformation(el); const int dof_elem = elem->GetDof(); diff --git a/src/forcing_terms.hpp b/src/forcing_terms.hpp index 5ac3b7b2..0b6b49ae 100644 --- a/src/forcing_terms.hpp +++ b/src/forcing_terms.hpp @@ -55,32 +55,32 @@ class ForcingTerms { protected: double time; - const int &dim; + const int& dim; const int nvel; - const int &num_equation; + const int& num_equation; const bool axisymmetric_; - const int ℴ - const int &intRuleType; - IntegrationRules *intRules; - ParFiniteElementSpace *vfes; - ParGridFunction *U_; - ParGridFunction *Up_; - ParGridFunction *gradUp_; + const int& order; + const int& intRuleType; + IntegrationRules* intRules; + ParFiniteElementSpace* vfes; + ParGridFunction* U_; + ParGridFunction* Up_; + ParGridFunction* gradUp_; - const precomputedIntegrationData &gpu_precomputed_data_; - const int *h_num_elems_of_type; + const precomputedIntegrationData& gpu_precomputed_data_; + const int* h_num_elems_of_type; // added term // ParGridFunction *b; public: - ForcingTerms(const int &_dim, const int &_num_equation, const int &_order, const int &_intRuleType, - IntegrationRules *_intRules, ParFiniteElementSpace *_vfes, ParGridFunction *U, ParGridFunction *_Up, - ParGridFunction *_gradUp, const precomputedIntegrationData &gpu_precomputed_data, bool axisym); + ForcingTerms(const int& _dim, const int& _num_equation, const int& _order, const int& _intRuleType, + IntegrationRules* _intRules, ParFiniteElementSpace* _vfes, ParGridFunction* U, ParGridFunction* _Up, + ParGridFunction* _gradUp, const precomputedIntegrationData& gpu_precomputed_data, bool axisym); virtual ~ForcingTerms(); void setTime(double _time) { time = _time; } - virtual void updateTerms(Vector &in) = 0; + virtual void updateTerms(Vector& in) = 0; // virtual void addForcingIntegrals(Vector &in); }; @@ -89,74 +89,74 @@ class ConstantPressureGradient : public ForcingTerms { private: // RunConfiguration &config; Vector pressGrad; - GasMixture *mixture_; + GasMixture* mixture_; public: - ConstantPressureGradient(const int &_dim, const int &_num_equation, const int &_order, const int &_intRuleType, - IntegrationRules *_intRules, ParFiniteElementSpace *_vfes, ParGridFunction *U, - ParGridFunction *_Up, ParGridFunction *_gradUp, - const precomputedIntegrationData &gpu_precomputed_data, RunConfiguration &_config, - GasMixture *mixture); + ConstantPressureGradient(const int& _dim, const int& _num_equation, const int& _order, const int& _intRuleType, + IntegrationRules* _intRules, ParFiniteElementSpace* _vfes, ParGridFunction* U, + ParGridFunction* _Up, ParGridFunction* _gradUp, + const precomputedIntegrationData& gpu_precomputed_data, RunConfiguration& _config, + GasMixture* mixture); virtual ~ConstantPressureGradient() {} // Terms do not need updating - virtual void updateTerms(Vector &in); + virtual void updateTerms(Vector& in); // GPU functions #ifdef _GPU_ static void updateTerms_gpu(const int numElems, const int offsetElems, const int elDof, const int totalDofs, - Vector &pressGrad, Vector &in, const Vector &Up, Vector &gradUp, const int num_equation, - const int dim, const precomputedIntegrationData &gpu_precomputed_data); + Vector& pressGrad, Vector& in, const Vector& Up, Vector& gradUp, const int num_equation, + const int dim, const precomputedIntegrationData& gpu_precomputed_data); #endif }; class AxisymmetricSource : public ForcingTerms { private: - GasMixture *mixture; - TransportProperties *transport_; - const Equations &eqSystem; - ParGridFunction *space_vary_viscosity_mult_; - ParGridFunction *distance_; + GasMixture* mixture; + TransportProperties* transport_; + const Equations& eqSystem; + ParGridFunction* space_vary_viscosity_mult_; + ParGridFunction* distance_; public: - AxisymmetricSource(const int &_dim, const int &_num_equation, const int &_order, GasMixture *_mixture, - TransportProperties *_transport, const Equations &_eqSystem, const int &_intRuleType, - IntegrationRules *_intRules, ParFiniteElementSpace *_vfes, ParGridFunction *U, - ParGridFunction *_Up, ParGridFunction *_gradUp, ParGridFunction *spaceVaryViscMult, - const precomputedIntegrationData &gpu_precomputed_data, RunConfiguration &_config, - ParGridFunction *distance); + AxisymmetricSource(const int& _dim, const int& _num_equation, const int& _order, GasMixture* _mixture, + TransportProperties* _transport, const Equations& _eqSystem, const int& _intRuleType, + IntegrationRules* _intRules, ParFiniteElementSpace* _vfes, ParGridFunction* U, + ParGridFunction* _Up, ParGridFunction* _gradUp, ParGridFunction* spaceVaryViscMult, + const precomputedIntegrationData& gpu_precomputed_data, RunConfiguration& _config, + ParGridFunction* distance); virtual ~AxisymmetricSource() {} - virtual void updateTerms(Vector &in); + virtual void updateTerms(Vector& in); }; class JouleHeating : public ForcingTerms { private: - const Equations &eqSystem; - ParGridFunction *joule_heating_; - GasMixture *mixture_; + const Equations& eqSystem; + ParGridFunction* joule_heating_; + GasMixture* mixture_; public: - JouleHeating(const int &_dim, const int &_num_equation, const int &_order, GasMixture *_mixture, - const Equations &_eqSystem, const int &_intRuleType, IntegrationRules *_intRules, - ParFiniteElementSpace *_vfes, ParGridFunction *U, ParGridFunction *_Up, ParGridFunction *_gradUp, - const precomputedIntegrationData &gpu_precomputed_data, RunConfiguration &_config, ParGridFunction *jh_); + JouleHeating(const int& _dim, const int& _num_equation, const int& _order, GasMixture* _mixture, + const Equations& _eqSystem, const int& _intRuleType, IntegrationRules* _intRules, + ParFiniteElementSpace* _vfes, ParGridFunction* U, ParGridFunction* _Up, ParGridFunction* _gradUp, + const precomputedIntegrationData& gpu_precomputed_data, RunConfiguration& _config, ParGridFunction* jh_); virtual ~JouleHeating() {} - virtual void updateTerms(Vector &in); + virtual void updateTerms(Vector& in); }; class SpongeZone : public ForcingTerms { private: - Fluxes *fluxes; - GasMixture *mixture; + Fluxes* fluxes; + GasMixture* mixture; - SpongeZoneData &szData; + SpongeZoneData& szData; Vector targetU; Array nodesInMixedOutPlane; - ParGridFunction *sigma; // linearly varying factor + ParGridFunction* sigma; // linearly varying factor Vector radialNormal; Array nodesInAnnulus; @@ -165,35 +165,35 @@ class SpongeZone : public ForcingTerms { bool singleTemperature_; void computeMixedOutValues(); - void addSpongeZoneForcing(Vector &in); + void addSpongeZoneForcing(Vector& in); public: - SpongeZone(const int &_dim, const int &_num_equation, const int &_order, const int &_intRuleType, Fluxes *_fluxClass, - GasMixture *_mixture, IntegrationRules *_intRules, ParFiniteElementSpace *_vfes, ParGridFunction *U, - ParGridFunction *_Up, ParGridFunction *_gradUp, const precomputedIntegrationData &gpu_precomputed_data, - RunConfiguration &_config, const int sz); + SpongeZone(const int& _dim, const int& _num_equation, const int& _order, const int& _intRuleType, Fluxes* _fluxClass, + GasMixture* _mixture, IntegrationRules* _intRules, ParFiniteElementSpace* _vfes, ParGridFunction* U, + ParGridFunction* _Up, ParGridFunction* _gradUp, const precomputedIntegrationData& gpu_precomputed_data, + RunConfiguration& _config, const int sz); virtual ~SpongeZone(); - virtual void updateTerms(Vector &in); + virtual void updateTerms(Vector& in); }; // Forcing that adds a passive scalar class PassiveScalar : public ForcingTerms { private: - GasMixture *mixture; + GasMixture* mixture; - Array psData_; + Array psData_; public: - PassiveScalar(const int &_dim, const int &_num_equation, const int &_order, const int &_intRuleType, - IntegrationRules *_intRules, ParFiniteElementSpace *_vfes, GasMixture *_mixture, ParGridFunction *U, - ParGridFunction *_Up, ParGridFunction *_gradUp, const precomputedIntegrationData &gpu_precomputed_data, - RunConfiguration &_config); + PassiveScalar(const int& _dim, const int& _num_equation, const int& _order, const int& _intRuleType, + IntegrationRules* _intRules, ParFiniteElementSpace* _vfes, GasMixture* _mixture, ParGridFunction* U, + ParGridFunction* _Up, ParGridFunction* _gradUp, const precomputedIntegrationData& gpu_precomputed_data, + RunConfiguration& _config); // Terms do not need updating - virtual void updateTerms(Vector &in); + virtual void updateTerms(Vector& in); - void updateTerms_gpu(Vector &in, ParGridFunction *Up, Array &psData, const int nnode, + void updateTerms_gpu(Vector& in, ParGridFunction* Up, Array& psData, const int nnode, const int num_equation); virtual ~PassiveScalar(); @@ -201,37 +201,37 @@ class PassiveScalar : public ForcingTerms { class HeatSource : public ForcingTerms { private: - GasMixture *mixture_; + GasMixture* mixture_; - heatSourceData &heatSource_; + heatSourceData& heatSource_; Array nodeList_; public: - HeatSource(const int &_dim, const int &_num_equation, const int &_order, const int &_intRuleType, - heatSourceData &heatSource, GasMixture *_mixture, IntegrationRules *_intRules, - ParFiniteElementSpace *_vfes, ParGridFunction *U, ParGridFunction *_Up, ParGridFunction *_gradUp, - const precomputedIntegrationData &gpu_precomputed_data, RunConfiguration &_config); + HeatSource(const int& _dim, const int& _num_equation, const int& _order, const int& _intRuleType, + heatSourceData& heatSource, GasMixture* _mixture, IntegrationRules* _intRules, + ParFiniteElementSpace* _vfes, ParGridFunction* U, ParGridFunction* _Up, ParGridFunction* _gradUp, + const precomputedIntegrationData& gpu_precomputed_data, RunConfiguration& _config); virtual ~HeatSource() {} - virtual void updateTerms(Vector &in); + virtual void updateTerms(Vector& in); - void updateTerms_gpu(Vector &in); + void updateTerms_gpu(Vector& in); }; #ifdef HAVE_MASA // Manufactured Solution using MASA class MASA_forcings : public ForcingTerms { private: - void (*evaluateForcing_)(const Vector &, const double, Array &) = 0; + void (*evaluateForcing_)(const Vector&, const double, Array&) = 0; public: - MASA_forcings(const int &_dim, const int &_num_equation, const int &_order, const int &_intRuleType, - IntegrationRules *_intRules, ParFiniteElementSpace *_vfes, ParGridFunction *U, ParGridFunction *_Up, - ParGridFunction *_gradUp, const precomputedIntegrationData &gpu_precomputed_data, - RunConfiguration &_config); + MASA_forcings(const int& _dim, const int& _num_equation, const int& _order, const int& _intRuleType, + IntegrationRules* _intRules, ParFiniteElementSpace* _vfes, ParGridFunction* U, ParGridFunction* _Up, + ParGridFunction* _gradUp, const precomputedIntegrationData& gpu_precomputed_data, + RunConfiguration& _config); - virtual void updateTerms(Vector &in); + virtual void updateTerms(Vector& in); }; #endif // HAVE_MASA diff --git a/src/gas_transport.cpp b/src/gas_transport.cpp index 89e8200f..8ca7fd6c 100644 --- a/src/gas_transport.cpp +++ b/src/gas_transport.cpp @@ -36,10 +36,10 @@ //////// Gas Minimal Transport (ternary mixture) ////////////////////////////////////////////////////// -GasMinimalTransport::GasMinimalTransport(GasMixture *_mixture, RunConfiguration &_runfile) +GasMinimalTransport::GasMinimalTransport(GasMixture* _mixture, RunConfiguration& _runfile) : GasMinimalTransport(_mixture, _runfile.gasTransportInput) {} -MFEM_HOST_DEVICE GasMinimalTransport::GasMinimalTransport(GasMixture *_mixture, const GasTransportInput &inputs) +MFEM_HOST_DEVICE GasMinimalTransport::GasMinimalTransport(GasMixture* _mixture, const GasTransportInput& inputs) : MolecularTransport(_mixture) { viscosityFactor_ = 5. / 16. * sqrt(PI_ * kB_); kOverEtaFactor_ = 15. / 4. * kB_; @@ -148,7 +148,7 @@ MFEM_HOST_DEVICE GasMinimalTransport::GasMinimalTransport(GasMixture *_mixture, setArtificialMultipliers(inputs); } -MFEM_HOST_DEVICE GasMinimalTransport::GasMinimalTransport(GasMixture *_mixture) : MolecularTransport(_mixture) { +MFEM_HOST_DEVICE GasMinimalTransport::GasMinimalTransport(GasMixture* _mixture) : MolecularTransport(_mixture) { viscosityFactor_ = 5. / 16. * sqrt(PI_ * kB_); kOverEtaFactor_ = 15. / 4. * kB_; diffusivityFactor_ = 3. / 16. * sqrt(2.0 * PI_ * kB_) / AVOGADRONUMBER; @@ -156,7 +156,7 @@ MFEM_HOST_DEVICE GasMinimalTransport::GasMinimalTransport(GasMixture *_mixture) } // void GasMinimalTransport::computeEffectiveMass(const Vector &mw, DenseSymmetricMatrix &muw) { -MFEM_HOST_DEVICE void GasMinimalTransport::computeEffectiveMass(const double *mw, double *muw) { +MFEM_HOST_DEVICE void GasMinimalTransport::computeEffectiveMass(const double* mw, double* muw) { // muw.SetSize(numSpecies); // muw = 0.0; @@ -168,7 +168,7 @@ MFEM_HOST_DEVICE void GasMinimalTransport::computeEffectiveMass(const double *mw } } -MFEM_HOST_DEVICE void GasMinimalTransport::setArtificialMultipliers(const GasTransportInput &inputs) { +MFEM_HOST_DEVICE void GasMinimalTransport::setArtificialMultipliers(const GasTransportInput& inputs) { multiply_ = inputs.multiply; if (multiply_) { for (int t = 0; t < FluxTrns::NUM_FLUX_TRANS; t++) fluxTrnsMultiplier_[t] = inputs.fluxTrnsMultiplier[t]; @@ -178,12 +178,12 @@ MFEM_HOST_DEVICE void GasMinimalTransport::setArtificialMultipliers(const GasTra } } -collisionInputs GasMinimalTransport::computeCollisionInputs(const Vector &primitive, const Vector &n_sp) { +collisionInputs GasMinimalTransport::computeCollisionInputs(const Vector& primitive, const Vector& n_sp) { return computeCollisionInputs(&primitive[0], &n_sp[0]); } -MFEM_HOST_DEVICE collisionInputs GasMinimalTransport::computeCollisionInputs(const double *primitive, - const double *n_sp) { +MFEM_HOST_DEVICE collisionInputs GasMinimalTransport::computeCollisionInputs(const double* primitive, + const double* n_sp) { collisionInputs collInputs; collInputs.Te = (twoTemperature_) ? primitive[num_equation - 1] : primitive[nvel_ + 1]; collInputs.Th = primitive[nvel_ + 1]; @@ -203,9 +203,9 @@ MFEM_HOST_DEVICE collisionInputs GasMinimalTransport::computeCollisionInputs(con return collInputs; } -MFEM_HOST_DEVICE void GasMinimalTransport::ComputeFluxMolecularTransport(const double *state, const double *gradUp, - const double *Efield, double *transportBuffer, - double *diffusionVelocity) { +MFEM_HOST_DEVICE void GasMinimalTransport::ComputeFluxMolecularTransport(const double* state, const double* gradUp, + const double* Efield, double* transportBuffer, + double* diffusionVelocity) { // transportBuffer.SetSize(FluxTrns::NUM_FLUX_TRANS); for (int p = 0; p < FluxTrns::NUM_FLUX_TRANS; p++) transportBuffer[p] = 0.0; @@ -397,7 +397,7 @@ MFEM_HOST_DEVICE void GasMinimalTransport::ComputeFluxMolecularTransport(const d // std::cout << "max diff. vel: " << charSpeed << std::endl; } -MFEM_HOST_DEVICE double GasMinimalTransport::computeThirdOrderElectronThermalConductivity(const double *X_sp, +MFEM_HOST_DEVICE double GasMinimalTransport::computeThirdOrderElectronThermalConductivity(const double* X_sp, const double debyeLength, const double Te, const double nondimTe) { @@ -488,15 +488,15 @@ MFEM_HOST_DEVICE double GasMinimalTransport::computeThirdOrderElectronThermalCon } /**/ -void GasMinimalTransport::computeMixtureAverageDiffusivity(const Vector &state, const Vector &Efield, - Vector &diffusivity, bool unused) { +void GasMinimalTransport::computeMixtureAverageDiffusivity(const Vector& state, const Vector& Efield, + Vector& diffusivity, bool unused) { diffusivity.SetSize(3); diffusivity = 0.0; computeMixtureAverageDiffusivity(&state[0], &Efield[0], &diffusivity[0], unused); } -MFEM_HOST_DEVICE void GasMinimalTransport::computeMixtureAverageDiffusivity(const double *state, const double *Efield, - double *diffusivity, bool unused) { +MFEM_HOST_DEVICE void GasMinimalTransport::computeMixtureAverageDiffusivity(const double* state, const double* Efield, + double* diffusivity, bool unused) { double primitiveState[gpudata::MAXEQUATIONS]; mixture->GetPrimitivesFromConservatives(state, primitiveState); @@ -589,11 +589,11 @@ MFEM_HOST_DEVICE void GasMinimalTransport::computeMixtureAverageDiffusivity(cons } /**/ -MFEM_HOST_DEVICE void GasMinimalTransport::ComputeSourceMolecularTransport(const double *state, const double *Up, - const double *gradUp, const double *Efield, - double *globalTransport, - double *speciesTransport, - double *diffusionVelocity, double *n_sp) { +MFEM_HOST_DEVICE void GasMinimalTransport::ComputeSourceMolecularTransport(const double* state, const double* Up, + const double* gradUp, const double* Efield, + double* globalTransport, + double* speciesTransport, + double* diffusionVelocity, double* n_sp) { for (int p = 0; p < SrcTrns::NUM_SRC_TRANS; p++) globalTransport[p] = 0.0; for (int p = 0; p < SpeciesTrns::NUM_SPECIES_COEFFS; p++) for (int sp = 0; sp < numSpecies; sp++) speciesTransport[sp + p * numSpecies] = 0.0; @@ -772,8 +772,8 @@ MFEM_HOST_DEVICE void GasMinimalTransport::ComputeSourceMolecularTransport(const // std::cout << "max diff. vel: " << charSpeed << std::endl; } -MFEM_HOST_DEVICE void GasMinimalTransport::GetViscosities(const double *conserved, const double *primitive, - double *visc) { +MFEM_HOST_DEVICE void GasMinimalTransport::GetViscosities(const double* conserved, const double* primitive, + double* visc) { double n_sp[3], X_sp[3], Y_sp[3]; mixture->computeSpeciesPrimitives(conserved, X_sp, Y_sp, n_sp); // double nTotal = 0.0; @@ -871,10 +871,10 @@ collInputs); kappa[1] = computeThirdOrderElectronThermalConductivity(X_sp, collI //////// Gas Mixture Transport ////////////////////////////////////////////////////// -GasMixtureTransport::GasMixtureTransport(GasMixture *_mixture, RunConfiguration &_runfile) +GasMixtureTransport::GasMixtureTransport(GasMixture* _mixture, RunConfiguration& _runfile) : GasMixtureTransport(_mixture, _runfile.gasTransportInput) {} -MFEM_HOST_DEVICE GasMixtureTransport::GasMixtureTransport(GasMixture *_mixture, const GasTransportInput &inputs) +MFEM_HOST_DEVICE GasMixtureTransport::GasMixtureTransport(GasMixture* _mixture, const GasTransportInput& inputs) : GasMinimalTransport(_mixture) { electronIndex_ = inputs.electronIndex; neutralIndex_ = inputs.neutralIndex; @@ -898,7 +898,6 @@ MFEM_HOST_DEVICE GasMixtureTransport::GasMixtureTransport(GasMixture *_mixture, // Argon if (inputs.gas == GasType::Ar) { gasType_ = Ar; - // if (numSpecies > 6) { // printf("\nGas:Ar ternary transport only supports ternary mixture of Ar, Ar.+1, Ar_m, Ar_r, Ar_p, and E (%d)!\n", // numSpecies); @@ -1282,9 +1281,9 @@ MFEM_HOST_DEVICE double GasMixtureTransport::collisionIntegral(const int _spI, c return -1; } -MFEM_HOST_DEVICE void GasMixtureTransport::ComputeFluxMolecularTransport(const double *state, const double *gradUp, - const double *Efield, double *transportBuffer, - double *diffusionVelocity) { +MFEM_HOST_DEVICE void GasMixtureTransport::ComputeFluxMolecularTransport(const double* state, const double* gradUp, + const double* Efield, double* transportBuffer, + double* diffusionVelocity) { for (int p = 0; p < FluxTrns::NUM_FLUX_TRANS; p++) transportBuffer[p] = 0.0; double primitiveState[gpudata::MAXEQUATIONS]; @@ -1386,7 +1385,7 @@ MFEM_HOST_DEVICE void GasMixtureTransport::ComputeFluxMolecularTransport(const d } MFEM_HOST_DEVICE double GasMixtureTransport::computeThirdOrderElectronThermalConductivity( - const double *X_sp, const collisionInputs &collInputs) { + const double* X_sp, const collisionInputs& collInputs) { double Q2[3]; for (int r = 0; r < 3; r++) Q2[r] = collisionIntegral(electronIndex_, electronIndex_, 2, r + 2, collInputs); @@ -1406,11 +1405,11 @@ MFEM_HOST_DEVICE double GasMixtureTransport::computeThirdOrderElectronThermalCon (L11 - L12 * L12 / L22); } -MFEM_HOST_DEVICE void GasMixtureTransport::ComputeSourceMolecularTransport(const double *state, const double *Up, - const double *gradUp, const double *Efield, - double *globalTransport, - double *speciesTransport, - double *diffusionVelocity, double *n_sp) { +MFEM_HOST_DEVICE void GasMixtureTransport::ComputeSourceMolecularTransport(const double* state, const double* Up, + const double* gradUp, const double* Efield, + double* globalTransport, + double* speciesTransport, + double* diffusionVelocity, double* n_sp) { for (int p = 0; p < SrcTrns::NUM_SRC_TRANS; p++) globalTransport[p] = 0.0; for (int p = 0; p < SpeciesTrns::NUM_SPECIES_COEFFS; p++) for (int sp = 0; sp < numSpecies; sp++) speciesTransport[sp + p * numSpecies] = 0.0; @@ -1496,8 +1495,8 @@ MFEM_HOST_DEVICE void GasMixtureTransport::ComputeSourceMolecularTransport(const // std::cout << "max diff. vel: " << charSpeed << std::endl; } -MFEM_HOST_DEVICE void GasMixtureTransport::GetViscosities(const double *conserved, const double *primitive, - double *visc) { +MFEM_HOST_DEVICE void GasMixtureTransport::GetViscosities(const double* conserved, const double* primitive, + double* visc) { if (constantTransport_) { visc[0] = viscosity_; visc[1] = bulkViscosity_; @@ -1545,8 +1544,8 @@ MFEM_HOST_DEVICE void GasMixtureTransport::GetViscosities(const double *conserve return; } -MFEM_HOST_DEVICE void GasMixtureTransport::GetThermalConductivities(const double *conserved, const double *primitive, - double *kappa) { +MFEM_HOST_DEVICE void GasMixtureTransport::GetThermalConductivities(const double* conserved, const double* primitive, + double* kappa) { double n_sp[gpudata::MAXSPECIES], X_sp[gpudata::MAXSPECIES], Y_sp[gpudata::MAXSPECIES]; if (constantTransport_) { @@ -1589,8 +1588,8 @@ MFEM_HOST_DEVICE void GasMixtureTransport::GetThermalConductivities(const double } } -void GasMixtureTransport::computeMixtureAverageDiffusivity(const Vector &state, const Vector &Efield, - Vector &diffusivity, bool unused) { +void GasMixtureTransport::computeMixtureAverageDiffusivity(const Vector& state, const Vector& Efield, + Vector& diffusivity, bool unused) { // diffusivity.SetSize(3); // diffusivity.SetSize(numSpecies); diffusivity.SetSize(gpudata::MAXSPECIES); // should already be set coming in @@ -1598,8 +1597,8 @@ void GasMixtureTransport::computeMixtureAverageDiffusivity(const Vector &state, computeMixtureAverageDiffusivity(&state[0], &Efield[0], &diffusivity[0], unused); } -MFEM_HOST_DEVICE void GasMixtureTransport::computeMixtureAverageDiffusivity(const double *state, const double *Efield, - double *diffusivity, bool unused) { +MFEM_HOST_DEVICE void GasMixtureTransport::computeMixtureAverageDiffusivity(const double* state, const double* Efield, + double* diffusivity, bool unused) { if (constantTransport_) { for (int sp = 0; sp < numSpecies; sp++) { diffusivity[sp] = diffusivity_[sp]; @@ -1649,7 +1648,7 @@ MFEM_HOST_DEVICE void GasMixtureTransport::computeMixtureAverageDiffusivity(cons } } -MFEM_HOST_DEVICE void GasMixtureTransport::ComputeElectricalConductivity(const double *state, double &sigma) { +MFEM_HOST_DEVICE void GasMixtureTransport::ComputeElectricalConductivity(const double* state, double& sigma) { if (constantTransport_) { sigma = electronThermalConductivity_; return; diff --git a/src/gas_transport.hpp b/src/gas_transport.hpp index bebe046a..dfd035b9 100644 --- a/src/gas_transport.hpp +++ b/src/gas_transport.hpp @@ -99,40 +99,40 @@ class GasMinimalTransport : public MolecularTransport { double mobilMult_; public: - GasMinimalTransport(GasMixture *_mixture, RunConfiguration &_runfile); - MFEM_HOST_DEVICE GasMinimalTransport(GasMixture *_mixture, const GasTransportInput &inputs); - MFEM_HOST_DEVICE GasMinimalTransport(GasMixture *_mixture); + GasMinimalTransport(GasMixture* _mixture, RunConfiguration& _runfile); + MFEM_HOST_DEVICE GasMinimalTransport(GasMixture* _mixture, const GasTransportInput& inputs); + MFEM_HOST_DEVICE GasMinimalTransport(GasMixture* _mixture); MFEM_HOST_DEVICE virtual ~GasMinimalTransport() {} - MFEM_HOST_DEVICE double getMuw(const int &spI, const int &spJ) { return muw_[spI + spJ * numSpecies]; } + MFEM_HOST_DEVICE double getMuw(const int& spI, const int& spJ) { return muw_[spI + spJ * numSpecies]; } int getIonIndex() { return ionIndex_; } - virtual collisionInputs computeCollisionInputs(const Vector &primitive, const Vector &n_sp); - MFEM_HOST_DEVICE collisionInputs computeCollisionInputs(const double *primitive, const double *n_sp); + virtual collisionInputs computeCollisionInputs(const Vector& primitive, const Vector& n_sp); + MFEM_HOST_DEVICE collisionInputs computeCollisionInputs(const double* primitive, const double* n_sp); - MFEM_HOST_DEVICE void ComputeFluxMolecularTransport(const double *state, const double *gradUp, const double *Efield, - double *transportBuffer, double *diffusionVelocity) override; + MFEM_HOST_DEVICE void ComputeFluxMolecularTransport(const double* state, const double* gradUp, const double* Efield, + double* transportBuffer, double* diffusionVelocity) override; - MFEM_HOST_DEVICE void ComputeSourceMolecularTransport(const double *state, const double *Up, const double *gradUp, - const double *Efield, double *globalTransport, - double *speciesTransport, double *diffusionVelocity, - double *n_sp) override; + MFEM_HOST_DEVICE void ComputeSourceMolecularTransport(const double* state, const double* Up, const double* gradUp, + const double* Efield, double* globalTransport, + double* speciesTransport, double* diffusionVelocity, + double* n_sp) override; // NOTE(kevin): only for AxisymmetricSource using MolecularTransport::GetViscosities; - MFEM_HOST_DEVICE void GetViscosities(const double *conserved, const double *primitive, double *visc) override; + MFEM_HOST_DEVICE void GetViscosities(const double* conserved, const double* primitive, double* visc) override; // virtual double computeThirdOrderElectronThermalConductivity(const Vector &X_sp, const double debyeLength, // const double Te, const double nondimTe); - MFEM_HOST_DEVICE double computeThirdOrderElectronThermalConductivity(const double *X_sp, const double debyeLength, + MFEM_HOST_DEVICE double computeThirdOrderElectronThermalConductivity(const double* X_sp, const double debyeLength, const double Te, const double nondimTe); - virtual void computeMixtureAverageDiffusivity(const Vector &state, const Vector &Efield, Vector &diffusivity, + virtual void computeMixtureAverageDiffusivity(const Vector& state, const Vector& Efield, Vector& diffusivity, bool unused); - MFEM_HOST_DEVICE virtual void computeMixtureAverageDiffusivity(const double *state, const double *Efield, - double *diffusivity, bool unused); + MFEM_HOST_DEVICE virtual void computeMixtureAverageDiffusivity(const double* state, const double* Efield, + double* diffusivity, bool unused); // here HERE // virtual void computeMixtureAverageDiffusivity(const Vector &state, const Vector &Efield, Vector &diffusivity, bool @@ -145,21 +145,21 @@ class GasMinimalTransport : public MolecularTransport { // override; // These are used to compute third-order electron thermal conductivity based on standard Chapman--Enskog method. - MFEM_HOST_DEVICE double L11ee(const double *Q2) { return Q2[0]; } - MFEM_HOST_DEVICE double L11ea(const double *Q1) { return 6.25 * Q1[0] - 15. * Q1[1] + 12. * Q1[2]; } - MFEM_HOST_DEVICE double L12ee(const double *Q2) { return 1.75 * Q2[0] - 2.0 * Q2[1]; } - MFEM_HOST_DEVICE double L12ea(const double *Q1) { + MFEM_HOST_DEVICE double L11ee(const double* Q2) { return Q2[0]; } + MFEM_HOST_DEVICE double L11ea(const double* Q1) { return 6.25 * Q1[0] - 15. * Q1[1] + 12. * Q1[2]; } + MFEM_HOST_DEVICE double L12ee(const double* Q2) { return 1.75 * Q2[0] - 2.0 * Q2[1]; } + MFEM_HOST_DEVICE double L12ea(const double* Q1) { return 10.9375 * Q1[0] - 39.375 * Q1[1] + 57. * Q1[2] - 30. * Q1[3]; } - MFEM_HOST_DEVICE double L22ee(const double *Q2) { return 4.8125 * Q2[0] - 7.0 * Q2[1] + 5. * Q2[2]; } - MFEM_HOST_DEVICE double L22ea(const double *Q1) { + MFEM_HOST_DEVICE double L22ee(const double* Q2) { return 4.8125 * Q2[0] - 7.0 * Q2[1] + 5. * Q2[2]; } + MFEM_HOST_DEVICE double L22ea(const double* Q1) { return 19.140625 * Q1[0] - 91.875 * Q1[1] + 199.5 * Q1[2] - 210. * Q1[3] + 90. * Q1[4]; } - MFEM_HOST_DEVICE void computeEffectiveMass(const double *mw, double *muw); + MFEM_HOST_DEVICE void computeEffectiveMass(const double* mw, double* muw); // For artificial multipliers - MFEM_HOST_DEVICE void setArtificialMultipliers(const GasTransportInput &inputs); + MFEM_HOST_DEVICE void setArtificialMultipliers(const GasTransportInput& inputs); }; ////////////////////////////////////////////////////// @@ -191,39 +191,39 @@ class GasMixtureTransport : public GasMinimalTransport { // void identifyCollisionType(); public: - GasMixtureTransport(GasMixture *_mixture, RunConfiguration &_runfile); - MFEM_HOST_DEVICE GasMixtureTransport(GasMixture *_mixture, const GasTransportInput &inputs); + GasMixtureTransport(GasMixture* _mixture, RunConfiguration& _runfile); + MFEM_HOST_DEVICE GasMixtureTransport(GasMixture* _mixture, const GasTransportInput& inputs); MFEM_HOST_DEVICE virtual ~GasMixtureTransport() {} MFEM_HOST_DEVICE double collisionIntegral(const int _spI, const int _spJ, const int l, const int r, const collisionInputs collInputs); - MFEM_HOST_DEVICE void ComputeFluxMolecularTransport(const double *state, const double *gradUp, const double *Efield, - double *transportBuffer, double *diffusionVelocity) final; + MFEM_HOST_DEVICE void ComputeFluxMolecularTransport(const double* state, const double* gradUp, const double* Efield, + double* transportBuffer, double* diffusionVelocity) final; - MFEM_HOST_DEVICE void ComputeSourceMolecularTransport(const double *state, const double *Up, const double *gradUp, - const double *Efield, double *globalTransport, - double *speciesTransport, double *diffusionVelocity, - double *n_sp) final; + MFEM_HOST_DEVICE void ComputeSourceMolecularTransport(const double* state, const double* Up, const double* gradUp, + const double* Efield, double* globalTransport, + double* speciesTransport, double* diffusionVelocity, + double* n_sp) final; // NOTE(kevin): only for AxisymmetricSource using GasMinimalTransport::GetViscosities; - MFEM_HOST_DEVICE void GetViscosities(const double *conserved, const double *primitive, double *visc) final; + MFEM_HOST_DEVICE void GetViscosities(const double* conserved, const double* primitive, double* visc) final; - MFEM_HOST_DEVICE double computeThirdOrderElectronThermalConductivity(const double *X_sp, - const collisionInputs &collInputs); + MFEM_HOST_DEVICE double computeThirdOrderElectronThermalConductivity(const double* X_sp, + const collisionInputs& collInputs); // here HERE - virtual void computeMixtureAverageDiffusivity(const Vector &state, const Vector &Efield, Vector &diffusivity, + virtual void computeMixtureAverageDiffusivity(const Vector& state, const Vector& Efield, Vector& diffusivity, bool unused); - MFEM_HOST_DEVICE virtual void computeMixtureAverageDiffusivity(const double *state, const double *Efield, - double *diffusivity, bool unused); + MFEM_HOST_DEVICE virtual void computeMixtureAverageDiffusivity(const double* state, const double* Efield, + double* diffusivity, bool unused); - MFEM_HOST_DEVICE void GetThermalConductivities(const double *conserved, const double *primitive, double *kappa); + MFEM_HOST_DEVICE void GetThermalConductivities(const double* conserved, const double* primitive, double* kappa); - MFEM_HOST_DEVICE void ComputeElectricalConductivity(const double *state, double &sigma); + MFEM_HOST_DEVICE void ComputeElectricalConductivity(const double* state, double& sigma); // virtual void computeMixtureAverageDiffusivity(const Vector &state, const Vector &Efield, Vector &diffusivity, bool // unused); // final; //override; using GasMinimalTransport::computeMixtureAverageDiffusivity; MFEM_HOST_DEVICE void diff --git a/src/gaussianInterpExtData.cpp b/src/gaussianInterpExtData.cpp index 1f4224d4..a3b8568c 100644 --- a/src/gaussianInterpExtData.cpp +++ b/src/gaussianInterpExtData.cpp @@ -49,8 +49,8 @@ using namespace mfem; using namespace mfem::common; -GaussianInterpExtData::GaussianInterpExtData(mfem::ParMesh *pmesh, LoMachOptions *loMach_opts, - temporalSchemeCoefficients &coeff, TPS::Tps *tps) +GaussianInterpExtData::GaussianInterpExtData(mfem::ParMesh* pmesh, LoMachOptions* loMach_opts, + temporalSchemeCoefficients& coeff, TPS::Tps* tps) : tpsP_(tps), loMach_opts_(loMach_opts), pmesh_(pmesh), coeff_(coeff) { nprocs_ = pmesh_->GetNRanks(); rank_ = pmesh_->GetMyRank(); @@ -218,7 +218,7 @@ void GaussianInterpExtData::initializeSelf() { } } -void GaussianInterpExtData::initializeViz(ParaViewDataCollection &pvdc) { +void GaussianInterpExtData::initializeViz(ParaViewDataCollection& pvdc) { if (isInterpInlet_) { pvdc.RegisterField("externalTemp", &temperature_gf_); pvdc.RegisterField("externalU", &velocity_gf_); @@ -279,13 +279,13 @@ void GaussianInterpExtData::setInlet() { } } - double *Tdata = temperature_gf_.HostReadWrite(); - double *Udata = velocity_gf_.HostReadWrite(); - double *U0 = vel0_gf_.HostReadWrite(); - double *Thdata = swirl_gf_.HostReadWrite(); - double *Th0 = swirl0_gf_.HostReadWrite(); - double *Ydata = Yn_gf_.HostReadWrite(); - double *hcoords = coordsDof.HostReadWrite(); + double* Tdata = temperature_gf_.HostReadWrite(); + double* Udata = velocity_gf_.HostReadWrite(); + double* U0 = vel0_gf_.HostReadWrite(); + double* Thdata = swirl_gf_.HostReadWrite(); + double* Th0 = swirl0_gf_.HostReadWrite(); + double* Ydata = Yn_gf_.HostReadWrite(); + double* hcoords = coordsDof.HostReadWrite(); struct inlet_profile { // double x, y, z, rho, temp, u, v, w; @@ -295,14 +295,14 @@ void GaussianInterpExtData::setInlet() { string fnameBase; std::string basepath("./inputs/"); fnameBase = (basepath + fname_); - const char *fnameRead = fnameBase.c_str(); + const char* fnameRead = fnameBase.c_str(); int nCount = 0; // find size if (rank0_) { std::cout << " Attempting to open inlet file for counting... " << fnameRead << " "; - FILE *inlet_file; + FILE* inlet_file; if ((inlet_file = fopen(fnameRead, "r"))) { std::cout << " ...and open" << endl; fflush(stdout); @@ -561,8 +561,8 @@ void GaussianInterpExtData::setFieldInitSpec() { pmesh_->GetNodes(coordsDof); // now repeat for the spec field data // TODO(garobed1): no support for 3D - double *Yfulldata = Yfull_gf_.HostReadWrite(); - double *hcoords = coordsDof.HostReadWrite(); + double* Yfulldata = Yfull_gf_.HostReadWrite(); + double* hcoords = coordsDof.HostReadWrite(); const int maxSpec = 10; @@ -573,14 +573,14 @@ void GaussianInterpExtData::setFieldInitSpec() { string fnamespecBase; std::string basepathspec("./inputs/"); fnamespecBase = (basepathspec + fname_spec_); - const char *fnamespecRead = fnamespecBase.c_str(); + const char* fnamespecRead = fnamespecBase.c_str(); int nCountSpec = 0; // find size if (rank0_) { std::cout << " Attempting to open species file for counting... " << fnamespecRead << " "; - FILE *field_file; + FILE* field_file; if ((field_file = fopen(fnamespecRead, "r"))) { std::cout << " ...and open" << endl; fflush(stdout); @@ -752,8 +752,8 @@ void GaussianInterpExtData::setFieldTurbVisc() { pmesh_->GetNodes(coordsDof); // now repeat for the turb field data // TODO(garobed1): no support for 3D - double *NuTdata = nut_gf_.HostReadWrite(); - double *hcoords = coordsDof.HostReadWrite(); + double* NuTdata = nut_gf_.HostReadWrite(); + double* hcoords = coordsDof.HostReadWrite(); struct turb_profile { double x, y, z, nut; @@ -762,14 +762,14 @@ void GaussianInterpExtData::setFieldTurbVisc() { string fnameturbBase; std::string basepathturb("./inputs/"); fnameturbBase = (basepathturb + fname_turb_); - const char *fnameturbRead = fnameturbBase.c_str(); + const char* fnameturbRead = fnameturbBase.c_str(); int nCountTurb = 0; // find size if (rank0_) { std::cout << " Attempting to open turb file for counting... " << fnameturbRead << " "; - FILE *inlet_file; + FILE* inlet_file; if ((inlet_file = fopen(fnameturbRead, "r"))) { std::cout << " ...and open" << endl; fflush(stdout); @@ -913,9 +913,9 @@ void GaussianInterpExtData::setInletTurbScalars() { ParGridFunction coordsDof(vfes_); pmesh_->GetNodes(coordsDof); - double *TKEdata = tke_gf_.HostReadWrite(); - double *V2data = v2_gf_.HostReadWrite(); - double *hcoords = coordsDof.HostReadWrite(); + double* TKEdata = tke_gf_.HostReadWrite(); + double* V2data = v2_gf_.HostReadWrite(); + double* hcoords = coordsDof.HostReadWrite(); struct tke_profile { double x, y, z, tke, v2; @@ -924,14 +924,14 @@ void GaussianInterpExtData::setInletTurbScalars() { string fnametkeBase; std::string basepathtke("./inputs/"); fnametkeBase = (basepathtke + fname_tke_); - const char *fnametkeRead = fnametkeBase.c_str(); + const char* fnametkeRead = fnametkeBase.c_str(); int nCountTKE = 0; // find size if (rank0_) { std::cout << " Attempting to open zeta-f file for counting... " << fnametkeRead << " "; - FILE *inlet_file; + FILE* inlet_file; if ((inlet_file = fopen(fnametkeRead, "r"))) { std::cout << " ...and open" << endl; fflush(stdout); @@ -977,7 +977,7 @@ void GaussianInterpExtData::setInletTurbScalars() { double buffer = std::stod(substr); entry++; - // using the current format, SHOULD CHANGE + // using the current format if (entry == 1) { tke_pr[nLines].x = buffer; } else if (entry == 2) { @@ -1040,8 +1040,11 @@ void GaussianInterpExtData::setInletTurbScalars() { continue; } - dist = sqrt((xp[0] - tke_pr[j].x) * (xp[0] - tke_pr[j].x) + (xp[1] - tke_pr[j].y) * (xp[1] - tke_pr[j].y) + - (xp[2] - tke_pr[j].z) * (xp[2] - tke_pr[j].z)); + dist = (xp[0] - tke_pr[j].x) * (xp[0] - tke_pr[j].x) + (xp[1] - tke_pr[j].y) * (xp[1] - tke_pr[j].y); + if (dim_ == 3) { + dist += (xp[2] - tke_pr[j].z) * (xp[2] - tke_pr[j].z); + } + dist = std::sqrt(dist); distMin = std::min(distMin, dist); } @@ -1053,8 +1056,11 @@ void GaussianInterpExtData::setInletTurbScalars() { continue; } - dist = sqrt((xp[0] - tke_pr[j].x) * (xp[0] - tke_pr[j].x) + (xp[1] - tke_pr[j].y) * (xp[1] - tke_pr[j].y) + - (xp[2] - tke_pr[j].z) * (xp[2] - tke_pr[j].z)); + dist = (xp[0] - tke_pr[j].x) * (xp[0] - tke_pr[j].x) + (xp[1] - tke_pr[j].y) * (xp[1] - tke_pr[j].y); + if (dim_ == 3) { + dist += (xp[2] - tke_pr[j].z) * (xp[2] - tke_pr[j].z); + } + dist = std::sqrt(dist); if (dist > distMin) { distMinSecond = std::min(distMinSecond, dist); } @@ -1069,8 +1075,9 @@ void GaussianInterpExtData::setInletTurbScalars() { continue; } - dist = sqrt((xp[0] - tke_pr[j].x) * (xp[0] - tke_pr[j].x) + (xp[1] - tke_pr[j].y) * (xp[1] - tke_pr[j].y) + - (xp[2] - tke_pr[j].z) * (xp[2] - tke_pr[j].z)); + // dist = sqrt((xp[0] - tke_pr[j].x) * (xp[0] - tke_pr[j].x) + (xp[1] - tke_pr[j].y) * (xp[1] - tke_pr[j].y) + + // (xp[2] - tke_pr[j].z) * (xp[2] - tke_pr[j].z)); + dist = sqrt((xp[0] - tke_pr[j].x) * (xp[0] - tke_pr[j].x)); // gaussian interpolation if (dist <= 1.5 * radius) { @@ -1105,10 +1112,10 @@ void GaussianInterpExtData::step() { return; } - double *Udata = velocity_gf_.HostReadWrite(); - double *U0 = vel0_gf_.HostReadWrite(); - double *Thdata = swirl_gf_.HostReadWrite(); - double *Th0 = swirl0_gf_.HostReadWrite(); + double* Udata = velocity_gf_.HostReadWrite(); + double* U0 = vel0_gf_.HostReadWrite(); + double* Thdata = swirl_gf_.HostReadWrite(); + double* Th0 = swirl0_gf_.HostReadWrite(); // only addressing velocity for now and assume ic is zero for (int eq = 0; eq < dim_; eq++) { diff --git a/src/gaussianInterpExtData.hpp b/src/gaussianInterpExtData.hpp index e12d04f9..bb9a3a31 100644 --- a/src/gaussianInterpExtData.hpp +++ b/src/gaussianInterpExtData.hpp @@ -65,13 +65,13 @@ class GaussianInterpExtData : public ExternalDataBase { private: // pointer to parent Tps class - TPS::Tps *tpsP_ = nullptr; + TPS::Tps* tpsP_ = nullptr; // Run options - LoMachOptions *loMach_opts_; // = nullptr; + LoMachOptions* loMach_opts_; // = nullptr; // MPI helpers - MPI_Groups *groupsMPI_ = nullptr; + MPI_Groups* groupsMPI_ = nullptr; int nprocs_; // total number of MPI procs int rank_; // local MPI rank bool rank0_; // flag to indicate rank 0 @@ -85,7 +85,7 @@ class GaussianInterpExtData : public ExternalDataBase { /// Enable/disable verbose output. bool verbose = true; - ParMesh *pmesh_; // = nullptr; + ParMesh* pmesh_; // = nullptr; // The order of the scalar spaces int order_; @@ -96,7 +96,7 @@ class GaussianInterpExtData : public ExternalDataBase { // Coefficients necessary to take a time step (including dt). // Assumed to be externally managed and determined, so just get a // reference here. - const temporalSchemeCoefficients &coeff_; + const temporalSchemeCoefficients& coeff_; // to-be used fro time or timestep dep bc // double dt; @@ -122,18 +122,18 @@ class GaussianInterpExtData : public ExternalDataBase { double tke_bc_fac_; // Scalar \f$H^1\f$ finite element collection. - FiniteElementCollection *sfec_ = nullptr; + FiniteElementCollection* sfec_ = nullptr; // Scalar \f$H^1\f$ finite element space. - ParFiniteElementSpace *sfes_ = nullptr; + ParFiniteElementSpace* sfes_ = nullptr; // Vector \f$H^1\f$ finite element collection & space - FiniteElementCollection *vfec_ = nullptr; - ParFiniteElementSpace *vfes_ = nullptr; + FiniteElementCollection* vfec_ = nullptr; + ParFiniteElementSpace* vfes_ = nullptr; // for species dirichlet bc - FiniteElementCollection *yfec_ = nullptr; - ParFiniteElementSpace *yfes_ = nullptr; + FiniteElementCollection* yfec_ = nullptr; + ParFiniteElementSpace* yfes_ = nullptr; ParGridFunction temperature_gf_; ParGridFunction velocity_gf_; @@ -153,12 +153,12 @@ class GaussianInterpExtData : public ExternalDataBase { const int maxSpec_ = 10; public: - GaussianInterpExtData(mfem::ParMesh *pmesh, LoMachOptions *loMach_opts, temporalSchemeCoefficients &coeff, - TPS::Tps *tps); + GaussianInterpExtData(mfem::ParMesh* pmesh, LoMachOptions* loMach_opts, temporalSchemeCoefficients& coeff, + TPS::Tps* tps); virtual ~GaussianInterpExtData(); void initializeSelf(); - void initializeViz(ParaViewDataCollection &pvdc) final; + void initializeViz(ParaViewDataCollection& pvdc) final; void setup(); void setInlet(); void setInletTurbScalars(); @@ -167,18 +167,18 @@ class GaussianInterpExtData : public ExternalDataBase { void step(); /// Return a pointer to the current temperature ParGridFunction. - ParGridFunction *GetExternalInterpolatedTemperature() { return &temperature_gf_; } + ParGridFunction* GetExternalInterpolatedTemperature() { return &temperature_gf_; } /// Return a pointer to the current velocity ParGridFunction. - ParGridFunction *GetExternalInterpolatedVelocity() { return &velocity_gf_; } + ParGridFunction* GetExternalInterpolatedVelocity() { return &velocity_gf_; } /// Return a pointer to the current TKE ParGridFunction. - ParGridFunction *GetExternalInterpolatedTurbKineticEnergy() { return &tke_gf_; } + ParGridFunction* GetExternalInterpolatedTurbKineticEnergy() { return &tke_gf_; } /// Return a pointer to the current v2 ParGridFunction. - ParGridFunction *GetExternalInterpolatedTurbV2() { return &v2_gf_; } + ParGridFunction* GetExternalInterpolatedTurbV2() { return &v2_gf_; } /// Return a pointer to the current eddy viscosity ParGridFunction. - ParGridFunction *GetExternalInterpolatedEddyViscosity() { return &nut_gf_; } + ParGridFunction* GetExternalInterpolatedEddyViscosity() { return &nut_gf_; } }; #endif // GAUSSIANINTERPEXTDATA_HPP_ diff --git a/src/geometricSponge.cpp b/src/geometricSponge.cpp index 4d3e66ba..f359965e 100644 --- a/src/geometricSponge.cpp +++ b/src/geometricSponge.cpp @@ -49,7 +49,7 @@ using namespace mfem; using namespace mfem::common; -GeometricSponge::GeometricSponge(mfem::ParMesh *pmesh, LoMachOptions *loMach_opts, TPS::Tps *tps) +GeometricSponge::GeometricSponge(mfem::ParMesh* pmesh, LoMachOptions* loMach_opts, TPS::Tps* tps) : tpsP_(tps), loMach_opts_(loMach_opts), pmesh_(pmesh) { rank_ = pmesh_->GetMyRank(); rank0_ = (pmesh_->GetMyRank() == 0); @@ -138,14 +138,14 @@ void GeometricSponge::initializeSelf() { toTurbModel_interface_.diff_multiplier = &mult_gf_; } -void GeometricSponge::initializeViz(ParaViewDataCollection &pvdc) { pvdc.RegisterField("sponge", &mult_gf_); } +void GeometricSponge::initializeViz(ParaViewDataCollection& pvdc) { pvdc.RegisterField("sponge", &mult_gf_); } void GeometricSponge::setup() { ParGridFunction coordsDof(vfes_); pmesh_->GetNodes(coordsDof); - double *data = mult_gf_.HostReadWrite(); - const double *hcoords = coordsDof.HostRead(); + double* data = mult_gf_.HostReadWrite(); + const double* hcoords = coordsDof.HostRead(); for (int i = 0; i < Sdof_; i++) { double coords[3]; @@ -162,7 +162,7 @@ void GeometricSponge::setup() { } } -void GeometricSponge::spongeUniform(double &wgt) { +void GeometricSponge::spongeUniform(double& wgt) { double factor, wgt_lcl; factor = uniform.mult; factor = max(factor, 1.0); @@ -170,7 +170,7 @@ void GeometricSponge::spongeUniform(double &wgt) { wgt = max(wgt, wgt_lcl); } -void GeometricSponge::spongePlane(double *x, double &wgt) { +void GeometricSponge::spongePlane(double* x, double& wgt) { double normal[3]; double point[3]; double s[3]; @@ -201,7 +201,7 @@ void GeometricSponge::spongePlane(double *x, double &wgt) { } // TODO(swh): add suppport for arbitrary orientation of cylinder axis -void GeometricSponge::spongeCylinder(double *xGlobal, double &wgt) { +void GeometricSponge::spongeCylinder(double* xGlobal, double& wgt) { // C++ standard frowns on use of non-compile time arrays, e.g. // point[dim_], hence the requirement for hard-codes here and // elsewhere in this class @@ -264,7 +264,7 @@ void GeometricSponge::spongeCylinder(double *xGlobal, double &wgt) { } // TODO(swh): NOT GENERAL, only for annulus aligned with y -void GeometricSponge::spongeAnnulus(double *xGlobal, double &wgt) { +void GeometricSponge::spongeAnnulus(double* xGlobal, double& wgt) { double wgtAnn; double s[3]; double x[3]; diff --git a/src/geometricSponge.hpp b/src/geometricSponge.hpp index 46b4ca0c..15cf46cd 100644 --- a/src/geometricSponge.hpp +++ b/src/geometricSponge.hpp @@ -94,13 +94,13 @@ class LoMachOptions; class GeometricSponge : public SpongeBase { private: // pointer to parent Tps class - TPS::Tps *tpsP_ = nullptr; + TPS::Tps* tpsP_ = nullptr; // Run options - LoMachOptions *loMach_opts_; + LoMachOptions* loMach_opts_; // MPI helpers - MPI_Groups *groupsMPI_ = nullptr; + MPI_Groups* groupsMPI_ = nullptr; int nprocs_; // total number of MPI procs int rank_; // local MPI rank bool rank0_; // flag to indicate rank 0 @@ -111,7 +111,7 @@ class GeometricSponge : public SpongeBase { /// Enable/disable verbose output. bool verbose = true; - ParMesh *pmesh_; + ParMesh* pmesh_; // The order of the scalar spaces int order_; @@ -129,33 +129,33 @@ class GeometricSponge : public SpongeBase { geomAnnulus annulus; // Scalar \f$H^1\f$ finite element collection. - FiniteElementCollection *sfec_ = nullptr; + FiniteElementCollection* sfec_ = nullptr; // Scalar \f$H^1\f$ finite element space. - ParFiniteElementSpace *sfes_ = nullptr; + ParFiniteElementSpace* sfes_ = nullptr; // Vector \f$H^1\f$ finite element collection & space - FiniteElementCollection *vfec_ = nullptr; - ParFiniteElementSpace *vfes_ = nullptr; + FiniteElementCollection* vfec_ = nullptr; + ParFiniteElementSpace* vfes_ = nullptr; ParGridFunction mult_gf_; // Vector mult_; public: - GeometricSponge(mfem::ParMesh *pmesh, LoMachOptions *loMach_opts, TPS::Tps *tps); + GeometricSponge(mfem::ParMesh* pmesh, LoMachOptions* loMach_opts, TPS::Tps* tps); virtual ~GeometricSponge(); void initializeSelf(); - void initializeViz(ParaViewDataCollection &pvdc) final; + void initializeViz(ParaViewDataCollection& pvdc) final; void setup(); void step(); - void spongeUniform(double &wgt); - void spongePlane(double *x, double &wgt); - void spongeCylinder(double *x, double &wgt); - void spongeAnnulus(double *x, double &wgt); + void spongeUniform(double& wgt); + void spongePlane(double* x, double& wgt); + void spongeCylinder(double* x, double& wgt); + void spongeAnnulus(double* x, double& wgt); /// Return a pointer to the current temperature ParGridFunction. - ParGridFunction *GetCurrentMultiplier() { return &mult_gf_; } + ParGridFunction* GetCurrentMultiplier() { return &mult_gf_; } }; #endif // GEOMETRICSPONGE_HPP_ diff --git a/src/gpu_constructor.cpp b/src/gpu_constructor.cpp index 54e5f0e3..7e0c993a 100644 --- a/src/gpu_constructor.cpp +++ b/src/gpu_constructor.cpp @@ -42,93 +42,93 @@ namespace gpu { //--------------------------------------------------- // Constructors first //--------------------------------------------------- -__global__ void instantiateDeviceDryAir(const DryAirInput inputs, int _dim, int nvel, void *mix) { +__global__ void instantiateDeviceDryAir(const DryAirInput inputs, int _dim, int nvel, void* mix) { mix = new (mix) DryAir(inputs, _dim, nvel); } -__global__ void instantiateDevicePerfectMixture(const PerfectMixtureInput inputs, int _dim, int nvel, void *mix) { +__global__ void instantiateDevicePerfectMixture(const PerfectMixtureInput inputs, int _dim, int nvel, void* mix) { mix = new (mix) PerfectMixture(inputs, _dim, nvel); } __global__ void instantiateDeviceLteMixture(WorkingFluid f, int _dim, int nvel, double pc, TableInput energy_table_input, TableInput R_table_input, - TableInput c_table_input, TableInput T_table_input, void *mix) { + TableInput c_table_input, TableInput T_table_input, void* mix) { mix = new (mix) LteMixture(f, _dim, nvel, pc, energy_table_input, R_table_input, c_table_input, T_table_input); } -__global__ void instantiateDeviceDryAirTransport(GasMixture *mixture, const double viscosity_multiplier, +__global__ void instantiateDeviceDryAirTransport(GasMixture* mixture, const double viscosity_multiplier, const double bulk_viscosity, const double C1, const double S0, - const double Pr, void *transport) { + const double Pr, void* transport) { transport = new (transport) DryAirTransport(mixture, viscosity_multiplier, bulk_viscosity, C1, S0, Pr); } -__global__ void instantiateDeviceConstantTransport(GasMixture *mixture, const constantTransportData inputs, - void *trans) { +__global__ void instantiateDeviceConstantTransport(GasMixture* mixture, const constantTransportData inputs, + void* trans) { trans = new (trans) ConstantTransport(mixture, inputs); } -__global__ void instantiateDeviceGasMinimalTransport(GasMixture *mixture, const GasTransportInput inputs, void *trans) { +__global__ void instantiateDeviceGasMinimalTransport(GasMixture* mixture, const GasTransportInput inputs, void* trans) { trans = new (trans) GasMinimalTransport(mixture, inputs); } -__global__ void instantiateDeviceGasMixtureTransport(GasMixture *mixture, const GasTransportInput inputs, void *trans) { +__global__ void instantiateDeviceGasMixtureTransport(GasMixture* mixture, const GasTransportInput inputs, void* trans) { trans = new (trans) GasMixtureTransport(mixture, inputs); } -__global__ void instantiateDeviceLteTransport(GasMixture *mixture, TableInput mu_table_input, - TableInput kappa_table_input, TableInput sigma_table_input, void *trans) { +__global__ void instantiateDeviceLteTransport(GasMixture* mixture, TableInput mu_table_input, + TableInput kappa_table_input, TableInput sigma_table_input, void* trans) { trans = new (trans) LteTransport(mixture, mu_table_input, kappa_table_input, sigma_table_input); } -__global__ void instantiateDeviceMixingLengthTransport(GasMixture *mixture, const mixingLengthTransportData inputs, - TransportProperties *mol_trans, void *trans) { +__global__ void instantiateDeviceMixingLengthTransport(GasMixture* mixture, const mixingLengthTransportData inputs, + TransportProperties* mol_trans, void* trans) { // can't dynamic_cast on the device, so regular cast here - MolecularTransport *temporary_transport = (MolecularTransport *)mol_trans; + MolecularTransport* temporary_transport = (MolecularTransport*)mol_trans; trans = new (trans) MixingLengthTransport(mixture, inputs, temporary_transport); } -__global__ void instantiateDeviceFluxes(GasMixture *_mixture, Equations _eqSystem, TransportProperties *_transport, +__global__ void instantiateDeviceFluxes(GasMixture* _mixture, Equations _eqSystem, TransportProperties* _transport, const int _num_equation, const int _dim, bool axisym, int sgs_model, - double sgs_floor, double sgs_const, viscositySpongeData vsd, void *f) { + double sgs_floor, double sgs_const, viscositySpongeData vsd, void* f) { f = new (f) Fluxes(_mixture, _eqSystem, _transport, _num_equation, _dim, axisym, sgs_model, sgs_floor, sgs_const, vsd); } -__global__ void instantiateDeviceRiemann(int _num_equation, GasMixture *_mixture, Equations _eqSystem, - Fluxes *_fluxClass, bool _useRoe, bool axisym, void *r) { +__global__ void instantiateDeviceRiemann(int _num_equation, GasMixture* _mixture, Equations _eqSystem, + Fluxes* _fluxClass, bool _useRoe, bool axisym, void* r) { r = new (r) RiemannSolverTPS(_num_equation, _mixture, _eqSystem, _fluxClass, _useRoe, axisym); } -__global__ void instantiateDeviceChemistry(GasMixture *mixture, const ChemistryInput inputs, void *chem) { +__global__ void instantiateDeviceChemistry(GasMixture* mixture, const ChemistryInput inputs, void* chem) { chem = new (chem) Chemistry(mixture, inputs); } -__global__ void instantiateDeviceNetEmission(const RadiationInput inputs, void *radiation) { +__global__ void instantiateDeviceNetEmission(const RadiationInput inputs, void* radiation) { radiation = new (radiation) NetEmission(inputs); } //--------------------------------------------------- // And then destructors //--------------------------------------------------- -__global__ void freeDeviceFluxes(Fluxes *f) { f->~Fluxes(); } -__global__ void freeDeviceRiemann(RiemannSolverTPS *r) { r->~RiemannSolverTPS(); } -__global__ void freeDeviceMixture(GasMixture *mix) { mix->~GasMixture(); } -__global__ void freeDeviceTransport(TransportProperties *transport) { transport->~TransportProperties(); } -__global__ void freeDeviceChemistry(Chemistry *chem) { +__global__ void freeDeviceFluxes(Fluxes* f) { f->~Fluxes(); } +__global__ void freeDeviceRiemann(RiemannSolverTPS* r) { r->~RiemannSolverTPS(); } +__global__ void freeDeviceMixture(GasMixture* mix) { mix->~GasMixture(); } +__global__ void freeDeviceTransport(TransportProperties* transport) { transport->~TransportProperties(); } +__global__ void freeDeviceChemistry(Chemistry* chem) { if (chem != NULL) chem->~Chemistry(); } -__global__ void freeDeviceRadiation(Radiation *radiation) { +__global__ void freeDeviceRadiation(Radiation* radiation) { if (radiation != NULL) radiation->~Radiation(); } //--------------------------------------------------- // And finally device setters //--------------------------------------------------- -__global__ void deviceSetGridFunctionReactionData(const double *data, int size, GridFunctionReaction *reaction) { +__global__ void deviceSetGridFunctionReactionData(const double* data, int size, GridFunctionReaction* reaction) { reaction->setData(data, size); } -__global__ void deviceSetChemistryReactionData(const double *data, int size, Chemistry *chem) { +__global__ void deviceSetChemistryReactionData(const double* data, int size, Chemistry* chem) { chem->setRates(data, size); } diff --git a/src/gpu_constructor.hpp b/src/gpu_constructor.hpp index 9ec46687..0d8c741b 100644 --- a/src/gpu_constructor.hpp +++ b/src/gpu_constructor.hpp @@ -92,75 +92,75 @@ namespace gpu { #if defined(_CUDA_) || defined(_HIP_) //! Instantiate DryAir object on the device with placement new -__global__ void instantiateDeviceDryAir(const DryAirInput inputs, int _dim, int nvel, void *mix); +__global__ void instantiateDeviceDryAir(const DryAirInput inputs, int _dim, int nvel, void* mix); //! Instantiate PerfectMixture object on the device with placement new -__global__ void instantiateDevicePerfectMixture(const PerfectMixtureInput inputs, int _dim, int nvel, void *mix); +__global__ void instantiateDevicePerfectMixture(const PerfectMixtureInput inputs, int _dim, int nvel, void* mix); //! Instantiate LteMixture object on the device with placement new __global__ void instantiateDeviceLteMixture(WorkingFluid f, int _dim, int nvel, double pc, TableInput energy_table_input, TableInput R_table_input, - TableInput c_table_input, TableInput T_table_input, void *mix); + TableInput c_table_input, TableInput T_table_input, void* mix); //! Instantiate DryAirTransport object on the device with placement new -__global__ void instantiateDeviceDryAirTransport(GasMixture *mixture, const double viscosity_multiplier, +__global__ void instantiateDeviceDryAirTransport(GasMixture* mixture, const double viscosity_multiplier, const double bulk_viscosity, const double C1, const double S0, - const double Pr, void *transport); + const double Pr, void* transport); //! Instantiate ConstantTransport object on the device with placement new -__global__ void instantiateDeviceConstantTransport(GasMixture *mixture, const constantTransportData inputs, - void *trans); +__global__ void instantiateDeviceConstantTransport(GasMixture* mixture, const constantTransportData inputs, + void* trans); //! Instantiate GasMinimalTransport object on the device with placement new -__global__ void instantiateDeviceGasMinimalTransport(GasMixture *mixture, const GasTransportInput inputs, void *trans); +__global__ void instantiateDeviceGasMinimalTransport(GasMixture* mixture, const GasTransportInput inputs, void* trans); //! Instantiate GasMixtureTransport object on the device with placement new -__global__ void instantiateDeviceGasMixtureTransport(GasMixture *mixture, const GasTransportInput inputs, void *trans); +__global__ void instantiateDeviceGasMixtureTransport(GasMixture* mixture, const GasTransportInput inputs, void* trans); //! Instantiate ConstantTransport object on the device with placement new -__global__ void instantiateDeviceLteTransport(GasMixture *mixture, TableInput mu_table_input, - TableInput kappa_table_input, TableInput sigma_table_input, void *trans); +__global__ void instantiateDeviceLteTransport(GasMixture* mixture, TableInput mu_table_input, + TableInput kappa_table_input, TableInput sigma_table_input, void* trans); //! Instantiate MixingLengthTransport object on the device with placement new -__global__ void instantiateDeviceMixingLengthTransport(GasMixture *mixture, const mixingLengthTransportData inputs, - TransportProperties *mol_trans, void *trans); +__global__ void instantiateDeviceMixingLengthTransport(GasMixture* mixture, const mixingLengthTransportData inputs, + TransportProperties* mol_trans, void* trans); //! Instantiate Fluxes object on the device with placement new -__global__ void instantiateDeviceFluxes(GasMixture *_mixture, Equations _eqSystem, TransportProperties *_transport, +__global__ void instantiateDeviceFluxes(GasMixture* _mixture, Equations _eqSystem, TransportProperties* _transport, const int _num_equation, const int _dim, bool axisym, int sgs_model, - double sgs_floor, double sgs_const, viscositySpongeData vsd, void *f); + double sgs_floor, double sgs_const, viscositySpongeData vsd, void* f); //! Instantiate RiemannSolverTPS object on the device with placement new -__global__ void instantiateDeviceRiemann(int _num_equation, GasMixture *_mixture, Equations _eqSystem, - Fluxes *_fluxClass, bool _useRoe, bool axisym, void *r); +__global__ void instantiateDeviceRiemann(int _num_equation, GasMixture* _mixture, Equations _eqSystem, + Fluxes* _fluxClass, bool _useRoe, bool axisym, void* r); //! Instantiate Chemistry object on the device with placement new -__global__ void instantiateDeviceChemistry(GasMixture *mixture, const ChemistryInput inputs, void *chem); +__global__ void instantiateDeviceChemistry(GasMixture* mixture, const ChemistryInput inputs, void* chem); //! Instantiate NetEmission object on the device with placement new -__global__ void instantiateDeviceNetEmission(const RadiationInput inputs, void *radiation); +__global__ void instantiateDeviceNetEmission(const RadiationInput inputs, void* radiation); //! Explicit call to GasMixture destructor on the device -__global__ void freeDeviceMixture(GasMixture *mix); +__global__ void freeDeviceMixture(GasMixture* mix); //! Explicit call to TransportProperties destructor on the device -__global__ void freeDeviceTransport(TransportProperties *transport); +__global__ void freeDeviceTransport(TransportProperties* transport); //! Explicit call to Fluxes destructor on the device -__global__ void freeDeviceFluxes(Fluxes *f); +__global__ void freeDeviceFluxes(Fluxes* f); //! Explicit call to RiemannSolverTPS destructor on the device -__global__ void freeDeviceRiemann(RiemannSolverTPS *r); +__global__ void freeDeviceRiemann(RiemannSolverTPS* r); //! Explicit call to Chemistry destructor on the device -__global__ void freeDeviceChemistry(Chemistry *chem); +__global__ void freeDeviceChemistry(Chemistry* chem); //! Explicit call to Radiation destructor on the device -__global__ void freeDeviceRadiation(Radiation *radiation); +__global__ void freeDeviceRadiation(Radiation* radiation); //! Set the data to a GridFunctionReaction -__global__ void deviceSetGridFunctionReactionData(const double *data, int size, GridFunctionReaction *reaction); -__global__ void deviceSetChemistryReactionData(const double *data, int size, Chemistry *chem); +__global__ void deviceSetGridFunctionReactionData(const double* data, int size, GridFunctionReaction* reaction); +__global__ void deviceSetChemistryReactionData(const double* data, int size, Chemistry* chem); #endif // cuda or hip } // namespace gpu diff --git a/src/gradNonLinearForm.cpp b/src/gradNonLinearForm.cpp index 764a4b54..af4617cd 100644 --- a/src/gradNonLinearForm.cpp +++ b/src/gradNonLinearForm.cpp @@ -33,13 +33,13 @@ #include "riemann_solver.hpp" -GradNonLinearForm::GradNonLinearForm(ParFiniteElementSpace *_vfes, IntegrationRules *_intRules, const int _dim, +GradNonLinearForm::GradNonLinearForm(ParFiniteElementSpace* _vfes, IntegrationRules* _intRules, const int _dim, const int _num_equation) : ParNonlinearForm(_vfes), vfes(_vfes), intRules(_intRules), dim(_dim), num_equation(_num_equation) {} -void GradNonLinearForm::Apply(const ParGridFunction *Up, Vector &y) { +void GradNonLinearForm::Apply(const ParGridFunction* Up, Vector& y) { Vector x; - const double *data = Up->GetData(); + const double* data = Up->GetData(); // NB: Setting x here accounts for the fact that the space Up lives // in is different from the space of the gradient. diff --git a/src/gradNonLinearForm.hpp b/src/gradNonLinearForm.hpp index 63c9ad6e..5788731f 100644 --- a/src/gradNonLinearForm.hpp +++ b/src/gradNonLinearForm.hpp @@ -42,15 +42,15 @@ using namespace std; class GradNonLinearForm : public ParNonlinearForm { private: - ParFiniteElementSpace *vfes; - IntegrationRules *intRules; + ParFiniteElementSpace* vfes; + IntegrationRules* intRules; const int dim; const int num_equation; public: - GradNonLinearForm(ParFiniteElementSpace *f, IntegrationRules *intRules, const int dim, const int num_equation); + GradNonLinearForm(ParFiniteElementSpace* f, IntegrationRules* intRules, const int dim, const int num_equation); - void Apply(const ParGridFunction *Up, Vector &y); + void Apply(const ParGridFunction* Up, Vector& y); }; #endif // GRADNONLINEARFORM_HPP_ diff --git a/src/gradients.cpp b/src/gradients.cpp index 67337b35..cf579767 100644 --- a/src/gradients.cpp +++ b/src/gradients.cpp @@ -33,11 +33,11 @@ #include "dgNonlinearForm.hpp" -Gradients::Gradients(ParFiniteElementSpace *_vfes, ParFiniteElementSpace *_gradUpfes, int _dim, int _num_equation, - ParGridFunction *_Up, ParGridFunction *_gradUp, GasMixture *_mixture, GradNonLinearForm *_gradUp_A, - IntegrationRules *_intRules, int _intRuleType, - const precomputedIntegrationData &gpu_precomputed_data, Array &_Me_inv, - Vector &_invMArray, Array &_posDofInvM, const int &_maxIntPoints, const int &_maxDofs, +Gradients::Gradients(ParFiniteElementSpace* _vfes, ParFiniteElementSpace* _gradUpfes, int _dim, int _num_equation, + ParGridFunction* _Up, ParGridFunction* _gradUp, GasMixture* _mixture, GradNonLinearForm* _gradUp_A, + IntegrationRules* _intRules, int _intRuleType, + const precomputedIntegrationData& gpu_precomputed_data, Array& _Me_inv, + Vector& _invMArray, Array& _posDofInvM, const int& _maxIntPoints, const int& _maxDofs, int nvel) : ParNonlinearForm(_vfes), vfes(_vfes), @@ -57,7 +57,7 @@ Gradients::Gradients(ParFiniteElementSpace *_vfes, ParFiniteElementSpace *_gradU posDofInvM(_posDofInvM), maxIntPoints_(_maxIntPoints), maxDofs_(_maxDofs) { - const elementIndexingData &elem_data = gpu_precomputed_data_.element_indexing_data; + const elementIndexingData& elem_data = gpu_precomputed_data_.element_indexing_data; h_num_elems_of_type = elem_data.num_elems_of_type.HostRead(); uk_el1.UseDevice(true); @@ -87,15 +87,15 @@ Gradients::Gradients(ParFiniteElementSpace *_vfes, ParFiniteElementSpace *_gradU // element derivative stiffness matrix Ke.SetSize(vfes->GetNE()); for (int el = 0; el < vfes->GetNE(); el++) { - const FiniteElement *elem = vfes->GetFE(el); - ElementTransformation *Tr = vfes->GetElementTransformation(el); + const FiniteElement* elem = vfes->GetFE(el); + ElementTransformation* Tr = vfes->GetElementTransformation(el); const int eldDof = elem->GetDof(); Ke[el] = new DenseMatrix(eldDof, dim_ * eldDof); // element volume integral int intorder = 2 * elem->GetOrder(); - const IntegrationRule *ir = &intRules->Get(elem->GetGeomType(), intorder); + const IntegrationRule* ir = &intRules->Get(elem->GetGeomType(), intorder); Vector shape(eldDof); DenseMatrix dshape(eldDof, dim_); @@ -143,8 +143,8 @@ Gradients::~Gradients() { void Gradients::computeGradients() { const int totalDofs = vfes->GetNDofs(); - double *dataUp = Up->GetData(); - double *dataGradUp = gradUp->GetData(); + double* dataUp = Up->GetData(); + double* dataGradUp = gradUp->GetData(); // Vars for face contributions Vector faceContrib(dim_ * num_equation_ * totalDofs); @@ -153,7 +153,7 @@ void Gradients::computeGradients() { // compute volume integral and fill out above vectors DenseMatrix elGradUp; for (int el = 0; el < vfes->GetNE(); el++) { - const FiniteElement *elem = vfes->GetFE(el); + const FiniteElement* elem = vfes->GetFE(el); // get local primitive variables Array vdofs; @@ -197,7 +197,7 @@ void Gradients::computeGradients() { // Add contributions and multiply by invers mass matrix for (int el = 0; el < vfes->GetNE(); el++) { - const FiniteElement *elem = vfes->GetFE(el); + const FiniteElement* elem = vfes->GetFE(el); const int eldDof = elem->GetDof(); Array vdofs; @@ -235,7 +235,7 @@ void Gradients::computeGradients() { void Gradients::computeGradients_domain() { DGNonLinearForm::setToZero_gpu(*gradUp, gradUp->Size()); - const elementIndexingData &elem_data = gpu_precomputed_data_.element_indexing_data; + const elementIndexingData& elem_data = gpu_precomputed_data_.element_indexing_data; auto h_elem_dof_num = elem_data.dof_number.HostRead(); // Interpolate state info the faces (loops over elements) @@ -255,7 +255,7 @@ void Gradients::computeGradients_domain() { faceContrib_gpu(elType, elemOffset, dof_el); } - ParMesh *pmesh = vfes->GetParMesh(); + ParMesh* pmesh = vfes->GetParMesh(); const int Nbdry = pmesh->GetNFbyType(FaceType::Boundary); if (Nbdry > 0) { interpGradBdryFace_gpu(); @@ -271,13 +271,13 @@ void Gradients::computeGradients_domain() { } void Gradients::computeGradients_bdr() { - ParMesh *pmesh = vfes->GetParMesh(); + ParMesh* pmesh = vfes->GetParMesh(); const int Nshared = pmesh->GetNSharedFaces(); if (Nshared > 0) { interpGradSharedFace_gpu(); integrationGradSharedFace_gpu(); } - const elementIndexingData &elem_data = gpu_precomputed_data_.element_indexing_data; + const elementIndexingData& elem_data = gpu_precomputed_data_.element_indexing_data; auto h_elem_dof_num = elem_data.dof_number.HostRead(); // Multiply by inverse mass matrix @@ -289,16 +289,16 @@ void Gradients::computeGradients_bdr() { } } -void Gradients::interpFaceData_gpu(const Vector &Up, int elType, int elemOffset, int elDof) { - const double *d_x = Up.Read(); // Primitives! - double *d_uk_el1 = uk_el1.Write(); - double *d_uk_el2 = uk_el2.Write(); +void Gradients::interpFaceData_gpu(const Vector& Up, int elType, int elemOffset, int elDof) { + const double* d_x = Up.Read(); // Primitives! + double* d_uk_el1 = uk_el1.Write(); + double* d_uk_el2 = uk_el2.Write(); - const elementIndexingData &elem_data = gpu_precomputed_data_.element_indexing_data; + const elementIndexingData& elem_data = gpu_precomputed_data_.element_indexing_data; auto d_elem_dofs_list = elem_data.dofs_list.Read(); auto d_elem_dof_off = elem_data.dof_offset.Read(); - const interiorFaceIntegrationData &face_data = gpu_precomputed_data_.interior_face_data; + const interiorFaceIntegrationData& face_data = gpu_precomputed_data_.interior_face_data; auto d_element_to_faces = face_data.element_to_faces.Read(); auto d_shape1 = face_data.el1_shape.Read(); auto d_shape2 = face_data.el2_shape.Read(); @@ -384,10 +384,10 @@ void Gradients::interpFaceData_gpu(const Vector &Up, int elType, int elemOffset, } void Gradients::computeGradients_gpu(const int elType, const int offsetElems, const int elDof) { - const double *d_Up = Up->Read(); - double *d_gradUp = gradUp->ReadWrite(); + const double* d_Up = Up->Read(); + double* d_gradUp = gradUp->ReadWrite(); - const elementIndexingData &elem_data = gpu_precomputed_data_.element_indexing_data; + const elementIndexingData& elem_data = gpu_precomputed_data_.element_indexing_data; auto d_elem_dof_off = elem_data.dof_offset.Read(); auto d_elem_dofs_list = elem_data.dofs_list.Read(); @@ -449,15 +449,15 @@ void Gradients::computeGradients_gpu(const int elType, const int offsetElems, co // clang-format on void Gradients::evalFaceIntegrand_gpu() { auto d_dun = dun_face.Write(); - const double *d_uk_el1 = uk_el1.Read(); - const double *d_uk_el2 = uk_el2.Read(); + const double* d_uk_el1 = uk_el1.Read(); + const double* d_uk_el2 = uk_el2.Read(); - const interiorFaceIntegrationData &face_data = gpu_precomputed_data_.interior_face_data; + const interiorFaceIntegrationData& face_data = gpu_precomputed_data_.interior_face_data; auto d_weight = face_data.quad_weight.Read(); auto d_normal = face_data.normal.Read(); auto d_face_nqp = face_data.num_quad.Read(); - Mesh *mesh = fes->GetMesh(); + Mesh* mesh = fes->GetMesh(); const int Nf = mesh->GetNumFaces(); const int dim = dim_; @@ -496,15 +496,15 @@ void Gradients::evalFaceIntegrand_gpu() { // clang-format on void Gradients::faceContrib_gpu(const int elType, const int offsetElems, const int elDof) { - const double *d_dun = dun_face.Read(); + const double* d_dun = dun_face.Read(); - double *d_gradUp = gradUp->Write(); // NB: I assume this comes in set to zero! + double* d_gradUp = gradUp->Write(); // NB: I assume this comes in set to zero! - const elementIndexingData &elem_data = gpu_precomputed_data_.element_indexing_data; + const elementIndexingData& elem_data = gpu_precomputed_data_.element_indexing_data; auto d_elem_dof_off = elem_data.dof_offset.Read(); auto d_elem_dofs_list = elem_data.dofs_list.Read(); - const interiorFaceIntegrationData &face_data = gpu_precomputed_data_.interior_face_data; + const interiorFaceIntegrationData& face_data = gpu_precomputed_data_.interior_face_data; auto d_element_to_faces = face_data.element_to_faces.Read(); auto d_shape1 = face_data.el1_shape.Read(); auto d_shape2 = face_data.el2_shape.Read(); @@ -525,7 +525,7 @@ void Gradients::faceContrib_gpu(const int elType, const int offsetElems, const i MFEM_FOREACH_THREAD(i, x, elDof) { const int idx = d_elem_dofs_list[offsetIDs + i]; - double const *shape; + double const* shape; // ================ FACE CONTRIBUTION ================ const int elFaces = d_element_to_faces[7 * eli]; @@ -565,25 +565,25 @@ void Gradients::faceContrib_gpu(const int elType, const int offsetElems, const i } void Gradients::interpGradSharedFace_gpu() { - const double *d_up = Up->Read(); - const double *d_faceData = transferUp->face_nbr_data.Read(); - - const elementIndexingData &elem_data = gpu_precomputed_data_.element_indexing_data; - const int *d_elem_dofs_list = elem_data.dofs_list.Read(); - const int *d_elem_dof_off = elem_data.dof_offset.Read(); - const int *d_elem_dof_num = elem_data.dof_number.Read(); - - const sharedFaceIntegrationData &shared_face_data = gpu_precomputed_data_.shared_face_data; - const double *d_weight = shared_face_data.quad_weight.Read(); - const double *d_normal = shared_face_data.normal.Read(); - const double *d_shape1 = shared_face_data.el1_shape.Read(); - const double *d_shape2 = shared_face_data.el2_shape.Read(); - const int *d_face_num_quad = shared_face_data.num_quad.Read(); - const int *d_face_num_dof2 = shared_face_data.num_dof2.Read(); - const int *d_elem2_dofs = shared_face_data.elem2_dofs.Read(); - const int *d_shared_elements_to_shared_faces = shared_face_data.shared_elements_to_shared_faces.Read(); - - double *d_dun = dun_shared_face.Write(); + const double* d_up = Up->Read(); + const double* d_faceData = transferUp->face_nbr_data.Read(); + + const elementIndexingData& elem_data = gpu_precomputed_data_.element_indexing_data; + const int* d_elem_dofs_list = elem_data.dofs_list.Read(); + const int* d_elem_dof_off = elem_data.dof_offset.Read(); + const int* d_elem_dof_num = elem_data.dof_number.Read(); + + const sharedFaceIntegrationData& shared_face_data = gpu_precomputed_data_.shared_face_data; + const double* d_weight = shared_face_data.quad_weight.Read(); + const double* d_normal = shared_face_data.normal.Read(); + const double* d_shape1 = shared_face_data.el1_shape.Read(); + const double* d_shape2 = shared_face_data.el2_shape.Read(); + const int* d_face_num_quad = shared_face_data.num_quad.Read(); + const int* d_face_num_dof2 = shared_face_data.num_dof2.Read(); + const int* d_elem2_dofs = shared_face_data.elem2_dofs.Read(); + const int* d_shared_elements_to_shared_faces = shared_face_data.shared_elements_to_shared_faces.Read(); + + double* d_dun = dun_shared_face.Write(); const int maxNumElems = shared_face_data.shared_elements_to_shared_faces.Size() / 7; // elements with shared faces const int dim = dim_; @@ -658,19 +658,19 @@ void Gradients::interpGradSharedFace_gpu() { } void Gradients::integrationGradSharedFace_gpu() { - double *d_gradUp = gradUp->ReadWrite(); + double* d_gradUp = gradUp->ReadWrite(); - const elementIndexingData &elem_data = gpu_precomputed_data_.element_indexing_data; - const int *d_elem_dofs_list = elem_data.dofs_list.Read(); - const int *d_elem_dof_off = elem_data.dof_offset.Read(); - const int *d_elem_dof_num = elem_data.dof_number.Read(); + const elementIndexingData& elem_data = gpu_precomputed_data_.element_indexing_data; + const int* d_elem_dofs_list = elem_data.dofs_list.Read(); + const int* d_elem_dof_off = elem_data.dof_offset.Read(); + const int* d_elem_dof_num = elem_data.dof_number.Read(); - const sharedFaceIntegrationData &shared_face_data = gpu_precomputed_data_.shared_face_data; - const double *d_shape1 = shared_face_data.el1_shape.Read(); - const int *d_face_num_quad = shared_face_data.num_quad.Read(); - const int *d_shared_elements_to_shared_faces = shared_face_data.shared_elements_to_shared_faces.Read(); + const sharedFaceIntegrationData& shared_face_data = gpu_precomputed_data_.shared_face_data; + const double* d_shape1 = shared_face_data.el1_shape.Read(); + const int* d_face_num_quad = shared_face_data.num_quad.Read(); + const int* d_shared_elements_to_shared_faces = shared_face_data.shared_elements_to_shared_faces.Read(); - const double *d_dun = dun_shared_face.Read(); + const double* d_dun = dun_shared_face.Read(); const int dim = dim_; const int num_equation = num_equation_; @@ -713,28 +713,28 @@ void Gradients::integrationGradSharedFace_gpu() { } void Gradients::interpGradBdryFace_gpu() { - const double *d_up = Up->Read(); + const double* d_up = Up->Read(); - const elementIndexingData &elem_data = gpu_precomputed_data_.element_indexing_data; - const int *d_elem_dofs_list = elem_data.dofs_list.Read(); - const int *d_elem_dof_off = elem_data.dof_offset.Read(); - const int *d_elem_dof_num = elem_data.dof_number.Read(); + const elementIndexingData& elem_data = gpu_precomputed_data_.element_indexing_data; + const int* d_elem_dofs_list = elem_data.dofs_list.Read(); + const int* d_elem_dof_off = elem_data.dof_offset.Read(); + const int* d_elem_dof_num = elem_data.dof_number.Read(); - const boundaryFaceIntegrationData &bdry_face_data = gpu_precomputed_data_.boundary_face_data; - const double *d_weight = bdry_face_data.quad_weight.Read(); - const double *d_normal = bdry_face_data.normal.Read(); - const double *d_shape = bdry_face_data.shape.Read(); - const int *d_face_num_quad = bdry_face_data.num_quad.Read(); - const int *d_el_index = bdry_face_data.el.Read(); - const boundaryCategory *d_bc_cat = bdry_face_data.bc_category.Read(); - const bool *d_bc_use = bdry_face_data.use_bc_in_grad.Read(); - const double *d_wall_bc_temperature = bdry_face_data.wall_bc_temperature.Read(); + const boundaryFaceIntegrationData& bdry_face_data = gpu_precomputed_data_.boundary_face_data; + const double* d_weight = bdry_face_data.quad_weight.Read(); + const double* d_normal = bdry_face_data.normal.Read(); + const double* d_shape = bdry_face_data.shape.Read(); + const int* d_face_num_quad = bdry_face_data.num_quad.Read(); + const int* d_el_index = bdry_face_data.el.Read(); + const boundaryCategory* d_bc_cat = bdry_face_data.bc_category.Read(); + const bool* d_bc_use = bdry_face_data.use_bc_in_grad.Read(); + const double* d_wall_bc_temperature = bdry_face_data.wall_bc_temperature.Read(); - const int *d_rbf_to_abf = bdry_face_data.rbf_to_abf.Read(); + const int* d_rbf_to_abf = bdry_face_data.rbf_to_abf.Read(); // const double *d_xyz = bdry_face_data.xyz.Read(); - double *d_dun = dun_bdry_face.Write(); + double* d_dun = dun_bdry_face.Write(); const int dim = dim_; const int nvel = nvel_; @@ -815,19 +815,19 @@ void Gradients::interpGradBdryFace_gpu() { } void Gradients::integrationGradBdryFace_gpu() { - double *d_gradUp = gradUp->ReadWrite(); + double* d_gradUp = gradUp->ReadWrite(); - const elementIndexingData &elem_data = gpu_precomputed_data_.element_indexing_data; - const int *d_elem_dofs_list = elem_data.dofs_list.Read(); - const int *d_elem_dof_off = elem_data.dof_offset.Read(); - const int *d_elem_dof_num = elem_data.dof_number.Read(); + const elementIndexingData& elem_data = gpu_precomputed_data_.element_indexing_data; + const int* d_elem_dofs_list = elem_data.dofs_list.Read(); + const int* d_elem_dof_off = elem_data.dof_offset.Read(); + const int* d_elem_dof_num = elem_data.dof_number.Read(); - const boundaryFaceIntegrationData &bdry_face_data = gpu_precomputed_data_.boundary_face_data; - const double *d_shape = bdry_face_data.shape.Read(); - const int *d_face_num_quad = bdry_face_data.num_quad.Read(); - const int *d_elem_to_face = bdry_face_data.elements_to_faces.Read(); + const boundaryFaceIntegrationData& bdry_face_data = gpu_precomputed_data_.boundary_face_data; + const double* d_shape = bdry_face_data.shape.Read(); + const int* d_face_num_quad = bdry_face_data.num_quad.Read(); + const int* d_elem_to_face = bdry_face_data.elements_to_faces.Read(); - const double *d_dun = dun_bdry_face.Read(); + const double* d_dun = dun_bdry_face.Read(); const int dim = dim_; const int num_equation = num_equation_; @@ -877,13 +877,13 @@ void Gradients::integrationGradBdryFace_gpu() { } void Gradients::multInverse_gpu(const int numElems, const int offsetElems, const int elDof) { - double *d_gradUp = gradUp->ReadWrite(); + double* d_gradUp = gradUp->ReadWrite(); - const elementIndexingData &elem_data = gpu_precomputed_data_.element_indexing_data; + const elementIndexingData& elem_data = gpu_precomputed_data_.element_indexing_data; auto d_elem_dof_off = elem_data.dof_offset.Read(); auto d_elem_dofs_list = elem_data.dofs_list.Read(); - const double *d_invMArray = invMArray.Read(); + const double* d_invMArray = invMArray.Read(); auto d_posDofInvM = posDofInvM.Read(); const int totalDofs = vfes->GetNDofs(); diff --git a/src/gradients.hpp b/src/gradients.hpp index e889dc9f..3e780cde 100644 --- a/src/gradients.hpp +++ b/src/gradients.hpp @@ -46,67 +46,67 @@ using namespace std; class Gradients : public ParNonlinearForm { private: - ParFiniteElementSpace *vfes; - ParFiniteElementSpace *gradUpfes; + ParFiniteElementSpace* vfes; + ParFiniteElementSpace* gradUpfes; const int dim_; const int num_equation_; const int nvel_; - ParGridFunction *Up; - ParGridFunction *gradUp; + ParGridFunction* Up; + ParGridFunction* gradUp; - GasMixture *mixture; + GasMixture* mixture; // ParNonlinearForm *gradUp_A; - GradNonLinearForm *gradUp_A; + GradNonLinearForm* gradUp_A; - IntegrationRules *intRules; + IntegrationRules* intRules; const int intRuleType; - const precomputedIntegrationData &gpu_precomputed_data_; + const precomputedIntegrationData& gpu_precomputed_data_; Vector uk_el1; Vector uk_el2; Vector dun_face; - const int *h_num_elems_of_type; + const int* h_num_elems_of_type; // DenseMatrix *Me_inv; - Array &Me_inv; - Array Ke; + Array& Me_inv; + Array Ke; Vector Ke_array_; Array Ke_positions_; - Vector &invMArray; - Array &posDofInvM; + Vector& invMArray; + Array& posDofInvM; - const int &maxIntPoints_; - const int &maxDofs_; + const int& maxIntPoints_; + const int& maxDofs_; // gradients of shape functions for all nodes and weight multiplied by det(Jac) // at each integration point // Vector elemShapeDshapeWJ; // [...l_0(i),...,l_dof(i),l_0_x(i),...,l_dof_d(i), w_i*detJac_i ...] // Array elemPosQ_shapeDshapeWJ; // position and num. of integration points for each element - dataTransferArrays *transferUp; + dataTransferArrays* transferUp; Vector dun_shared_face; Vector dun_bdry_face; public: - Gradients(ParFiniteElementSpace *_vfes, ParFiniteElementSpace *_gradUpfes, int _dim, int _num_equation, - ParGridFunction *_Up, ParGridFunction *_gradUp, GasMixture *_mixture, GradNonLinearForm *_gradUp_A, - IntegrationRules *_intRules, int _intRuleType, const precomputedIntegrationData &gpu_precomputed_data, - Array &Me_inv, Vector &_invMArray, Array &_posDofInvM, const int &_maxIntPoints, - const int &_maxDofs, int nvel); + Gradients(ParFiniteElementSpace* _vfes, ParFiniteElementSpace* _gradUpfes, int _dim, int _num_equation, + ParGridFunction* _Up, ParGridFunction* _gradUp, GasMixture* _mixture, GradNonLinearForm* _gradUp_A, + IntegrationRules* _intRules, int _intRuleType, const precomputedIntegrationData& gpu_precomputed_data, + Array& Me_inv, Vector& _invMArray, Array& _posDofInvM, const int& _maxIntPoints, + const int& _maxDofs, int nvel); ~Gradients(); - void setParallelData(dataTransferArrays *_transferUp) { + void setParallelData(dataTransferArrays* _transferUp) { transferUp = _transferUp; dun_shared_face.UseDevice(true); - const sharedFaceIntegrationData &shared_face_data = gpu_precomputed_data_.shared_face_data; + const sharedFaceIntegrationData& shared_face_data = gpu_precomputed_data_.shared_face_data; // number of elements with shared faces int maxNumElems = shared_face_data.shared_elements_to_shared_faces.Size() / 7; @@ -133,7 +133,7 @@ class Gradients : public ParNonlinearForm { void multInverse_gpu(const int numElems, const int offsetElems, const int elDof); - void interpFaceData_gpu(const Vector &x, int elType, int elemOffset, int elDof); + void interpFaceData_gpu(const Vector& x, int elType, int elemOffset, int elDof); void evalFaceIntegrand_gpu(); #endif }; diff --git a/src/gslib_interpolator.cpp b/src/gslib_interpolator.cpp index 5046e57e..7016b7aa 100644 --- a/src/gslib_interpolator.cpp +++ b/src/gslib_interpolator.cpp @@ -50,7 +50,7 @@ InterpolatorBase::~InterpolatorBase() { #endif } -void InterpolatorBase::initializeFinder(ParMesh *mesh) { +void InterpolatorBase::initializeFinder(ParMesh* mesh) { dim_ = mesh->Dimension(); #ifdef HAVE_GSLIB finder_ = new FindPointsGSLIB(mesh->GetComm()); @@ -66,7 +66,7 @@ void InterpolatorBase::setInterpolationPoints() { mfem_error("InterpolatorBase::setInterpolationPoints() is not implemented"); } -void InterpolatorBase::interpolate(ParGridFunction *u) { +void InterpolatorBase::interpolate(ParGridFunction* u) { assert(dim_ == 2 || dim_ == 3); const int totalPts = xyz_.Size(); diff --git a/src/gslib_interpolator.hpp b/src/gslib_interpolator.hpp index 44bb1ae8..e8ce859e 100644 --- a/src/gslib_interpolator.hpp +++ b/src/gslib_interpolator.hpp @@ -56,7 +56,7 @@ class InterpolatorBase { #ifdef HAVE_GSLIB // mfem interpolator - mfem::FindPointsGSLIB *finder_; + mfem::FindPointsGSLIB* finder_; #endif public: @@ -71,7 +71,7 @@ class InterpolatorBase { virtual ~InterpolatorBase(); /** Initialize the internal FindPointsGSLIB object */ - void initializeFinder(mfem::ParMesh *mesh); + void initializeFinder(mfem::ParMesh* mesh); /** Sets the interpolation points from user input */ void setInterpolationPoints(mfem::Vector xyz); @@ -82,7 +82,7 @@ class InterpolatorBase { * * Must call initializeFinder and setInterpolationPoints prior. */ - void interpolate(mfem::ParGridFunction *u); + void interpolate(mfem::ParGridFunction* u); /** Write the data to an ascii file */ virtual void writeAscii(std::string oname, bool rank0 = true) const; diff --git a/src/independent_coupling.cpp b/src/independent_coupling.cpp index 32112ec3..778f07a6 100644 --- a/src/independent_coupling.cpp +++ b/src/independent_coupling.cpp @@ -35,7 +35,7 @@ #include "em_options.hpp" #include "quasimagnetostatic.hpp" -IndependentCoupling::IndependentCoupling(string &inputFileName, TPS::Tps *tps) : em_opt_() { +IndependentCoupling::IndependentCoupling(string& inputFileName, TPS::Tps* tps) : em_opt_() { qmsa_solver_ = new QuasiMagnetostaticSolverAxiSym(em_opt_, tps); flow_solver_ = new M2ulPhyS(inputFileName, tps); } diff --git a/src/independent_coupling.hpp b/src/independent_coupling.hpp index b95136af..cc90e68e 100644 --- a/src/independent_coupling.hpp +++ b/src/independent_coupling.hpp @@ -48,11 +48,11 @@ class Tps; class IndependentCoupling : public TPS::Solver { private: ElectromagneticOptions em_opt_; - QuasiMagnetostaticSolverAxiSym *qmsa_solver_; - M2ulPhyS *flow_solver_; + QuasiMagnetostaticSolverAxiSym* qmsa_solver_; + M2ulPhyS* flow_solver_; public: - IndependentCoupling(string &inputFileName, TPS::Tps *tps); + IndependentCoupling(string& inputFileName, TPS::Tps* tps); ~IndependentCoupling(); void parseSolverOptions() override; diff --git a/src/inletBC.cpp b/src/inletBC.cpp index e0f08e0a..3d416fc0 100644 --- a/src/inletBC.cpp +++ b/src/inletBC.cpp @@ -35,10 +35,10 @@ #include "riemann_solver.hpp" // TODO(kevin): non-reflecting bc for plasam. -InletBC::InletBC(MPI_Groups *_groupsMPI, Equations _eqSystem, RiemannSolverTPS *_rsolver, GasMixture *_mixture, - GasMixture *d_mixture, ParFiniteElementSpace *_vfes, IntegrationRules *_intRules, double &_dt, +InletBC::InletBC(MPI_Groups* _groupsMPI, Equations _eqSystem, RiemannSolverTPS* _rsolver, GasMixture* _mixture, + GasMixture* d_mixture, ParFiniteElementSpace* _vfes, IntegrationRules* _intRules, double& _dt, const int _dim, const int _num_equation, int _patchNumber, double _refLength, InletType _bcType, - const Array &_inputData, const int &_maxIntPoints, const int &_maxDofs, bool axisym) + const Array& _inputData, const int& _maxIntPoints, const int& _maxDofs, bool axisym) : BoundaryCondition(_rsolver, _mixture, _eqSystem, _vfes, _intRules, _dt, _dim, _num_equation, _patchNumber, _refLength, axisym), groupsMPI(_groupsMPI), @@ -111,7 +111,7 @@ InletBC::InletBC(MPI_Groups *_groupsMPI, Equations _eqSystem, RiemannSolverTPS * for (int bel = 0; bel < vfes->GetNBE(); bel++) { int attr = vfes->GetBdrAttribute(bel); if (attr == patchNumber) { - FaceElementTransformations *Tr = vfes->GetMesh()->GetBdrFaceTransformations(bel); + FaceElementTransformations* Tr = vfes->GetMesh()->GetBdrFaceTransformations(bel); Array dofs; vfes->GetElementVDofs(Tr->Elem1No, dofs); @@ -254,7 +254,7 @@ void InletBC::initBdrElemsShape() { for (int bel = 0; bel < vfes->GetNBE(); bel++) { int attr = vfes->GetBdrAttribute(bel); if (attr == patchNumber) { - FaceElementTransformations *Tr = vfes->GetMesh()->GetBdrFaceTransformations(bel); + FaceElementTransformations* Tr = vfes->GetMesh()->GetBdrFaceTransformations(bel); int elDofs = vfes->GetFE(Tr->Elem1No)->GetDof(); Array dofs; vfes->GetElementVDofs(Tr->Elem1No, dofs); @@ -323,16 +323,16 @@ void InletBC::initBCs() { } } -void InletBC::updateMean_gpu(ParGridFunction *Up, Vector &localMeanUp, const int num_equation, const int numBdrElems, - const int totDofs, Vector &bdrUp, Array &bdrElemsQ, Array &bdrDofs, - Vector &bdrShape, const int &maxIntPoints, const int &maxDofs) { +void InletBC::updateMean_gpu(ParGridFunction* Up, Vector& localMeanUp, const int num_equation, const int numBdrElems, + const int totDofs, Vector& bdrUp, Array& bdrElemsQ, Array& bdrDofs, + Vector& bdrShape, const int& maxIntPoints, const int& maxDofs) { #ifdef _GPU_ - const double *d_Up = Up->Read(); - double *d_localMeanUp = localMeanUp.Write(); - double *d_bdrUp = bdrUp.Write(); + const double* d_Up = Up->Read(); + double* d_localMeanUp = localMeanUp.Write(); + double* d_bdrUp = bdrUp.Write(); auto d_bdrElemQ = bdrElemsQ.Read(); auto d_bdrDofs = bdrDofs.Read(); - const double *d_bdrShape = bdrShape.Read(); + const double* d_bdrShape = bdrShape.Read(); int groupAveraging = numBdrElems; if (groupAveraging % 2 != 0) groupAveraging++; @@ -391,7 +391,7 @@ void InletBC::updateMean_gpu(ParGridFunction *Up, Vector &localMeanUp, const int #endif } -void InletBC::initBoundaryU(ParGridFunction *Up) { +void InletBC::initBoundaryU(ParGridFunction* Up) { Vector elUp; elUp.UseDevice(false); Vector shape; @@ -403,7 +403,7 @@ void InletBC::initBoundaryU(ParGridFunction *Up) { for (int bel = 0; bel < vfes->GetNBE(); bel++) { int attr = vfes->GetBdrAttribute(bel); if (attr == patchNumber) { - FaceElementTransformations *Tr = vfes->GetMesh()->GetBdrFaceTransformations(bel); + FaceElementTransformations* Tr = vfes->GetMesh()->GetBdrFaceTransformations(bel); int elDofs = vfes->GetFE(Tr->Elem1No)->GetDof(); @@ -442,8 +442,8 @@ void InletBC::initBoundaryU(ParGridFunction *Up) { boundaryUp.Read(); } -void InletBC::computeBdrFlux(Vector &normal, Vector &stateIn, DenseMatrix &gradState, Vector transip, double delta, - double time, double distance, Vector &bdrFlux) { +void InletBC::computeBdrFlux(Vector& normal, Vector& stateIn, DenseMatrix& gradState, Vector transip, double delta, + double time, double distance, Vector& bdrFlux) { Vector tangentW(dim_); for (int d = 0; d < dim_; d++) tangentW[d] = 0.0; switch (inletType_) { @@ -479,7 +479,7 @@ void InletBC::computeBdrFlux(Vector &normal, Vector &stateIn, DenseMatrix &gradS } } -void InletBC::updateMean(IntegrationRules *intRules, ParGridFunction *Up) { +void InletBC::updateMean(IntegrationRules* intRules, ParGridFunction* Up) { if (inletType_ == SUB_DENS_VEL) return; bdrN = 0; @@ -504,7 +504,7 @@ void InletBC::updateMean(IntegrationRules *intRules, ParGridFunction *Up) { for (int bel = 0; bel < vfes->GetNBE(); bel++) { int attr = vfes->GetBdrAttribute(bel); if (attr == patchNumber) { - FaceElementTransformations *Tr = vfes->GetMesh()->GetBdrFaceTransformations(bel); + FaceElementTransformations* Tr = vfes->GetMesh()->GetBdrFaceTransformations(bel); int elDofs = vfes->GetFE(Tr->Elem1No)->GetDof(); @@ -541,11 +541,11 @@ void InletBC::updateMean(IntegrationRules *intRules, ParGridFunction *Up) { } #endif - double *h_localMeanUp = localMeanUp.HostReadWrite(); + double* h_localMeanUp = localMeanUp.HostReadWrite(); int totNbdr = boundaryU.Size() / num_equation_; h_localMeanUp[num_equation_] = static_cast(totNbdr); - double *h_sum = glob_sum.HostWrite(); + double* h_sum = glob_sum.HostWrite(); MPI_Allreduce(h_localMeanUp, h_sum, num_equation_ + 1, MPI_DOUBLE, MPI_SUM, groupsMPI->getComm(patchNumber)); BoundaryCondition::copyValues(glob_sum, meanUp, 1. / h_sum[num_equation_]); @@ -563,18 +563,18 @@ void InletBC::updateMean(IntegrationRules *intRules, ParGridFunction *Up) { } } -void InletBC::integrationBC(Vector &y, // output - const Vector &x, const elementIndexingData &elem_index_data, ParGridFunction *Up, - ParGridFunction *gradUp, const boundaryFaceIntegrationData &boundary_face_data, - const int &maxIntPoints, const int &maxDofs) { +void InletBC::integrationBC(Vector& y, // output + const Vector& x, const elementIndexingData& elem_index_data, ParGridFunction* Up, + ParGridFunction* gradUp, const boundaryFaceIntegrationData& boundary_face_data, + const int& maxIntPoints, const int& maxDofs) { interpInlet_gpu(x, elem_index_data, boundary_face_data, listElems, offsetsBoundaryU); integrateInlets_gpu(y, // output x, elem_index_data, boundary_face_data, listElems, offsetsBoundaryU); } -void InletBC::subsonicNonReflectingDensityVelocity(Vector &normal, Vector &stateIn, DenseMatrix &gradState, - Vector &bdrFlux) { +void InletBC::subsonicNonReflectingDensityVelocity(Vector& normal, Vector& stateIn, DenseMatrix& gradState, + Vector& bdrFlux) { const double gamma = mixture->GetSpecificHeatRatio(); // const double p = eqState->ComputePressure(stateIn, dim); @@ -726,7 +726,7 @@ void InletBC::subsonicNonReflectingDensityVelocity(Vector &normal, Vector &state rsolver->Eval(stateIn, state2, normal, bdrFlux, true); } -void InletBC::subsonicReflectingDensityVelocity(Vector &normal, Vector &stateIn, Vector &bdrFlux) { +void InletBC::subsonicReflectingDensityVelocity(Vector& normal, Vector& stateIn, Vector& bdrFlux) { // NOTE: it is likely that for two-temperature case inlet will also specify electron temperature, // whether it is equal to the gas temperature or not. const double p = mixture->ComputePressure(stateIn); @@ -757,8 +757,8 @@ void InletBC::subsonicReflectingDensityVelocity(Vector &normal, Vector &stateIn, /// Specifying subsonic vel and rho wher v is relative to the FACE-coordinate system specifyied by the face normal and /// tangentW -void InletBC::subsonicReflectingDensityVelocityFace(Vector &normal, Vector tangentW, Vector &stateIn, Vector transip, - double time, Vector &bdrFlux) { +void InletBC::subsonicReflectingDensityVelocityFace(Vector& normal, Vector tangentW, Vector& stateIn, Vector transip, + double time, Vector& bdrFlux) { const double p = mixture->ComputePressure(stateIn); Vector state2(num_equation_); @@ -863,22 +863,22 @@ void InletBC::subsonicReflectingDensityVelocityFace(Vector &normal, Vector tange bdrN++; } -void InletBC::integrateInlets_gpu(Vector &y, const Vector &x, const elementIndexingData &elem_index_data, - const boundaryFaceIntegrationData &boundary_face_data, Array &listElems, - Array &offsetsBoundaryU) { +void InletBC::integrateInlets_gpu(Vector& y, const Vector& x, const elementIndexingData& elem_index_data, + const boundaryFaceIntegrationData& boundary_face_data, Array& listElems, + Array& offsetsBoundaryU) { #ifdef _GPU_ - double *d_y = y.ReadWrite(); - const int *d_elem_dofs_list = elem_index_data.dofs_list.Read(); - const int *d_elem_dof_off = elem_index_data.dof_offset.Read(); - const int *d_elem_dof_num = elem_index_data.dof_number.Read(); - const double *d_face_shape = boundary_face_data.shape.Read(); - const double *d_weight = boundary_face_data.quad_weight.Read(); - const int *d_face_el = boundary_face_data.el.Read(); - const int *d_face_num_quad = boundary_face_data.num_quad.Read(); - const int *d_listElems = listElems.Read(); + double* d_y = y.ReadWrite(); + const int* d_elem_dofs_list = elem_index_data.dofs_list.Read(); + const int* d_elem_dof_off = elem_index_data.dof_offset.Read(); + const int* d_elem_dof_num = elem_index_data.dof_number.Read(); + const double* d_face_shape = boundary_face_data.shape.Read(); + const double* d_weight = boundary_face_data.quad_weight.Read(); + const int* d_face_el = boundary_face_data.el.Read(); + const int* d_face_num_quad = boundary_face_data.num_quad.Read(); + const int* d_listElems = listElems.Read(); // const int *d_offsetBoundaryU = offsetsBoundaryU.Read(); - const double *d_flux = face_flux_.Read(); + const double* d_flux = face_flux_.Read(); const int totDofs = x.Size() / num_equation_; const int numBdrElem = listElems.Size(); @@ -928,24 +928,24 @@ void InletBC::integrateInlets_gpu(Vector &y, const Vector &x, const elementIndex #endif } -void InletBC::interpInlet_gpu(const mfem::Vector &x, const elementIndexingData &elem_index_data, - const boundaryFaceIntegrationData &boundary_face_data, Array &listElems, - Array &offsetsBoundaryU) { +void InletBC::interpInlet_gpu(const mfem::Vector& x, const elementIndexingData& elem_index_data, + const boundaryFaceIntegrationData& boundary_face_data, Array& listElems, + Array& offsetsBoundaryU) { #ifdef _GPU_ - const double *d_inputState = inputState.Read(); - const double *d_U = x.Read(); - const int *d_elem_dofs_list = elem_index_data.dofs_list.Read(); - const int *d_elem_dof_off = elem_index_data.dof_offset.Read(); - const int *d_elem_dof_num = elem_index_data.dof_number.Read(); - const double *d_face_shape = boundary_face_data.shape.Read(); - const double *d_normal = boundary_face_data.normal.Read(); - const double *d_xyz = boundary_face_data.xyz.Read(); - const int *d_face_el = boundary_face_data.el.Read(); - const int *d_face_num_quad = boundary_face_data.num_quad.Read(); - const int *d_listElems = listElems.Read(); + const double* d_inputState = inputState.Read(); + const double* d_U = x.Read(); + const int* d_elem_dofs_list = elem_index_data.dofs_list.Read(); + const int* d_elem_dof_off = elem_index_data.dof_offset.Read(); + const int* d_elem_dof_num = elem_index_data.dof_number.Read(); + const double* d_face_shape = boundary_face_data.shape.Read(); + const double* d_normal = boundary_face_data.normal.Read(); + const double* d_xyz = boundary_face_data.xyz.Read(); + const int* d_face_el = boundary_face_data.el.Read(); + const int* d_face_num_quad = boundary_face_data.num_quad.Read(); + const int* d_listElems = listElems.Read(); // const int *d_offsetBoundaryU = offsetsBoundaryU.Read(); - double *d_flux = face_flux_.Write(); + double* d_flux = face_flux_.Write(); const int totDofs = x.Size() / num_equation_; const int numBdrElem = listElems.Size(); @@ -966,8 +966,8 @@ void InletBC::interpInlet_gpu(const mfem::Vector &x, const elementIndexingData & const int maxIntPoints = maxIntPoints_; const int maxDofs = maxDofs_; - const RiemannSolverTPS *d_rsolver = rsolver; - GasMixture *d_mix = d_mixture_; + const RiemannSolverTPS* d_rsolver = rsolver; + GasMixture* d_mix = d_mixture_; // MFEM_FORALL(n, numBdrElem, { MFEM_FORALL_2D(n, numBdrElem, maxIntPoints, 1, 1, { diff --git a/src/inletBC.hpp b/src/inletBC.hpp index 0d41ddfb..dbb43791 100644 --- a/src/inletBC.hpp +++ b/src/inletBC.hpp @@ -45,9 +45,9 @@ using namespace mfem; class InletBC : public BoundaryCondition { private: - MPI_Groups *groupsMPI; + MPI_Groups* groupsMPI; - GasMixture *d_mixture_; // used only in the device + GasMixture* d_mixture_; // used only in the device const InletType inletType_; @@ -68,8 +68,8 @@ class InletBC : public BoundaryCondition { Array bdrElemsQ; // element dofs and face num. of integration points Array bdrDofs; // indexes of the D Vector bdrShape; // shape functions evaluated at the integration points - const int &maxIntPoints_; - const int &maxDofs_; + const int& maxIntPoints_; + const int& maxDofs_; // local vector for mean calculation Vector localMeanUp; @@ -82,50 +82,50 @@ class InletBC : public BoundaryCondition { Vector inverseNorm2cartesian; void initBdrElemsShape(); - void initBoundaryU(ParGridFunction *Up); + void initBoundaryU(ParGridFunction* Up); - void subsonicReflectingDensityVelocity(Vector &normal, Vector &stateIn, Vector &bdrFlux); + void subsonicReflectingDensityVelocity(Vector& normal, Vector& stateIn, Vector& bdrFlux); - void subsonicReflectingDensityVelocityFace(Vector &normal, Vector tangentW, Vector &stateIn, Vector transip, - double time, Vector &bdrFlux); + void subsonicReflectingDensityVelocityFace(Vector& normal, Vector tangentW, Vector& stateIn, Vector transip, + double time, Vector& bdrFlux); - void subsonicNonReflectingDensityVelocity(Vector &normal, Vector &stateIn, DenseMatrix &gradState, Vector &bdrFlux); + void subsonicNonReflectingDensityVelocity(Vector& normal, Vector& stateIn, DenseMatrix& gradState, Vector& bdrFlux); - virtual void updateMean(IntegrationRules *intRules, ParGridFunction *Up); + virtual void updateMean(IntegrationRules* intRules, ParGridFunction* Up); public: - InletBC(MPI_Groups *_groupsMPI, Equations _eqSystem, RiemannSolverTPS *rsolver_, GasMixture *_mixture, - GasMixture *d_mixture, ParFiniteElementSpace *_vfes, IntegrationRules *_intRules, double &_dt, const int _dim, + InletBC(MPI_Groups* _groupsMPI, Equations _eqSystem, RiemannSolverTPS* rsolver_, GasMixture* _mixture, + GasMixture* d_mixture, ParFiniteElementSpace* _vfes, IntegrationRules* _intRules, double& _dt, const int _dim, const int _num_equation, int _patchNumber, double _refLength, InletType _bcType, - const Array &_inputData, const int &_maxIntPoints, const int &maxDofs, bool axisym); + const Array& _inputData, const int& _maxIntPoints, const int& maxDofs, bool axisym); ~InletBC(); - void computeBdrFlux(Vector &normal, Vector &stateIn, DenseMatrix &gradState, Vector transip, double delta, - double time, double distance, Vector &bdrFlux); + void computeBdrFlux(Vector& normal, Vector& stateIn, DenseMatrix& gradState, Vector transip, double delta, + double time, double distance, Vector& bdrFlux); virtual void initBCs(); - virtual void integrationBC(Vector &y, // output - const Vector &x, const elementIndexingData &elem_index_data, ParGridFunction *Up, - ParGridFunction *gradUp, const boundaryFaceIntegrationData &boundary_face_data, - const int &maxIntPoints, const int &maxDofs); + virtual void integrationBC(Vector& y, // output + const Vector& x, const elementIndexingData& elem_index_data, ParGridFunction* Up, + ParGridFunction* gradUp, const boundaryFaceIntegrationData& boundary_face_data, + const int& maxIntPoints, const int& maxDofs); - static void updateMean_gpu(ParGridFunction *Up, Vector &localMeanUp, const int _num_equation, const int numBdrElems, - const int totalDofs, Vector &bdrUp, Array &bdrElemsQ, Array &bdrDofs, - Vector &bdrShape, const int &maxIntPoints, const int &maxDofs); + static void updateMean_gpu(ParGridFunction* Up, Vector& localMeanUp, const int _num_equation, const int numBdrElems, + const int totalDofs, Vector& bdrUp, Array& bdrElemsQ, Array& bdrDofs, + Vector& bdrShape, const int& maxIntPoints, const int& maxDofs); // functions for BC integration on GPU - void integrateInlets_gpu(Vector &y, // output - const Vector &x, const elementIndexingData &elem_index_data, - const boundaryFaceIntegrationData &boundary_face_data, Array &listElems, - Array &offsetsBoundaryU); - void interpInlet_gpu(const Vector &x, const elementIndexingData &elem_index_data, - const boundaryFaceIntegrationData &boundary_face_data, Array &listElems, - Array &offsetsBoundaryU); + void integrateInlets_gpu(Vector& y, // output + const Vector& x, const elementIndexingData& elem_index_data, + const boundaryFaceIntegrationData& boundary_face_data, Array& listElems, + Array& offsetsBoundaryU); + void interpInlet_gpu(const Vector& x, const elementIndexingData& elem_index_data, + const boundaryFaceIntegrationData& boundary_face_data, Array& listElems, + Array& offsetsBoundaryU); #ifdef _GPU_ - MFEM_HOST_DEVICE void pluginInputState(const double *inputState, double *u2, const int nvel, + MFEM_HOST_DEVICE void pluginInputState(const double* inputState, double* u2, const int nvel, const int numActiveSpecies) { u2[0] = inputState[0]; for (int v = 0; v < nvel; v++) u2[1 + v] = inputState[0] * inputState[1 + v]; @@ -135,10 +135,10 @@ class InletBC : public BoundaryCondition { return; } - static MFEM_HOST_DEVICE void computeSubDenseVel(const double *u1, double *u2, const double *nor, - const double *inputState, const double &gamma, const double &Rg, - const int &dim, const int &num_equation, const WorkingFluid &fluid, - const Equations &eqSystem, const int &thrd, const int &maxThread) { + static MFEM_HOST_DEVICE void computeSubDenseVel(const double* u1, double* u2, const double* nor, + const double* inputState, const double& gamma, const double& Rg, + const int& dim, const int& num_equation, const WorkingFluid& fluid, + const Equations& eqSystem, const int& thrd, const int& maxThread) { // assumes there at least as many threads as number of equations MFEM_SHARED double KE[3]; MFEM_SHARED double p; @@ -165,10 +165,10 @@ class InletBC : public BoundaryCondition { } } - static MFEM_HOST_DEVICE void computeSubDenseVel_gpu_serial(const double *u1, double *u2, const double *nor, - const double *inputState, const double &gamma, - const double &Rg, const int &dim, const int &num_equation, - const WorkingFluid &fluid) { + static MFEM_HOST_DEVICE void computeSubDenseVel_gpu_serial(const double* u1, double* u2, const double* nor, + const double* inputState, const double& gamma, + const double& Rg, const int& dim, const int& num_equation, + const WorkingFluid& fluid) { // assumes there at least as many threads as number of equations double KE[3]; double p; diff --git a/src/io.cpp b/src/io.cpp index f7f92509..4171c0e4 100644 --- a/src/io.cpp +++ b/src/io.cpp @@ -179,8 +179,8 @@ void M2ulPhyS::read_restart_files_hdf5(hid_t file, bool serialized_read) { // rhsOperator has not been constructed yet. As a workaround, // that code is duplicated here. // TODO(kevin): use mixture comptue primitive. - double *dataUp = Up->HostReadWrite(); - const double *x = U->HostRead(); + double* dataUp = Up->HostReadWrite(); + const double* x = U->HostRead(); for (int i = 0; i < vfes->GetNDofs(); i++) { Vector conserved(num_equation); Vector primitive(num_equation); @@ -270,7 +270,7 @@ void M2ulPhyS::restart_files_hdf5(string mode, string inputFileName) { return; } -void partitioning_file_hdf5(std::string mode, MPI_Groups *groupsMPI, int nelemGlobal, Array &partitioning, +void partitioning_file_hdf5(std::string mode, MPI_Groups* groupsMPI, int nelemGlobal, Array& partitioning, std::string pathName) { MPI_Comm TPSCommWorld = groupsMPI->getTPSCommWorld(); const bool rank0 = groupsMPI->isWorldRoot(); @@ -396,7 +396,7 @@ hsize_t get_variable_size_hdf5(hid_t file, std::string name) { } // convenience function to read solution data for parallel restarts -void read_variable_data_hdf5(hid_t file, string varName, size_t index, double *data) { +void read_variable_data_hdf5(hid_t file, string varName, size_t index, double* data) { hid_t data_soln; herr_t status; @@ -409,7 +409,7 @@ void read_variable_data_hdf5(hid_t file, string varName, size_t index, double *d IOOptions::IOOptions() : output_dir_("output"), restart_dir_("./"), restart_mode_("standard") {} -void IOOptions::read(TPS::Tps *tps, std::string prefix) { +void IOOptions::read(TPS::Tps* tps, std::string prefix) { std::string basename; if (!prefix.empty()) { basename = prefix + "/io"; @@ -458,7 +458,7 @@ void IOOptions::setRestartFlags() { } // convenience function to read and distribute solution data for serialized restarts -void IOFamily::readDistributeSerializedVariable(hid_t file, const IOVar &var, int numDof, double *data) { +void IOFamily::readDistributeSerializedVariable(hid_t file, const IOVar& var, int numDof, double* data) { std::string varName = group_ + "/" + var.varName_; if (rank0_) grvy_printf(ginfo, "--> Reading h5 path = %s\n", varName.c_str()); @@ -468,7 +468,7 @@ void IOFamily::readDistributeSerializedVariable(hid_t file, const IOVar &var, in const int myrank = pfunc_->ParFESpace()->GetMyRank(); const int nprocs = pfunc_->ParFESpace()->GetNRanks(); - Array &partitioning = *partitioning_; + Array& partitioning = *partitioning_; assert(partitioning.Size() == global_ne_); const unsigned int numStateVars = pfunc_->Size() / pfunc_->ParFESpace()->GetNDofs(); @@ -565,7 +565,7 @@ void IOFamily::readDistributeSerializedVariable(hid_t file, const IOVar &var, in } // convenience function to write HDF5 data -void write_variable_data_hdf5(hid_t group, string varName, hid_t dataspace, const double *data) { +void write_variable_data_hdf5(hid_t group, string varName, hid_t dataspace, const double* data) { hid_t data_soln; herr_t status; assert(group >= 0); @@ -582,7 +582,7 @@ void write_variable_data_hdf5(hid_t group, string varName, hid_t dataspace, cons // Routines for I/O data organizer helper class // --------------------------------------------- -IOFamily::IOFamily(std::string desc, std::string grp, mfem::ParGridFunction *pf) +IOFamily::IOFamily(std::string desc, std::string grp, mfem::ParGridFunction* pf) : description_(desc), group_(grp), pfunc_(pf) { rank0_ = (pfunc_->ParFESpace()->GetMyRank() == 0); @@ -600,13 +600,13 @@ IOFamily::IOFamily(std::string desc, std::string grp, mfem::ParGridFunction *pf) void IOFamily::serializeForWrite() { MPI_Comm comm = this->pfunc_->ParFESpace()->GetComm(); - const Array &partitioning = *(this->partitioning_); + const Array& partitioning = *(this->partitioning_); assert(partitioning.Size() == global_ne_); - const int *locToGlobElem = this->local_to_global_elem_; + const int* locToGlobElem = this->local_to_global_elem_; assert(locToGlobElem != NULL); - ParGridFunction *pfunc = this->pfunc_; + ParGridFunction* pfunc = this->pfunc_; if (rank0_) { grvy_printf(ginfo, "Generating serialized restart file (group %s...)\n", this->group_.c_str()); // copy my own data @@ -637,7 +637,7 @@ void IOFamily::serializeForWrite() { } // Second, receive the messages - Vector *soln = new Vector[nprocs]; + Vector* soln = new Vector[nprocs]; for (int irank = 1; irank < nprocs; irank++) { soln[irank].SetSize(nvar[irank]); MPI_Recv(soln[irank].HostReadWrite(), nvar[irank], MPI_DOUBLE, irank, 0, comm, MPI_STATUS_IGNORE); @@ -649,11 +649,11 @@ void IOFamily::serializeForWrite() { for (int gelem = 0; gelem < global_ne_; gelem++) { int from_rank = partitioning[gelem]; if (from_rank != 0) { - const double *d_soln = soln[from_rank].HostRead(); + const double* d_soln = soln[from_rank].HostRead(); this->serial_fes_->GetElementVDofs(gelem, gvdofs); lsoln.SetSize(gvdofs.Size()); - double *d_lsoln = lsoln.HostWrite(); + double* d_lsoln = lsoln.HostWrite(); for (int i = 0; i < lsoln.Size(); i++) { d_lsoln[i] = d_soln[nvar[from_rank] + i]; @@ -681,12 +681,12 @@ void IOFamily::serializeForWrite() { // Second, fill the send buffer Vector send_buffer(nvar); - double *h_send_buffer = send_buffer.HostWrite(); + double* h_send_buffer = send_buffer.HostWrite(); int n = 0; for (int elem = 0; elem < local_ne_; elem++) { this->pfunc_->ParFESpace()->GetElementVDofs(elem, lvdofs); pfunc->GetSubVector(lvdofs, lsoln); // work for gpu build? - const double *h_lsoln = lsoln.HostRead(); + const double* h_lsoln = lsoln.HostRead(); for (int i = 0; i < lsoln.Size(); i++) { h_send_buffer[n + i] = h_lsoln[i]; } @@ -711,7 +711,7 @@ void IOFamily::writePartitioned(hid_t file) { assert(group >= 0); // get pointer to raw data - const double *data = pfunc_->HostRead(); + const double* data = pfunc_->HostRead(); // save raw data for (auto var : vars_) { @@ -743,7 +743,7 @@ void IOFamily::writeSerial(hid_t file) { // get pointer to raw data assert(serial_sol_ != NULL); - const double *data = serial_sol_->HostRead(); + const double* data = serial_sol_->HostRead(); // save raw data for (auto var : vars_) { @@ -763,7 +763,7 @@ void IOFamily::readPartitioned(hid_t file) { assert((int)numInSoln == local_ndofs_); // get pointer to raw data - double *data = pfunc_->HostWrite(); + double* data = pfunc_->HostWrite(); // read from file into appropriate spot in data for (auto var : vars_) { @@ -784,7 +784,7 @@ void IOFamily::readSerial(hid_t file) { } // get pointer to raw data - double *data = pfunc_->HostWrite(); + double* data = pfunc_->HostWrite(); // read on rank 0 and distribute into data for (auto var : vars_) { @@ -803,7 +803,7 @@ void IOFamily::readChangeOrder(hid_t file, int read_order) { // Set up "auxilliary" ParGridFunction, to read data into before order change const int nvars = vars_.size(); aux_pfes_ = new ParFiniteElementSpace(pfunc_->ParFESpace()->GetParMesh(), aux_fec_, nvars, Ordering::byNODES); - double *aux_U_data = new double[nvars * aux_pfes_->GetNDofs()]; + double* aux_U_data = new double[nvars * aux_pfes_->GetNDofs()]; aux_pfunc_ = new ParGridFunction(aux_pfes_, aux_U_data); const int aux_dof = aux_pfes_->GetNDofs(); @@ -813,7 +813,7 @@ void IOFamily::readChangeOrder(hid_t file, int read_order) { assert((int)numInSoln == aux_dof); // get pointer to raw data - double *data = aux_pfunc_->HostWrite(); + double* data = aux_pfunc_->HostWrite(); for (auto var : vars_) { if (var.inRestartFile_) { @@ -848,8 +848,8 @@ void IOFamily::readChangeOrder(hid_t file, int read_order) { } // register a new IO family which maps to a ParGridFunction -void IODataOrganizer::registerIOFamily(std::string description, std::string group, ParGridFunction *pfunc, - bool auxRestart, bool inRestartFile, FiniteElementCollection *fec) { +void IODataOrganizer::registerIOFamily(std::string description, std::string group, ParGridFunction* pfunc, + bool auxRestart, bool inRestartFile, FiniteElementCollection* fec) { IOFamily family(description, group, pfunc); family.allowsAuxRestart_ = auxRestart; family.inRestartFile_ = inRestartFile; @@ -877,12 +877,12 @@ int IODataOrganizer::getIOFamilyIndex(std::string group) const { return (-1); } -void IODataOrganizer::initializeSerial(bool root, bool serial, Mesh *serial_mesh, int *locToGlob, Array *part) { +void IODataOrganizer::initializeSerial(bool root, bool serial, Mesh* serial_mesh, int* locToGlob, Array* part) { supports_serial_ = serial; // loop through families for (size_t n = 0; n < families_.size(); n++) { - IOFamily &fam = families_[n]; + IOFamily& fam = families_[n]; fam.serial_fes_ = NULL; fam.serial_sol_ = NULL; @@ -891,7 +891,7 @@ void IODataOrganizer::initializeSerial(bool root, bool serial, Mesh *serial_mesh fam.local_to_global_elem_ = locToGlob; fam.partitioning_ = part; if (root) { - const FiniteElementCollection *fec = fam.pfunc_->ParFESpace()->FEColl(); + const FiniteElementCollection* fec = fam.pfunc_->ParFESpace()->FEColl(); int numVars = fam.pfunc_->Size() / fam.pfunc_->ParFESpace()->GetNDofs(); fam.serial_fes_ = new FiniteElementSpace(serial_mesh, fec, numVars, Ordering::byNODES); diff --git a/src/io.hpp b/src/io.hpp index 4685132b..f2b7f8ad 100644 --- a/src/io.hpp +++ b/src/io.hpp @@ -72,7 +72,7 @@ class IOOptions { bool restart_serial_read_ = false; bool restart_serial_write_ = false; - void read(TPS::Tps *tps, std::string prefix = std::string("")); + void read(TPS::Tps* tps, std::string prefix = std::string("")); void setRestartFlags(); }; @@ -135,7 +135,7 @@ class IOFamily { std::string group_; /** mfem::ParGridFunction owning the data to be written or read into */ - mfem::ParGridFunction *pfunc_ = nullptr; + mfem::ParGridFunction* pfunc_ = nullptr; /** Variables that make up the family */ std::vector vars_; @@ -147,28 +147,28 @@ class IOFamily { bool inRestartFile_; /** mfem::FiniteElementSpace for serial mesh (used if serial read and/or write requested) */ - mfem::FiniteElementSpace *serial_fes_ = nullptr; + mfem::FiniteElementSpace* serial_fes_ = nullptr; /** mfem::GridFunction on serial mesh (used if serial read and/or write requested) */ - mfem::GridFunction *serial_sol_ = nullptr; + mfem::GridFunction* serial_sol_ = nullptr; /** Map from local to global element numbering (used for serial read/write) */ - int *local_to_global_elem_ = nullptr; + int* local_to_global_elem_ = nullptr; /** Partition array; partitioning[i] = mpi rank that owns the ith element (global numbering) */ - mfem::Array *partitioning_ = nullptr; + mfem::Array* partitioning_ = nullptr; /** mfem::FiniteElementCollection used by pfunc_ (used for variable order read) */ - mfem::FiniteElementCollection *fec_ = nullptr; + mfem::FiniteElementCollection* fec_ = nullptr; /** mfem::FiniteElementCollection with read order (used for variable order read) */ - mfem::FiniteElementCollection *aux_fec_ = nullptr; + mfem::FiniteElementCollection* aux_fec_ = nullptr; /** mfem::FiniteElementCollection with read order elements (used for variable order read) */ - mfem::ParFiniteElementSpace *aux_pfes_ = nullptr; + mfem::ParFiniteElementSpace* aux_pfes_ = nullptr; /** mfem::ParGridFunction with read order elements (used for variable order read) */ - mfem::ParGridFunction *aux_pfunc_ = nullptr; + mfem::ParGridFunction* aux_pfunc_ = nullptr; /** * @brief Prepare for serial write by collecting data onto rank 0 @@ -185,7 +185,7 @@ class IOFamily { * @param file Open HDF5 file handle (e.g., as returned by H5Fcreate or H5Fopen) * @param var IOVar for the variable being read */ - void readDistributeSerializedVariable(hid_t file, const IOVar &var, int numDof, double *data); + void readDistributeSerializedVariable(hid_t file, const IOVar& var, int numDof, double* data); public: /** @@ -195,7 +195,7 @@ class IOFamily { * @param grp Group name * @param pf Pointer to mfem::ParGridFunction that owns the data */ - IOFamily(std::string desc, std::string grp, mfem::ParGridFunction *pf); + IOFamily(std::string desc, std::string grp, mfem::ParGridFunction* pf); /** @brief "Partitioned" write (each mpi rank writes its local part of the ParGridFunction to a separate file) */ void writePartitioned(hid_t file); @@ -258,8 +258,8 @@ class IODataOrganizer { * @param inRestartFile If false, skip family on read (optional, defaults to true) * @param fec FiniteElementCollection for grid function (optional, only used for different order read) */ - void registerIOFamily(std::string description, std::string group, mfem::ParGridFunction *pfunc, - bool auxRestart = true, bool inRestartFile = true, mfem::FiniteElementCollection *fec = NULL); + void registerIOFamily(std::string description, std::string group, mfem::ParGridFunction* pfunc, + bool auxRestart = true, bool inRestartFile = true, mfem::FiniteElementCollection* fec = NULL); /** Destructor */ ~IODataOrganizer(); @@ -282,7 +282,7 @@ class IODataOrganizer { * @param locToGlob Map from local element index to global element index * @param part Map from global element index to mpi rank owning that element */ - void initializeSerial(bool root, bool serial, mfem::Mesh *serial_mesh, int *locToGlob, mfem::Array *part); + void initializeSerial(bool root, bool serial, mfem::Mesh* serial_mesh, int* locToGlob, mfem::Array* part); /** * @brief Write data from all families @@ -339,7 +339,7 @@ hsize_t get_variable_size_hdf5(hid_t file, std::string name); * @param index Starting location within data buffer * @param data Data buffer */ -void read_variable_data_hdf5(hid_t file, std::string varName, size_t index, double *data); +void read_variable_data_hdf5(hid_t file, std::string varName, size_t index, double* data); /** * @brief Write data to an hdf5 file @@ -349,7 +349,7 @@ void read_variable_data_hdf5(hid_t file, std::string varName, size_t index, doub * @param dataspace HDF5 dataspace (e.g., as returned by H5Screate_simple) * @param data Buffer with data to write */ -void write_variable_data_hdf5(hid_t group, std::string varName, hid_t dataspace, const double *data); +void write_variable_data_hdf5(hid_t group, std::string varName, hid_t dataspace, const double* data); /** * @brief Read/write partitioning information @@ -362,6 +362,6 @@ void write_variable_data_hdf5(hid_t group, std::string varName, hid_t dataspace, * @todo Refactor this function to make it more generic and fit better * into the IODataOrganizer paradigm. */ -void partitioning_file_hdf5(std::string mode, MPI_Groups *groupsMPI, int nelemGlobal, mfem::Array &partitioning, +void partitioning_file_hdf5(std::string mode, MPI_Groups* groupsMPI, int nelemGlobal, mfem::Array& partitioning, std::string fileName = "./"); #endif // IO_HPP_ diff --git a/src/loMach.cpp b/src/loMach.cpp index 6f2a8169..d2a0f225 100644 --- a/src/loMach.cpp +++ b/src/loMach.cpp @@ -61,7 +61,7 @@ using namespace mfem; using namespace mfem::common; -LoMachSolver::LoMachSolver(TPS::Tps *tps) +LoMachSolver::LoMachSolver(TPS::Tps* tps) : tpsP_(tps), groupsMPI(new MPI_Groups(tps->getTPSCommWorld())), nprocs_(groupsMPI->getTPSWorldSize()), @@ -92,7 +92,7 @@ LoMachSolver::~LoMachSolver() { delete flow_; delete thermo_; delete sponge_; - delete turbModel_; + // delete turbModel_; // is this causing the seg faults? delete avg_opts_; delete average_; delete meshData_; @@ -417,17 +417,25 @@ void LoMachSolver::solveStep() { if (loMach_opts_.ts_opts_.integrator_type_ == LoMachTemporalOptions::CURL_CURL) { SetTimeIntegrationCoefficients(iter - iter_start_); extData_->step(); + // if (rank0_ == true) std::cout << "external data complete" << endl; + sw_thermChem_.Start(); thermo_->step(); sw_thermChem_.Stop(); + // if (rank0_ == true) std::cout << "thermoChem complete" << endl; + sw_flow_.Start(); if (!disable_flow_) { flow_->step(); } sw_flow_.Stop(); + // if (rank0_ == true) std::cout << "flow complete" << endl; + sw_turb_.Start(); turbModel_->step(); sw_turb_.Stop(); + // if (rank0_ == true) std::cout << "turbulence model complete" << endl; + } else { if (rank0_) std::cout << "Time integration not updated." << endl; exit(1); @@ -564,7 +572,7 @@ void LoMachSolver::updateTimestep() { auto dataU = flow_->getCurrentVelocity()->HostRead(); // comes in divided by order - const double *dataD = (meshData_->getGridScale())->HostRead(); + const double* dataD = (meshData_->getGridScale())->HostRead(); int Sdof = meshData_->getDofSize(); for (int n = 0; n < Sdof; n++) { @@ -581,7 +589,7 @@ void LoMachSolver::updateTimestep() { double dtInst_conv = CFL_ / std::max(max_speed, 1.0e-12); double dtInst = dtInst_conv; - double &dt = temporal_coeff_.dt; + double& dt = temporal_coeff_.dt; if (dtInst > dt) { dt = dt * (1.0 + dtFactor); dt = std::min(dt, dtInst); @@ -609,7 +617,7 @@ double LoMachSolver::computeCFL() { // comes in divided by order auto dataU = flow_->getCurrentVelocity()->HostRead(); - const double *dataD = (meshData_->getGridScale())->HostRead(); + const double* dataD = (meshData_->getGridScale())->HostRead(); int Sdof = meshData_->getDofSize(); MPI_Barrier(groupsMPI->getTPSCommWorld()); @@ -634,7 +642,7 @@ void LoMachSolver::setTimestep() { double convT_lcl = 1.0e-12; double min_convT = 1.0; double Umag; - const double *dataD = (meshData_->getGridScale())->HostRead(); + const double* dataD = (meshData_->getGridScale())->HostRead(); int Sdof = meshData_->getDofSize(); // dt_fixed is initialized to -1, so if it is positive, diff --git a/src/loMach.hpp b/src/loMach.hpp index 7034df7c..54263738 100644 --- a/src/loMach.hpp +++ b/src/loMach.hpp @@ -109,13 +109,13 @@ struct temporalSchemeCoefficients { class LoMachSolver : public TPS::PlasmaSolver { protected: // pointer to parent Tps class - TPS::Tps *tpsP_ = nullptr; + TPS::Tps* tpsP_ = nullptr; // Run options LoMachOptions loMach_opts_; // MPI helpers - MPI_Groups *groupsMPI = nullptr; + MPI_Groups* groupsMPI = nullptr; int nprocs_; // total number of MPI procs int rank_; // local MPI rank bool rank0_; // flag to indicate rank 0 @@ -126,18 +126,18 @@ class LoMachSolver : public TPS::PlasmaSolver { bool disable_flow_; // Model classes - MeshBase *meshData_ = nullptr; - TurbModelBase *turbModel_ = nullptr; - ThermoChemModelBase *thermo_ = nullptr; - FlowBase *flow_ = nullptr; - SpongeBase *sponge_ = nullptr; - ExternalDataBase *extData_ = nullptr; - AveragingOptions *avg_opts_ = nullptr; - Averaging *average_ = nullptr; + MeshBase* meshData_ = nullptr; + TurbModelBase* turbModel_ = nullptr; + ThermoChemModelBase* thermo_ = nullptr; + FlowBase* flow_ = nullptr; + SpongeBase* sponge_ = nullptr; + ExternalDataBase* extData_ = nullptr; + AveragingOptions* avg_opts_ = nullptr; + Averaging* average_ = nullptr; // Mesh and geometry related - ParMesh *pmesh_ = nullptr; - Mesh *serial_mesh_ = nullptr; + ParMesh* pmesh_ = nullptr; + Mesh* serial_mesh_ = nullptr; int dim_; int nvel_; @@ -160,10 +160,10 @@ class LoMachSolver : public TPS::PlasmaSolver { double xmax_, ymax_, zmax_; /// Scalar \f$H^1\f$ finite element collection. - FiniteElementCollection *sfec_ = nullptr; + FiniteElementCollection* sfec_ = nullptr; /// Scalar \f$H^1\f$ finite element space. - ParFiniteElementSpace *sfes_ = nullptr; + ParFiniteElementSpace* sfes_ = nullptr; /* Vector gridScaleSml; @@ -197,7 +197,7 @@ class LoMachSolver : public TPS::PlasmaSolver { double tlast_; // I/O helpers - ParaViewDataCollection *pvdc_ = nullptr; // visualization + ParaViewDataCollection* pvdc_ = nullptr; // visualization IODataOrganizer ioData; // restart /// Update the EXTk/BDF time integration coefficient. @@ -205,7 +205,7 @@ class LoMachSolver : public TPS::PlasmaSolver { public: /// Ctor - LoMachSolver(TPS::Tps *tps); + LoMachSolver(TPS::Tps* tps); /// Dtor virtual ~LoMachSolver(); @@ -237,8 +237,8 @@ class LoMachSolver : public TPS::PlasmaSolver { // Functions necessary for coupled EM+plasma simulations // These are overriden from TPS::Solver or TPS::PlasmaSolver - mfem::ParMesh *getMesh() const override { return pmesh_; } - const mfem::FiniteElementCollection *getFEC() const override { + mfem::ParMesh* getMesh() const override { return pmesh_; } + const mfem::FiniteElementCollection* getFEC() const override { if (thermo_->getJouleHeatingGF() != nullptr) { return thermo_->getJouleHeatingGF()->ParFESpace()->FEColl(); } else { @@ -246,7 +246,7 @@ class LoMachSolver : public TPS::PlasmaSolver { } } - mfem::ParFiniteElementSpace *getFESpace() const override { + mfem::ParFiniteElementSpace* getFESpace() const override { if (thermo_->getJouleHeatingGF() != nullptr) { return thermo_->getJouleHeatingGF()->ParFESpace(); } else { @@ -254,11 +254,11 @@ class LoMachSolver : public TPS::PlasmaSolver { } } - mfem::ParGridFunction *getPlasmaConductivityGF() override { return thermo_->getPlasmaConductivityGF(); } + mfem::ParGridFunction* getPlasmaConductivityGF() override { return thermo_->getPlasmaConductivityGF(); } void evaluatePlasmaConductivityGF() override { thermo_->evaluatePlasmaConductivityGF(); } - mfem::ParGridFunction *getJouleHeatingGF() override { return thermo_->getJouleHeatingGF(); } + mfem::ParGridFunction* getJouleHeatingGF() override { return thermo_->getJouleHeatingGF(); } }; #endif // LOMACH_HPP_ diff --git a/src/loMach_options.cpp b/src/loMach_options.cpp index 08a04379..65721509 100644 --- a/src/loMach_options.cpp +++ b/src/loMach_options.cpp @@ -47,7 +47,7 @@ TurbulenceModelOptions::TurbulenceModelOptions() turb_model_type_ = turb_model_map_[turb_model_string_]; } -void TurbulenceModelOptions::read(TPS::Tps *tps, std::string prefix) { +void TurbulenceModelOptions::read(TPS::Tps* tps, std::string prefix) { // At the moment, SGS model options are under either "flow" or // "loMach", so we must have a prefix assert(!prefix.empty()); @@ -88,7 +88,7 @@ LoMachTemporalOptions::LoMachTemporalOptions() integrator_map_["deltaP"] = DELTA_P; } -void LoMachTemporalOptions::read(TPS::Tps *tps, std::string prefix) { +void LoMachTemporalOptions::read(TPS::Tps* tps, std::string prefix) { std::string basename; if (!prefix.empty()) { basename = prefix + "/time"; diff --git a/src/loMach_options.hpp b/src/loMach_options.hpp index 630dec18..5f8eb2c7 100644 --- a/src/loMach_options.hpp +++ b/src/loMach_options.hpp @@ -46,7 +46,7 @@ class Tps; class TurbulenceModelOptions { public: TurbulenceModelOptions(); - void read(TPS::Tps *tps, std::string prefix = std::string("")); + void read(TPS::Tps* tps, std::string prefix = std::string("")); enum TurbulenceModelType { NONE, SMAGORINSKY, SIGMA, WALE, ALGEBRAIC_RANS, STATIC_RANS, ZETA_F }; @@ -61,7 +61,7 @@ class TurbulenceModelOptions { class LoMachTemporalOptions { public: LoMachTemporalOptions(); - void read(TPS::Tps *tps, std::string prefix = std::string("")); + void read(TPS::Tps* tps, std::string prefix = std::string("")); enum IntegratorType { CURL_CURL, STAGGERED_TIME, DELTA_P }; @@ -151,7 +151,7 @@ class LoMachOptions { nSpec = 0; } - void print(std::ostream &out) { + void print(std::ostream& out) { out << std::endl; out << "LoMach options:" << std::endl; out << " mesh_file = " << mesh_file << std::endl; diff --git a/src/lte_mixture.cpp b/src/lte_mixture.cpp index 5db56a04..c15b3fc9 100644 --- a/src/lte_mixture.cpp +++ b/src/lte_mixture.cpp @@ -36,7 +36,7 @@ #include "lte_mixture.hpp" #ifndef _GPU_ -LteMixture::LteMixture(RunConfiguration &_runfile, int _dim, int nvel) +LteMixture::LteMixture(RunConfiguration& _runfile, int _dim, int nvel) : GasMixture(_runfile.lteMixtureInput.f, _dim, nvel, _runfile.const_plasma_conductivity_) { numSpecies = 1; ambipolar = false; @@ -116,11 +116,11 @@ MFEM_HOST_DEVICE LteMixture::~LteMixture() { } /// Compute pressure from conserved state -double LteMixture::ComputePressure(const Vector &state, double *electronPressure) { +double LteMixture::ComputePressure(const Vector& state, double* electronPressure) { return ComputePressure(state.GetData(), electronPressure); } -MFEM_HOST_DEVICE double LteMixture::ComputePressure(const double *state, double *electronPressure) { +MFEM_HOST_DEVICE double LteMixture::ComputePressure(const double* state, double* electronPressure) { const double rho = state[0]; // const double T = ComputeTemperature(state); double T; @@ -135,11 +135,11 @@ MFEM_HOST_DEVICE double LteMixture::ComputePressure(const double *state, double } /// Compute pressure from primitive state -double LteMixture::ComputePressureFromPrimitives(const Vector &Up) { +double LteMixture::ComputePressureFromPrimitives(const Vector& Up) { return ComputePressureFromPrimitives(Up.GetData()); } -MFEM_HOST_DEVICE double LteMixture::ComputePressureFromPrimitives(const double *Up) { +MFEM_HOST_DEVICE double LteMixture::ComputePressureFromPrimitives(const double* Up) { const double rho = Up[0]; const double T = Up[1 + nvel_]; #ifdef _GPU_ @@ -158,7 +158,7 @@ MFEM_HOST_DEVICE double LteMixture::ComputePressureFromPrimitives(const double * * internal energy given by the thermodynamic equilibrium look-up * table. */ -MFEM_HOST_DEVICE bool LteMixture::ComputeTemperatureInternal(const double *state, double &T) { +MFEM_HOST_DEVICE bool LteMixture::ComputeTemperatureInternal(const double* state, double& T) { const double rho = state[0]; double den_vel2 = 0; @@ -222,9 +222,9 @@ MFEM_HOST_DEVICE bool LteMixture::ComputeTemperatureInternal(const double *state return true; } -double LteMixture::ComputeTemperature(const Vector &state) { return ComputeTemperature(state.GetData()); } +double LteMixture::ComputeTemperature(const Vector& state) { return ComputeTemperature(state.GetData()); } -MFEM_HOST_DEVICE double LteMixture::ComputeTemperature(const double *state) { +MFEM_HOST_DEVICE double LteMixture::ComputeTemperature(const double* state) { double T; const bool success = ComputeTemperatureInternal(state, T); assert(success); @@ -304,19 +304,19 @@ MFEM_HOST_DEVICE double LteMixture::ComputeTemperatureFromDensityPressure(const } // TODO(trevilo): move this into the base class -void LteMixture::computeSpeciesEnthalpies(const Vector &state, Vector &speciesEnthalpies) { +void LteMixture::computeSpeciesEnthalpies(const Vector& state, Vector& speciesEnthalpies) { speciesEnthalpies.SetSize(numSpecies); speciesEnthalpies = 0.0; return; } /// Compute primitive variables (rho, u, T) from conserved (rho, rho*u, rho*E) -void LteMixture::GetPrimitivesFromConservatives(const Vector &conserv, Vector &primit) { +void LteMixture::GetPrimitivesFromConservatives(const Vector& conserv, Vector& primit) { primit.SetSize(conserv.Size()); GetPrimitivesFromConservatives(conserv.GetData(), primit.GetData()); } -MFEM_HOST_DEVICE void LteMixture::GetPrimitivesFromConservatives(const double *conserv, double *primit) { +MFEM_HOST_DEVICE void LteMixture::GetPrimitivesFromConservatives(const double* conserv, double* primit) { const double T = ComputeTemperature(conserv); for (int i = 0; i < num_equation; i++) { @@ -329,12 +329,12 @@ MFEM_HOST_DEVICE void LteMixture::GetPrimitivesFromConservatives(const double *c } /// Compute conserved variables (rho, rho*u, rho*E) from primitive (rho, u, T) -void LteMixture::GetConservativesFromPrimitives(const Vector &primit, Vector &conserv) { +void LteMixture::GetConservativesFromPrimitives(const Vector& primit, Vector& conserv) { conserv.SetSize(primit.Size()); GetConservativesFromPrimitives(primit.GetData(), conserv.GetData()); } -MFEM_HOST_DEVICE void LteMixture::GetConservativesFromPrimitives(const double *primit, double *conserv) { +MFEM_HOST_DEVICE void LteMixture::GetConservativesFromPrimitives(const double* primit, double* conserv) { for (int i = 0; i < num_equation; i++) { conserv[i] = primit[i]; } @@ -358,12 +358,12 @@ MFEM_HOST_DEVICE void LteMixture::GetConservativesFromPrimitives(const double *p } /// Compute the speed of sound (from look-up table) -double LteMixture::ComputeSpeedOfSound(const Vector &Uin, bool primitive) { +double LteMixture::ComputeSpeedOfSound(const Vector& Uin, bool primitive) { return ComputeSpeedOfSound(Uin.GetData(), primitive); } /// Compute the speed of sound (from look-up table) -MFEM_HOST_DEVICE double LteMixture::ComputeSpeedOfSound(const double *Uin, bool primitive) { +MFEM_HOST_DEVICE double LteMixture::ComputeSpeedOfSound(const double* Uin, bool primitive) { const double rho = Uin[0]; double T; if (primitive) { @@ -381,10 +381,10 @@ MFEM_HOST_DEVICE double LteMixture::ComputeSpeedOfSound(const double *Uin, bool } /// Compute the maximum characteristic speed (u+a) -double LteMixture::ComputeMaxCharSpeed(const Vector &state) { return ComputeMaxCharSpeed(state.GetData()); } +double LteMixture::ComputeMaxCharSpeed(const Vector& state) { return ComputeMaxCharSpeed(state.GetData()); } /// Compute the maximum characteristic speed (u+a) -MFEM_HOST_DEVICE double LteMixture::ComputeMaxCharSpeed(const double *state) { +MFEM_HOST_DEVICE double LteMixture::ComputeMaxCharSpeed(const double* state) { const double den = state[0]; double den_vel2 = 0; @@ -400,13 +400,13 @@ MFEM_HOST_DEVICE double LteMixture::ComputeMaxCharSpeed(const double *state) { } // only used in non-reflecting BCs... don't implement for now -double LteMixture::ComputePressureDerivative(const Vector &dUp_dx, const Vector &Uin, bool primitive) { +double LteMixture::ComputePressureDerivative(const Vector& dUp_dx, const Vector& Uin, bool primitive) { assert(false); return 0.0; } /// Check if the density, temperature, and pressure are positive -bool LteMixture::StateIsPhysical(const Vector &state) { +bool LteMixture::StateIsPhysical(const Vector& state) { const double rho = state[0]; const double T = ComputeTemperature(state); #ifdef _GPU_ @@ -422,13 +422,13 @@ bool LteMixture::StateIsPhysical(const Vector &state) { } // BC related functions -void LteMixture::computeStagnantStateWithTemp(const Vector &stateIn, const double Temp, Vector &stateOut) { +void LteMixture::computeStagnantStateWithTemp(const Vector& stateIn, const double Temp, Vector& stateOut) { stateOut.SetSize(num_equation); computeStagnantStateWithTemp(stateIn.GetData(), Temp, stateOut.GetData()); } -MFEM_HOST_DEVICE void LteMixture::computeStagnantStateWithTemp(const double *stateIn, const double Temp, - double *stateOut) { +MFEM_HOST_DEVICE void LteMixture::computeStagnantStateWithTemp(const double* stateIn, const double Temp, + double* stateOut) { for (int i = 0; i < num_equation; i++) { stateOut[i] = stateIn[i]; } @@ -445,12 +445,12 @@ MFEM_HOST_DEVICE void LteMixture::computeStagnantStateWithTemp(const double *sta stateOut[1 + nvel_] = rho * energy; } -void LteMixture::modifyEnergyForPressure(const Vector &stateIn, Vector &stateOut, const double &p, +void LteMixture::modifyEnergyForPressure(const Vector& stateIn, Vector& stateOut, const double& p, bool modifyElectronEnergy) { modifyEnergyForPressure(stateIn.GetData(), stateOut.GetData(), p, modifyElectronEnergy); } -MFEM_HOST_DEVICE void LteMixture::modifyEnergyForPressure(const double *stateIn, double *stateOut, const double &p, +MFEM_HOST_DEVICE void LteMixture::modifyEnergyForPressure(const double* stateIn, double* stateOut, const double& p, bool modifyElectronEnergy) { for (int eq = 0; eq < num_equation; eq++) stateOut[eq] = stateIn[eq]; diff --git a/src/lte_mixture.hpp b/src/lte_mixture.hpp index 74d5e9f2..88fe332f 100644 --- a/src/lte_mixture.hpp +++ b/src/lte_mixture.hpp @@ -64,31 +64,31 @@ class LteMixture : public GasMixture { LinearTable T_table_; #else // On the cpu path, simultaneously support LinearTable and GslTableInterpolator2D - TableInterface *energy_table_; - TableInterface *R_table_; - TableInterface *c_table_; - TableInterface *T_table_; + TableInterface* energy_table_; + TableInterface* R_table_; + TableInterface* c_table_; + TableInterface* T_table_; #endif - MFEM_HOST_DEVICE bool ComputeTemperatureInternal(const double *state, double &T); + MFEM_HOST_DEVICE bool ComputeTemperatureInternal(const double* state, double& T); public: MFEM_HOST_DEVICE LteMixture(WorkingFluid f, int _dim, int nvel, double pc, TableInput energy_table_input, TableInput R_table_input, TableInput c_table_input, TableInput T_table_input); #ifndef _GPU_ - LteMixture(RunConfiguration &_runfile, int _dim, int nvel); + LteMixture(RunConfiguration& _runfile, int _dim, int nvel); #endif MFEM_HOST_DEVICE virtual ~LteMixture(); - MFEM_HOST_DEVICE double evaluateInternalEnergy(const double &T, const double &rho) { + MFEM_HOST_DEVICE double evaluateInternalEnergy(const double& T, const double& rho) { #ifdef _GPU_ return energy_table_.eval(T, rho); #else return energy_table_->eval(T, rho); #endif } - MFEM_HOST_DEVICE double evaluateGasConstant(const double &T, const double &rho) { + MFEM_HOST_DEVICE double evaluateGasConstant(const double& T, const double& rho) { #ifdef _GPU_ return R_table_.eval(T, rho); #else @@ -96,51 +96,51 @@ class LteMixture : public GasMixture { #endif } - virtual double ComputePressure(const Vector &state, double *electronPressure = NULL); - MFEM_HOST_DEVICE virtual double ComputePressure(const double *state, double *electronPressure = NULL); + virtual double ComputePressure(const Vector& state, double* electronPressure = NULL); + MFEM_HOST_DEVICE virtual double ComputePressure(const double* state, double* electronPressure = NULL); - virtual double ComputePressureFromPrimitives(const Vector &Up); - MFEM_HOST_DEVICE virtual double ComputePressureFromPrimitives(const double *Up); + virtual double ComputePressureFromPrimitives(const Vector& Up); + MFEM_HOST_DEVICE virtual double ComputePressureFromPrimitives(const double* Up); - virtual double ComputeTemperature(const Vector &state); - MFEM_HOST_DEVICE virtual double ComputeTemperature(const double *state); + virtual double ComputeTemperature(const Vector& state); + MFEM_HOST_DEVICE virtual double ComputeTemperature(const double* state); MFEM_HOST_DEVICE double ComputeTemperatureFromDensityPressure(const double rho, const double p); - virtual void computeSpeciesEnthalpies(const Vector &state, Vector &speciesEnthalpies); - MFEM_HOST_DEVICE virtual void computeSpeciesEnthalpies(const double *state, double *speciesEnthalpies) { + virtual void computeSpeciesEnthalpies(const Vector& state, Vector& speciesEnthalpies); + MFEM_HOST_DEVICE virtual void computeSpeciesEnthalpies(const double* state, double* speciesEnthalpies) { for (int sp = 0; sp < numSpecies; sp++) speciesEnthalpies[sp] = 0.0; return; } - virtual void GetPrimitivesFromConservatives(const Vector &conserv, Vector &primit); - MFEM_HOST_DEVICE virtual void GetPrimitivesFromConservatives(const double *conserv, double *primit); + virtual void GetPrimitivesFromConservatives(const Vector& conserv, Vector& primit); + MFEM_HOST_DEVICE virtual void GetPrimitivesFromConservatives(const double* conserv, double* primit); - virtual void GetConservativesFromPrimitives(const Vector &primit, Vector &conserv); - MFEM_HOST_DEVICE virtual void GetConservativesFromPrimitives(const double *primit, double *conserv); + virtual void GetConservativesFromPrimitives(const Vector& primit, Vector& conserv); + MFEM_HOST_DEVICE virtual void GetConservativesFromPrimitives(const double* primit, double* conserv); - virtual double ComputeSpeedOfSound(const Vector &Uin, bool primitive = true); - MFEM_HOST_DEVICE virtual double ComputeSpeedOfSound(const double *Uin, bool primitive = true); + virtual double ComputeSpeedOfSound(const Vector& Uin, bool primitive = true); + MFEM_HOST_DEVICE virtual double ComputeSpeedOfSound(const double* Uin, bool primitive = true); - virtual double ComputeMaxCharSpeed(const Vector &state); - MFEM_HOST_DEVICE virtual double ComputeMaxCharSpeed(const double *state); + virtual double ComputeMaxCharSpeed(const Vector& state); + MFEM_HOST_DEVICE virtual double ComputeMaxCharSpeed(const double* state); /// only used in non-reflecting BCs... don't implement for now - virtual double ComputePressureDerivative(const Vector &dUp_dx, const Vector &Uin, bool primitive = true); + virtual double ComputePressureDerivative(const Vector& dUp_dx, const Vector& Uin, bool primitive = true); // Physicality check (at end) - virtual bool StateIsPhysical(const Vector &state); + virtual bool StateIsPhysical(const Vector& state); - virtual void ComputeMassFractionGradient(const double rho, const Vector &numberDensities, const DenseMatrix &gradUp, - DenseMatrix &massFractionGrad) { + virtual void ComputeMassFractionGradient(const double rho, const Vector& numberDensities, const DenseMatrix& gradUp, + DenseMatrix& massFractionGrad) { mfem_error("computeMassFractionGradient not implemented"); } - virtual void ComputeMoleFractionGradient(const Vector &numberDensities, const DenseMatrix &gradUp, - DenseMatrix &moleFractionGrad) { + virtual void ComputeMoleFractionGradient(const Vector& numberDensities, const DenseMatrix& gradUp, + DenseMatrix& moleFractionGrad) { mfem_error("computeMoleFractionGradient not implemented"); } - MFEM_HOST_DEVICE virtual void ComputeMoleFractionGradient(const double *numberDensities, const double *gradUp, - double *moleFractionGrad) { + MFEM_HOST_DEVICE virtual void ComputeMoleFractionGradient(const double* numberDensities, const double* gradUp, + double* moleFractionGrad) { printf("computeMoleFractionGradient not implemented"); assert(false); } @@ -149,21 +149,21 @@ class LteMixture : public GasMixture { MFEM_HOST_DEVICE virtual double GetGasConstant() { return 0; } // BC related functions - virtual void computeStagnantStateWithTemp(const Vector &stateIn, const double Temp, Vector &stateOut); - MFEM_HOST_DEVICE virtual void computeStagnantStateWithTemp(const double *stateIn, const double Temp, - double *stateOut); + virtual void computeStagnantStateWithTemp(const Vector& stateIn, const double Temp, Vector& stateOut); + MFEM_HOST_DEVICE virtual void computeStagnantStateWithTemp(const double* stateIn, const double Temp, + double* stateOut); - virtual void modifyEnergyForPressure(const Vector &stateIn, Vector &stateOut, const double &p, + virtual void modifyEnergyForPressure(const Vector& stateIn, Vector& stateOut, const double& p, bool modifyElectronEnergy = false); - MFEM_HOST_DEVICE virtual void modifyEnergyForPressure(const double *stateIn, double *stateOut, const double &p, + MFEM_HOST_DEVICE virtual void modifyEnergyForPressure(const double* stateIn, double* stateOut, const double& p, bool modifyElectronEnergy = false); - virtual void computeSheathBdrFlux(const Vector &state, BoundaryViscousFluxData &bcFlux) { + virtual void computeSheathBdrFlux(const Vector& state, BoundaryViscousFluxData& bcFlux) { mfem_error("computeSheathBdrFlux not implemented"); } - MFEM_HOST_DEVICE virtual void computeSheathBdrFlux(const double *state, BoundaryViscousFluxData &bcFlux) { + MFEM_HOST_DEVICE virtual void computeSheathBdrFlux(const double* state, BoundaryViscousFluxData& bcFlux) { printf("ERROR: computeSheathBdrFlux is not supposed to be executed for LteMixture!"); return; } @@ -176,12 +176,12 @@ class LteMixture : public GasMixture { mfem_error("computeElectronPressure not implemented"); return 0; } - virtual void computeElectronPressureGrad(const double n_e, const double T_e, const DenseMatrix &gradUp, - Vector &gradPe) { + virtual void computeElectronPressureGrad(const double n_e, const double T_e, const DenseMatrix& gradUp, + Vector& gradPe) { mfem_error("computeElectronPressureGrad not implemented"); } - MFEM_HOST_DEVICE virtual void computeElectronPressureGrad(const double n_e, const double T_e, const double *gradUp, - double *gradPe) { + MFEM_HOST_DEVICE virtual void computeElectronPressureGrad(const double n_e, const double T_e, const double* gradUp, + double* gradPe) { printf("computeElectronPressureGrad not implemented"); assert(false); } diff --git a/src/lte_thermo_chem.cpp b/src/lte_thermo_chem.cpp index 285df56b..bc215e7b 100644 --- a/src/lte_thermo_chem.cpp +++ b/src/lte_thermo_chem.cpp @@ -48,28 +48,29 @@ using namespace mfem; using namespace mfem::common; -static double radius(const Vector &pos) { return pos[0]; } +static double radius(const Vector& pos) { return pos[0]; } static FunctionCoefficient radius_coeff(radius); -static double sigmaTorchStartUp(const Vector &pos) { +static double sigmaTorchStartUp(const Vector& pos) { // const double x = pos[0]; // radial location const double x = std::sqrt(pos[0] * pos[0] + pos[2] * pos[2]); // radial location const double y = pos[1]; // axial location - const double r0 = 0.005; + // const double r0 = 0.005; + const double r0 = 0.0067; const double y0 = 0.135; const double ysig = 0.015; const double sigma = - 2000. * std::exp(-0.5 * (x / r0) * (x / r0)) * std::exp(-0.5 * ((y - y0) / ysig) * ((y - y0) / ysig)); + 4000. * std::exp(-0.5 * (x / r0) * (x / r0)) * std::exp(-0.5 * ((y - y0) / ysig) * ((y - y0) / ysig)); return sigma; } static FunctionCoefficient sigma_start_up(sigmaTorchStartUp); -LteThermoChem::LteThermoChem(mfem::ParMesh *pmesh, LoMachOptions *loMach_opts, temporalSchemeCoefficients &time_coeff, - ParGridFunction *gridScale, TPS::Tps *tps) +LteThermoChem::LteThermoChem(mfem::ParMesh* pmesh, LoMachOptions* loMach_opts, temporalSchemeCoefficients& time_coeff, + ParGridFunction* gridScale, TPS::Tps* tps) : tpsP_(tps), pmesh_(pmesh), gll_rules_(0, Quadrature1D::GaussLobatto), @@ -80,6 +81,8 @@ LteThermoChem::LteThermoChem(mfem::ParMesh *pmesh, LoMachOptions *loMach_opts, t tps->getInput("loMach/axisymmetric", axisym_, false); + dim_ = pmesh->Dimension(); + // Initialize thermo TableInput (data read below) std::vector thermo_tables(5); for (size_t i = 0; i < thermo_tables.size(); i++) { @@ -170,6 +173,9 @@ LteThermoChem::LteThermoChem(mfem::ParMesh *pmesh, LoMachOptions *loMach_opts, t tps->getInput("loMach/ltethermo/turb-Prandtl", Prt_, 0.9); invPrt_ = 1.0 / Prt_; + tps->getInput("loMach/ltethermo/Prandtl", Pr_, 0.5); + invPr_ = 1.0 / Pr_; + tps->getInput("loMach/ltethermo/clip-temperature", Tclip_, false); tps->getInput("loMach/ltethermo/min-temperature", Tmin_, 0.0); tps->getInput("loMach/ltethermo/max-temperature", Tmax_, 100000.0); @@ -178,9 +184,10 @@ LteThermoChem::LteThermoChem(mfem::ParMesh *pmesh, LoMachOptions *loMach_opts, t tps->getInput("loMach/ltethermo/linear-solver-max-iter", max_iter_, 1000); tps->getInput("loMach/ltethermo/linear-solver-verbosity", pl_solve_, 0); + // use full stabilization for all but momentum tpsP_->getInput("loMach/ltethermo/streamwise-stabilization", sw_stab_, false); - tpsP_->getInput("loMach/ltethermo/Reh_factor", Reh_factor_, 0.5); - tpsP_->getInput("loMach/ltethermo/Reh_offset", Reh_offset_, 1.0); + tpsP_->getInput("loMach/ltethermo/Reh_factor", Reh_factor_, 1.0); + tpsP_->getInput("loMach/ltethermo/Reh_offset", Reh_offset_, 0.0); tpsP_->getInput("loMach/ltethermo/neumann-temp", neumann_temp_, false); if (sw_stab_) { @@ -247,6 +254,8 @@ LteThermoChem::~LteThermoChem() { // allocated in initializeSelf delete sfes_; delete sfec_; + delete vfes_; + delete vfec_; } void LteThermoChem::initializeSelf() { @@ -258,6 +267,11 @@ void LteThermoChem::initializeSelf() { sfec_ = new H1_FECollection(order_); sfes_ = new ParFiniteElementSpace(pmesh_, sfec_); + vfec_ = new H1_FECollection(order_, dim_); + vfes_ = new ParFiniteElementSpace(pmesh_, vfec_, dim_); + + sDofInt_ = sfes_->GetTrueVSize(); + // Check if fully periodic mesh if (!(pmesh_->bdr_attributes.Size() == 0)) { temp_ess_attr_.SetSize(pmesh_->bdr_attributes.Max()); @@ -404,12 +418,12 @@ void LteThermoChem::initializeSelf() { // Initialize the gas constant and Cp { - const double *d_T = Tn_next_.Read(); + const double* d_T = Tn_next_.Read(); - double *d_Rgas = Rgas_.Write(); + double* d_Rgas = Rgas_.Write(); MFEM_FORALL(i, Tn_.Size(), { d_Rgas[i] = Rgas_table_->eval(d_T[i]); }); - double *d_Cp = Cp_.Write(); + double* d_Cp = Cp_.Write(); MFEM_FORALL(i, Tn_.Size(), { d_Cp[i] = Cp_table_->eval(d_T[i]); }); } Rgas_gf_.SetFromTrueDofs(Rgas_); @@ -417,12 +431,12 @@ void LteThermoChem::initializeSelf() { // Initialize the transport properties { - const double *d_T = Tn_.Read(); + const double* d_T = Tn_.Read(); - double *d_visc = visc_.Write(); + double* d_visc = visc_.Write(); MFEM_FORALL(i, Tn_.Size(), { d_visc[i] = mu_table_->eval(d_T[i]); }); - double *d_kap = kappa_.Write(); + double* d_kap = kappa_.Write(); MFEM_FORALL(i, Tn_.Size(), { d_kap[i] = kappa_table_->eval(d_T[i]); }); } mu_gf_.SetFromTrueDofs(visc_); @@ -467,6 +481,17 @@ void LteThermoChem::initializeSelf() { } // AddTempDirichletBC(temperature_value, inlet_attr); + } else if (type == "normal") { + Array inlet_attr(pmesh_->bdr_attributes.Max()); + inlet_attr = 0; + inlet_attr[patch - 1] = 1; + double temperature_value; + tpsP_->getRequiredInput((basepath + "/temperature").c_str(), temperature_value); + if (rank0_) { + std::cout << "Calorically Perfect: Setting uniform Dirichlet temperature on patch = " << patch << std::endl; + } + AddTempDirichletBC(temperature_value, inlet_attr); + } else if (type == "interpolate") { temperature_bc_field_ = new GridFunctionCoefficient(extData_interface_->Tdata); if (!neumann_temp_) { @@ -536,12 +561,12 @@ void LteThermoChem::initializeSelf() { double Twall; tpsP_->getRequiredInput((basepath + "/temperature").c_str(), Twall); - ConstantCoefficient *Twall_coeff = new ConstantCoefficient(); + ConstantCoefficient* Twall_coeff = new ConstantCoefficient(); Twall_coeff->constant = Twall; AddTempDirichletBC(Twall_coeff, attr_wall); - ConstantCoefficient *Qt_bc_coeff = new ConstantCoefficient(); + ConstantCoefficient* Qt_bc_coeff = new ConstantCoefficient(); Qt_bc_coeff->constant = 0.0; AddQtDirichletBC(Qt_bc_coeff, attr_wall); } @@ -569,9 +594,9 @@ void LteThermoChem::initializeOperators() { // const IntegrationRule &ir_i = gll_rules_.Get(sfes_->GetFE(0)->GetGeomType(), 2 * order_ + 1); // const IntegrationRule &ir_nli = gll_rules_.Get(sfes_->GetFE(0)->GetGeomType(), 4 * order_); // const IntegrationRule &ir_di = gll_rules_.Get(sfes_->GetFE(0)->GetGeomType(), 3 * order_ - 1); - const IntegrationRule &ir_i = gll_rules_.Get(sfes_->GetFE(0)->GetGeomType(), 2 * order_ - 1); - const IntegrationRule &ir_nli = gll_rules_.Get(sfes_->GetFE(0)->GetGeomType(), 2 * order_ - 1); - const IntegrationRule &ir_di = gll_rules_.Get(sfes_->GetFE(0)->GetGeomType(), 2 * order_ - 1); + const IntegrationRule& ir_i = gll_rules_.Get(sfes_->GetFE(0)->GetGeomType(), 2 * order_ - 1); + const IntegrationRule& ir_nli = gll_rules_.Get(sfes_->GetFE(0)->GetGeomType(), 2 * order_ - 1); + const IntegrationRule& ir_di = gll_rules_.Get(sfes_->GetFE(0)->GetGeomType(), 2 * order_ - 1); if (rank0_) std::cout << "Integration rules set" << endl; // coefficients for operators @@ -586,7 +611,7 @@ void LteThermoChem::initializeOperators() { mut_coeff_ = new GridFunctionCoefficient(turbModel_interface_->eddy_viscosity); kapt_coeff_ = new ProductCoefficient(*Cp_coeff_, *mut_coeff_); - thermal_diff_sum_coeff_ = new SumCoefficient(*kapt_coeff_, *thermal_diff_coeff_, invPrt_, 1.0); + thermal_diff_sum_coeff_ = new SumCoefficient(*kapt_coeff_, *thermal_diff_coeff_, invPrt_, invPr_); mult_coeff_ = new GridFunctionCoefficient(sponge_interface_->diff_multiplier); thermal_diff_total_coeff_ = new ProductCoefficient(*mult_coeff_, *thermal_diff_sum_coeff_); @@ -656,7 +681,7 @@ void LteThermoChem::initializeOperators() { // Convection: Atemperature(i,j) = \int_{\Omega} \phi_i \rho Cp u \cdot \nabla \phi_j At_form_ = new ParBilinearForm(sfes_); - ConvectionIntegrator *at_blfi; + ConvectionIntegrator* at_blfi; if (axisym_) { at_blfi = new ConvectionIntegrator(*rad_rho_Cp_u_coeff_); } else { @@ -675,7 +700,7 @@ void LteThermoChem::initializeOperators() { // mass matrix Ms_form_ = new ParBilinearForm(sfes_); - MassIntegrator *ms_blfi; + MassIntegrator* ms_blfi; if (axisym_) { ms_blfi = new MassIntegrator(radius_coeff); } else { @@ -693,7 +718,7 @@ void LteThermoChem::initializeOperators() { // mass matrix with rho * Cp weight M_rho_Cp_form_ = new ParBilinearForm(sfes_); - MassIntegrator *mrc_blfi; + MassIntegrator* mrc_blfi; if (axisym_) { mrc_blfi = new MassIntegrator(*rad_rho_Cp_coeff_); } else { @@ -711,7 +736,7 @@ void LteThermoChem::initializeOperators() { // mass matrix with rho weight (used in Qt solve) M_rho_form_ = new ParBilinearForm(sfes_); - MassIntegrator *msrho_blfi; + MassIntegrator* msrho_blfi; if (axisym_) { msrho_blfi = new MassIntegrator(*rad_rho_coeff_); } else { @@ -729,8 +754,8 @@ void LteThermoChem::initializeOperators() { // helmholtz Ht_form_ = new ParBilinearForm(sfes_); - MassIntegrator *hmt_blfi; - DiffusionIntegrator *hdt_blfi; + MassIntegrator* hmt_blfi; + DiffusionIntegrator* hdt_blfi; if (axisym_) { hmt_blfi = new MassIntegrator(*rad_rho_Cp_over_dt_coeff_); hdt_blfi = new DiffusionIntegrator(*rad_thermal_diff_total_coeff_); @@ -746,7 +771,7 @@ void LteThermoChem::initializeOperators() { Ht_form_->AddDomainIntegrator(hdt_blfi); if (sw_stab_) { - auto *sdt_blfi = new DiffusionIntegrator(*supg_coeff_); + auto* sdt_blfi = new DiffusionIntegrator(*supg_coeff_); if (numerical_integ_) { sdt_blfi->SetIntRule(&ir_di); } @@ -765,7 +790,7 @@ void LteThermoChem::initializeOperators() { MsInvPC_ = new OperatorJacobiSmoother(diag_pa, empty); } else { MsInvPC_ = new HypreSmoother(*Ms_.As()); - dynamic_cast(MsInvPC_)->SetType(HypreSmoother::Jacobi, 1); + dynamic_cast(MsInvPC_)->SetType(HypreSmoother::Jacobi, 1); } MsInv_ = new CGSolver(sfes_->GetComm()); MsInv_->iterative_mode = false; @@ -781,7 +806,7 @@ void LteThermoChem::initializeOperators() { MrhoInvPC_ = new OperatorJacobiSmoother(diag_pa, empty); } else { MrhoInvPC_ = new HypreSmoother(*M_rho_.As()); - dynamic_cast(MrhoInvPC_)->SetType(HypreSmoother::Jacobi, 1); + dynamic_cast(MrhoInvPC_)->SetType(HypreSmoother::Jacobi, 1); } MrhoInv_ = new CGSolver(sfes_->GetComm()); MrhoInv_->iterative_mode = false; @@ -797,7 +822,7 @@ void LteThermoChem::initializeOperators() { HtInvPC_ = new OperatorJacobiSmoother(diag_pa, temp_ess_tdof_); } else { HtInvPC_ = new HypreSmoother(*Ht_.As()); - dynamic_cast(HtInvPC_)->SetType(HypreSmoother::Jacobi, 1); + dynamic_cast(HtInvPC_)->SetType(HypreSmoother::Jacobi, 1); } HtInv_ = new CGSolver(sfes_->GetComm()); @@ -811,8 +836,8 @@ void LteThermoChem::initializeOperators() { if (rank0_) std::cout << "Temperature operators set" << endl; jh_form_ = new ParLinearForm(sfes_); - DomainLFIntegrator *jh_dlfi; - DomainLFIntegrator *rad_dlfi; + DomainLFIntegrator* jh_dlfi; + DomainLFIntegrator* rad_dlfi; if (axisym_) { jh_dlfi = new DomainLFIntegrator(*rad_jh_coeff_); rad_dlfi = new DomainLFIntegrator(*rad_radiation_sink_coeff_); @@ -831,7 +856,7 @@ void LteThermoChem::initializeOperators() { // Convection (for rho): Arho(i,j) = \int_{\Omega} \phi_i u \cdot \nabla \phi_j A_rho_form_ = new ParBilinearForm(sfes_); - ConvectionIntegrator *ar_blfi; + ConvectionIntegrator* ar_blfi; if (axisym_) { ar_blfi = new ConvectionIntegrator(*rad_un_next_coeff_); } else { @@ -848,7 +873,7 @@ void LteThermoChem::initializeOperators() { A_rho_form_->FormSystemMatrix(empty, A_rho_); Mq_form_ = new ParBilinearForm(sfes_); - MassIntegrator *mq_blfi; + MassIntegrator* mq_blfi; if (axisym_) { mq_blfi = new MassIntegrator(radius_coeff); } else { @@ -860,7 +885,7 @@ void LteThermoChem::initializeOperators() { Mq_form_->AddDomainIntegrator(mq_blfi); if (qt_filter_) { - DiffusionIntegrator *qtf_blfi; + DiffusionIntegrator* qtf_blfi; qtf_blfi = new DiffusionIntegrator(*gscale2_coeff_); if (numerical_integ_) { qtf_blfi->SetIntRule(&ir_i); @@ -880,7 +905,7 @@ void LteThermoChem::initializeOperators() { MqInvPC_ = new OperatorJacobiSmoother(diag_pa, empty); } else { MqInvPC_ = new HypreSmoother(*Mq_.As()); - dynamic_cast(MqInvPC_)->SetType(HypreSmoother::Jacobi, 1); + dynamic_cast(MqInvPC_)->SetType(HypreSmoother::Jacobi, 1); } MqInv_ = new CGSolver(sfes_->GetComm()); MqInv_->iterative_mode = false; @@ -891,7 +916,7 @@ void LteThermoChem::initializeOperators() { MqInv_->SetMaxIter(max_iter_); LQ_form_ = new ParBilinearForm(sfes_); - DiffusionIntegrator *lqd_blfi; + DiffusionIntegrator* lqd_blfi; if (axisym_) { lqd_blfi = new DiffusionIntegrator(*rad_thermal_diff_total_coeff_); } else { @@ -902,13 +927,15 @@ void LteThermoChem::initializeOperators() { } LQ_form_->AddDomainIntegrator(lqd_blfi); - if (sw_stab_) { - auto *slqd_blfi = new DiffusionIntegrator(*supg_coeff_); - if (numerical_integ_) { - slqd_blfi->SetIntRule(&ir_di); - } - LQ_form_->AddDomainIntegrator(slqd_blfi); - } + // NO, this is not consistent and will degrade stability + // if (sw_stab_) { + // auto *slqd_blfi = new DiffusionIntegrator(*supg_coeff_); + // if (numerical_integ_) { + // slqd_blfi->SetIntRule(&ir_di); + // } + // LQ_form_->AddDomainIntegrator(slqd_blfi); + // } + if (partial_assembly_) { LQ_form_->SetAssemblyLevel(AssemblyLevel::PARTIAL); } @@ -917,7 +944,7 @@ void LteThermoChem::initializeOperators() { LQ_bdry_ = new ParLinearForm(sfes_); // auto *lq_bdry_lfi = new BoundaryNormalLFIntegrator(*kap_gradT_coeff_, 2, -1); - BoundaryNormalLFIntegrator *lq_bdry_lfi; + BoundaryNormalLFIntegrator* lq_bdry_lfi; if (axisym_) { lq_bdry_lfi = new BoundaryNormalLFIntegrator(*rad_kap_gradT_coeff_, 2, -1); } else { @@ -942,7 +969,7 @@ void LteThermoChem::initializeOperators() { Ms_->AddMult(Tn_, resT_); // Prepare for the solve - for (auto &temp_dbc : temp_dbcs_) { + for (auto& temp_dbc : temp_dbcs_) { Tn_next_gf_.ProjectBdrCoefficient(*temp_dbc.coeff, temp_dbc.attr); } sfes_->GetRestrictionMatrix()->MultTranspose(resT_, resT_gf_); @@ -961,6 +988,7 @@ void LteThermoChem::initializeOperators() { Tn_gf_.GetTrueDofs(Tn_); Tn_next_gf_.SetFromTrueDofs(Tn_); Tn_next_gf_.GetTrueDofs(Tn_next_); + } else if (filter_restart_) { if (rank0_) std::cout << "************ Filtering temperature restart ******************" << std::endl; // Build the right-hand-side @@ -984,14 +1012,14 @@ void LteThermoChem::initializeOperators() { } // Prepare for the solve - for (auto &temp_dbc : temp_dbcs_) { + for (auto& temp_dbc : temp_dbcs_) { Tn_next_gf_.ProjectBdrCoefficient(*temp_dbc.coeff, temp_dbc.attr); } sfes_->GetRestrictionMatrix()->MultTranspose(resT_, resT_gf_); Vector Xt2, Bt2; if (partial_assembly_) { - auto *HC = Ht_.As(); + auto* HC = Ht_.As(); EliminateRHS(*Ht_form_, *HC, temp_ess_tdof_, Tn_next_gf_, resT_gf_, Xt2, Bt2, 1); } else { Ht_form_->FormLinearSystem(temp_ess_tdof_, Tn_next_gf_, resT_gf_, Ht_, Xt2, Bt2, 1); @@ -1038,7 +1066,7 @@ void LteThermoChem::initializeOperators() { updateProperties(); } -void LteThermoChem::initializeStats(Averaging &average, IODataOrganizer &io, bool continuation) { +void LteThermoChem::initializeStats(Averaging& average, IODataOrganizer& io, bool continuation) { if (average.ComputeMean()) { // fields for averaging average.registerField(std::string("temperature"), &Tn_gf_, false, 0, 1); @@ -1076,7 +1104,7 @@ void LteThermoChem::step() { const double time_ = time_coeff_.time; // Set current time for velocity Dirichlet boundary conditions. - for (auto &temp_dbc : temp_dbcs_) { + for (auto& temp_dbc : temp_dbcs_) { temp_dbc.coeff->SetTime(time_ + dt_); } @@ -1096,9 +1124,9 @@ void LteThermoChem::step() { // Update radiation sink if (radiation_ != nullptr) { - const double *d_T = Tn_next_.Read(); - double *d_rad = radiation_sink_.Write(); - Radiation *rmodel = radiation_; + const double* d_T = Tn_next_.Read(); + double* d_rad = radiation_sink_.Write(); + Radiation* rmodel = radiation_; MFEM_FORALL(i, Tn_next_.Size(), { d_rad[i] = rmodel->computeEnergySink(d_T[i]); }); } radiation_sink_gf_.SetFromTrueDofs(radiation_sink_); @@ -1125,6 +1153,31 @@ void LteThermoChem::step() { jh_form_->Update(); jh_form_->Assemble(); jh_form_->ParallelAssemble(jh_); + + // this bit is to prevent joule heating bleed -> make more elegant and then move to separate routine + ParGridFunction coordsDof(vfes_); + pmesh_->GetNodes(coordsDof); + double rCyl = 0.029; + { + double* djh = jh_.HostReadWrite(); + for (int i = 0; i < sDofInt_; i++) { + double x, z, dist; + double wgt; + x = coordsDof(0 * sDofInt_ + i); + // y = coordsDof(1 * sDofInt_ + i); + dist = x * x; + if (dim_ == 3) { + z = coordsDof(2 * sDofInt_ + i); + // z = z - spark_center_[2]; + dist += z * z; + } + dist = std::sqrt(dist); + wgt = 1.0; + if (dist > rCyl) wgt = 0.0; + djh[i] *= wgt; + } + } + resT_ += jh_; // Update Helmholtz operator to account for changing dt, rho, and kappa @@ -1143,14 +1196,14 @@ void LteThermoChem::step() { } // Prepare for the solve - for (auto &temp_dbc : temp_dbcs_) { + for (auto& temp_dbc : temp_dbcs_) { Tn_next_gf_.ProjectBdrCoefficient(*temp_dbc.coeff, temp_dbc.attr); } sfes_->GetRestrictionMatrix()->MultTranspose(resT_, resT_gf_); Vector Xt2, Bt2; if (partial_assembly_) { - auto *HC = Ht_.As(); + auto* HC = Ht_.As(); EliminateRHS(*Ht_form_, *HC, temp_ess_tdof_, Tn_next_gf_, resT_gf_, Xt2, Bt2, 1); } else { Ht_form_->FormLinearSystem(temp_ess_tdof_, Tn_next_gf_, resT_gf_, Ht_, Xt2, Bt2, 1); @@ -1158,11 +1211,19 @@ void LteThermoChem::step() { // solve helmholtz eq for temp HtInv_->Mult(Bt2, Xt2); - assert(HtInv_->GetConverged()); Ht_form_->RecoverFEMSolution(Xt2, resT_gf_, Tn_next_gf_); Tn_next_gf_.GetTrueDofs(Tn_next_); + // assert(HtInv_->GetConverged()); + if (!(HtInv_->GetConverged())) { + if (rank0_) { + mfem::out << "Warning, temperature not converging!"; + } + Tn_next_.Set(1.0, Tn_); + Tn_next_gf_.SetFromTrueDofs(Tn_next_); + } + // explicit filter if (filter_temperature_) { const auto filter_alpha = filter_alpha_; @@ -1212,12 +1273,12 @@ void LteThermoChem::computeExplicitTempConvectionOP() { tmpR0_.Add(time_coeff_.ab3, NTnm2_); } -void LteThermoChem::initializeIO(IODataOrganizer &io) { +void LteThermoChem::initializeIO(IODataOrganizer& io) { io.registerIOFamily("Temperature", "/temperature", &Tn_gf_, true, true, sfec_); io.registerIOVar("/temperature", "temperature", 0); } -void LteThermoChem::initializeViz(ParaViewDataCollection &pvdc) { +void LteThermoChem::initializeViz(ParaViewDataCollection& pvdc) { pvdc.RegisterField("temperature", &Tn_gf_); pvdc.RegisterField("density", &rn_gf_); pvdc.RegisterField("kappa", &kappa_gf_); @@ -1268,12 +1329,12 @@ void LteThermoChem::updateProperties() { // TODO(trevilo): Refactor for gpu support { // const double *d_T = Tn_.Read(); - const double *d_T = Tn_next_.Read(); + const double* d_T = Tn_next_.Read(); - double *d_visc = visc_.Write(); + double* d_visc = visc_.Write(); MFEM_FORALL(i, Tn_.Size(), { d_visc[i] = mu_table_->eval(d_T[i]); }); - double *d_kap = kappa_.Write(); + double* d_kap = kappa_.Write(); MFEM_FORALL(i, Tn_.Size(), { d_kap[i] = kappa_table_->eval(d_T[i]); }); } mu_gf_.SetFromTrueDofs(visc_); @@ -1281,12 +1342,12 @@ void LteThermoChem::updateProperties() { // Update the gas constant and Cp { - const double *d_T = Tn_next_.Read(); + const double* d_T = Tn_next_.Read(); - double *d_Rgas = Rgas_.Write(); + double* d_Rgas = Rgas_.Write(); MFEM_FORALL(i, Tn_.Size(), { d_Rgas[i] = Rgas_table_->eval(d_T[i]); }); - double *d_Cp = Cp_.Write(); + double* d_Cp = Cp_.Write(); MFEM_FORALL(i, Tn_.Size(), { d_Cp[i] = Cp_table_->eval(d_T[i]); }); } Rgas_gf_.SetFromTrueDofs(Rgas_); @@ -1300,9 +1361,9 @@ void LteThermoChem::updateProperties() { void LteThermoChem::evaluatePlasmaConductivityGF() { { - const double *d_T = Tn_next_.Read(); + const double* d_T = Tn_next_.Read(); - double *d_sigma = sigma_.Write(); + double* d_sigma = sigma_.Write(); MFEM_FORALL(i, Tn_.Size(), { d_sigma[i] = sigma_table_->eval(d_T[i]); }); } sigma_gf_.SetFromTrueDofs(sigma_); @@ -1333,7 +1394,7 @@ void LteThermoChem::computeSystemMass() { } /// Add a Dirichlet boundary condition to the temperature field -void LteThermoChem::AddTempDirichletBC(const double &temp, Array &attr) { +void LteThermoChem::AddTempDirichletBC(const double& temp, Array& attr) { temp_dbcs_.emplace_back(attr, new ConstantCoefficient(temp)); for (int i = 0; i < attr.Size(); ++i) { if (attr[i] == 1) { @@ -1343,7 +1404,7 @@ void LteThermoChem::AddTempDirichletBC(const double &temp, Array &attr) { } } -void LteThermoChem::AddTempDirichletBC(Coefficient *coeff, Array &attr) { +void LteThermoChem::AddTempDirichletBC(Coefficient* coeff, Array& attr) { temp_dbcs_.emplace_back(attr, coeff); for (int i = 0; i < attr.Size(); ++i) { if (attr[i] == 1) { @@ -1354,11 +1415,11 @@ void LteThermoChem::AddTempDirichletBC(Coefficient *coeff, Array &attr) { } } -void LteThermoChem::AddTempDirichletBC(ScalarFuncT *f, Array &attr) { +void LteThermoChem::AddTempDirichletBC(ScalarFuncT* f, Array& attr) { AddTempDirichletBC(new FunctionCoefficient(f), attr); } -void LteThermoChem::AddQtDirichletBC(Coefficient *coeff, Array &attr) { +void LteThermoChem::AddQtDirichletBC(Coefficient* coeff, Array& attr) { Qt_dbcs_.emplace_back(attr, coeff); if (rank0_ && pmesh_->GetMyRank() == 0) { @@ -1379,7 +1440,7 @@ void LteThermoChem::AddQtDirichletBC(Coefficient *coeff, Array &attr) { } } -void LteThermoChem::AddQtDirichletBC(ScalarFuncT *f, Array &attr) { +void LteThermoChem::AddQtDirichletBC(ScalarFuncT* f, Array& attr) { AddQtDirichletBC(new FunctionCoefficient(f), attr); } @@ -1442,6 +1503,31 @@ void LteThermoChem::computeQt() { jh_form_->Update(); jh_form_->Assemble(); jh_form_->ParallelAssemble(jh_); + + // this bit is to prevent joule heating bleed -> make more elegant and then move to separate routine + ParGridFunction coordsDof(vfes_); + pmesh_->GetNodes(coordsDof); + double rCyl = 0.029; + { + double* djh = jh_.HostReadWrite(); + for (int i = 0; i < sDofInt_; i++) { + double x, z, dist; + double wgt; + x = coordsDof(0 * sDofInt_ + i); + // y = coordsDof(1 * sDofInt_ + i); + dist = x * x; + if (dim_ == 3) { + z = coordsDof(2 * sDofInt_ + i); + // z = z - spark_center_[2]; + dist += z * z; + } + dist = std::sqrt(dist); + wgt = 1.0; + if (dist > rCyl) wgt = 0.0; + djh[i] *= wgt; + } + } + tmpR0_ -= jh_; sfes_->GetRestrictionMatrix()->MultTranspose(tmpR0_, resT_gf_); diff --git a/src/lte_thermo_chem.hpp b/src/lte_thermo_chem.hpp index 32c606a4..85f9a42d 100644 --- a/src/lte_thermo_chem.hpp +++ b/src/lte_thermo_chem.hpp @@ -51,8 +51,8 @@ class Tps; #include "tps_mfem_wrap.hpp" #include "utils.hpp" -using VecFuncT = void(const Vector &x, double t, Vector &u); -using ScalarFuncT = double(const Vector &x, double t); +using VecFuncT = void(const Vector& x, double t, Vector& u); +using ScalarFuncT = double(const Vector& x, double t); class LoMachOptions; struct temporalSchemeCoefficients; @@ -76,13 +76,13 @@ class Radiation; class LteThermoChem final : public ThermoChemModelBase { private: // Options-related structures - TPS::Tps *tpsP_ = nullptr; + TPS::Tps* tpsP_ = nullptr; // Mesh and discretization scheme info - ParMesh *pmesh_ = nullptr; + ParMesh* pmesh_ = nullptr; int order_; IntegrationRules gll_rules_; - const temporalSchemeCoefficients &time_coeff_; + const temporalSchemeCoefficients& time_coeff_; // Flags bool rank0_; /**< true if this is rank 0 */ @@ -101,6 +101,15 @@ class LteThermoChem final : public ThermoChemModelBase { int max_iter_; /**< Maximum number of linear solver iterations */ double rtol_ = 1e-12; /**< Linear solver relative tolerance */ + int dim_; + int sDofInt_; + + // flow spark + bool spark_ = false; + double spark_radius_; + double spark_peak_; + Vector spark_center_; + // Boundary condition info Array temp_ess_attr_; /**< List of patches with Dirichlet BC on temperature */ Array Qt_ess_attr_; /**< List of patches with Dirichlet BC on Q (thermal divergence) */ @@ -111,13 +120,13 @@ class LteThermoChem final : public ThermoChemModelBase { std::vector> temp_dbcs_; /**< vector of Dirichlet BC coefficients for T*/ std::vector> Qt_dbcs_; /**< vector of Dirichlet BC coefficients for Q*/ - LinearTable *mu_table_; // dynamic viscosity - LinearTable *kappa_table_; // thermal conductivity - LinearTable *sigma_table_; // electrical conductivity - LinearTable *Rgas_table_; // specific gas constant - LinearTable *Cp_table_; // specific heat at constant pressure + LinearTable* mu_table_; // dynamic viscosity + LinearTable* kappa_table_; // thermal conductivity + LinearTable* sigma_table_; // electrical conductivity + LinearTable* Rgas_table_; // specific gas constant + LinearTable* Cp_table_; // specific heat at constant pressure - Radiation *radiation_ = nullptr; + Radiation* radiation_ = nullptr; /// pressure-related, closed-system thermo pressure changes double ambient_pressure_, thermo_pressure_, system_mass_; @@ -129,6 +138,9 @@ class LteThermoChem final : public ThermoChemModelBase { double Prt_; double invPrt_; + double Pr_; + double invPr_; + bool Tclip_ = false; double Tmin_ = 0.0; double Tmax_ = 100000.0; @@ -136,10 +148,13 @@ class LteThermoChem final : public ThermoChemModelBase { // FEM related fields and objects // Scalar \f$H^1\f$ finite element collection. - FiniteElementCollection *sfec_ = nullptr; + FiniteElementCollection* sfec_ = nullptr; // Scalar \f$H^1\f$ finite element space. - ParFiniteElementSpace *sfes_ = nullptr; + ParFiniteElementSpace* sfes_ = nullptr; + + FiniteElementCollection* vfec_ = nullptr; + ParFiniteElementSpace* vfes_ = nullptr; // Fields ParGridFunction Tnm1_gf_, Tnm2_gf_; @@ -158,69 +173,69 @@ class LteThermoChem final : public ThermoChemModelBase { ParGridFunction R0PM0_gf_; ParGridFunction Qt_gf_; - ParGridFunction *gridScale_gf_ = nullptr; + ParGridFunction* gridScale_gf_ = nullptr; // ParGridFunction *buffer_tInlet_ = nullptr; - GridFunctionCoefficient *temperature_bc_field_ = nullptr; + GridFunctionCoefficient* temperature_bc_field_ = nullptr; ConstantCoefficient bd0_over_dt; - VectorGridFunctionCoefficient *un_next_coeff_ = nullptr; - GridFunctionCoefficient *rhon_next_coeff_ = nullptr; - ScalarVectorProductCoefficient *rho_Cp_u_coeff_ = nullptr; - GridFunctionCoefficient *thermal_diff_coeff_ = nullptr; - GridFunctionCoefficient *mut_coeff_ = nullptr; - ProductCoefficient *kapt_coeff_ = nullptr; - GridFunctionCoefficient *mult_coeff_ = nullptr; - SumCoefficient *thermal_diff_sum_coeff_ = nullptr; - ProductCoefficient *thermal_diff_total_coeff_ = nullptr; - GradientGridFunctionCoefficient *gradT_coeff_ = nullptr; - ScalarVectorProductCoefficient *kap_gradT_coeff_ = nullptr; - GridFunctionCoefficient *rho_coeff_ = nullptr; - GridFunctionCoefficient *Cp_coeff_ = nullptr; - ProductCoefficient *rho_Cp_over_dt_coeff_ = nullptr; - ProductCoefficient *rho_Cp_coeff_ = nullptr; - GridFunctionCoefficient *jh_coeff_ = nullptr; - GridFunctionCoefficient *radiation_sink_coeff_ = nullptr; - - ProductCoefficient *rad_rho_coeff_ = nullptr; - ProductCoefficient *rad_rho_Cp_coeff_ = nullptr; - ScalarVectorProductCoefficient *rad_rho_Cp_u_coeff_ = nullptr; - ProductCoefficient *rad_rho_Cp_over_dt_coeff_ = nullptr; - ProductCoefficient *rad_thermal_diff_total_coeff_ = nullptr; - ScalarVectorProductCoefficient *rad_un_next_coeff_ = nullptr; - ProductCoefficient *rad_jh_coeff_ = nullptr; - ProductCoefficient *rad_radiation_sink_coeff_ = nullptr; - ScalarVectorProductCoefficient *rad_kap_gradT_coeff_ = nullptr; - - VectorMagnitudeCoefficient *umag_coeff_ = nullptr; - GridFunctionCoefficient *gscale_coeff_ = nullptr; - ProductCoefficient *gscale2_coeff_ = nullptr; - GridFunctionCoefficient *visc_coeff_ = nullptr; - PowerCoefficient *visc_inv_coeff_ = nullptr; - ProductCoefficient *reh1_coeff_ = nullptr; - ProductCoefficient *reh2_coeff_ = nullptr; - ProductCoefficient *Reh_coeff_ = nullptr; - ExtTransformedCoefficient *csupg_coeff_ = nullptr; - ProductCoefficient *uw1_coeff_ = nullptr; - ProductCoefficient *uw2_coeff_ = nullptr; - ProductCoefficient *upwind_coeff_ = nullptr; - TransformedMatrixVectorCoefficient *swdiff_coeff_ = nullptr; - ScalarMatrixProductCoefficient *supg_coeff_ = nullptr; + VectorGridFunctionCoefficient* un_next_coeff_ = nullptr; + GridFunctionCoefficient* rhon_next_coeff_ = nullptr; + ScalarVectorProductCoefficient* rho_Cp_u_coeff_ = nullptr; + GridFunctionCoefficient* thermal_diff_coeff_ = nullptr; + GridFunctionCoefficient* mut_coeff_ = nullptr; + ProductCoefficient* kapt_coeff_ = nullptr; + GridFunctionCoefficient* mult_coeff_ = nullptr; + SumCoefficient* thermal_diff_sum_coeff_ = nullptr; + ProductCoefficient* thermal_diff_total_coeff_ = nullptr; + GradientGridFunctionCoefficient* gradT_coeff_ = nullptr; + ScalarVectorProductCoefficient* kap_gradT_coeff_ = nullptr; + GridFunctionCoefficient* rho_coeff_ = nullptr; + GridFunctionCoefficient* Cp_coeff_ = nullptr; + ProductCoefficient* rho_Cp_over_dt_coeff_ = nullptr; + ProductCoefficient* rho_Cp_coeff_ = nullptr; + GridFunctionCoefficient* jh_coeff_ = nullptr; + GridFunctionCoefficient* radiation_sink_coeff_ = nullptr; + + ProductCoefficient* rad_rho_coeff_ = nullptr; + ProductCoefficient* rad_rho_Cp_coeff_ = nullptr; + ScalarVectorProductCoefficient* rad_rho_Cp_u_coeff_ = nullptr; + ProductCoefficient* rad_rho_Cp_over_dt_coeff_ = nullptr; + ProductCoefficient* rad_thermal_diff_total_coeff_ = nullptr; + ScalarVectorProductCoefficient* rad_un_next_coeff_ = nullptr; + ProductCoefficient* rad_jh_coeff_ = nullptr; + ProductCoefficient* rad_radiation_sink_coeff_ = nullptr; + ScalarVectorProductCoefficient* rad_kap_gradT_coeff_ = nullptr; + + VectorMagnitudeCoefficient* umag_coeff_ = nullptr; + GridFunctionCoefficient* gscale_coeff_ = nullptr; + ProductCoefficient* gscale2_coeff_ = nullptr; + GridFunctionCoefficient* visc_coeff_ = nullptr; + PowerCoefficient* visc_inv_coeff_ = nullptr; + ProductCoefficient* reh1_coeff_ = nullptr; + ProductCoefficient* reh2_coeff_ = nullptr; + ProductCoefficient* Reh_coeff_ = nullptr; + ExtTransformedCoefficient* csupg_coeff_ = nullptr; + ProductCoefficient* uw1_coeff_ = nullptr; + ProductCoefficient* uw2_coeff_ = nullptr; + ProductCoefficient* upwind_coeff_ = nullptr; + TransformedMatrixVectorCoefficient* swdiff_coeff_ = nullptr; + ScalarMatrixProductCoefficient* supg_coeff_ = nullptr; // operators and solvers - ParBilinearForm *At_form_ = nullptr; - ParBilinearForm *Ms_form_ = nullptr; - ParBilinearForm *M_rho_Cp_form_ = nullptr; - ParBilinearForm *Ht_form_ = nullptr; + ParBilinearForm* At_form_ = nullptr; + ParBilinearForm* Ms_form_ = nullptr; + ParBilinearForm* M_rho_Cp_form_ = nullptr; + ParBilinearForm* Ht_form_ = nullptr; - ParBilinearForm *M_rho_form_ = nullptr; - ParBilinearForm *A_rho_form_ = nullptr; + ParBilinearForm* M_rho_form_ = nullptr; + ParBilinearForm* A_rho_form_ = nullptr; - ParLinearForm *jh_form_ = nullptr; + ParLinearForm* jh_form_ = nullptr; - ParBilinearForm *Mq_form_ = nullptr; - ParBilinearForm *LQ_form_ = nullptr; - ParLinearForm *LQ_bdry_ = nullptr; + ParBilinearForm* Mq_form_ = nullptr; + ParBilinearForm* LQ_form_ = nullptr; + ParLinearForm* LQ_bdry_ = nullptr; OperatorHandle At_; OperatorHandle Ht_; @@ -231,14 +246,14 @@ class LteThermoChem final : public ThermoChemModelBase { OperatorHandle M_rho_; OperatorHandle A_rho_; - mfem::Solver *MsInvPC_ = nullptr; - mfem::CGSolver *MsInv_ = nullptr; - mfem::Solver *MqInvPC_ = nullptr; - mfem::CGSolver *MqInv_ = nullptr; - mfem::Solver *MrhoInvPC_ = nullptr; - mfem::CGSolver *MrhoInv_ = nullptr; - mfem::Solver *HtInvPC_ = nullptr; - mfem::CGSolver *HtInv_ = nullptr; + mfem::Solver* MsInvPC_ = nullptr; + mfem::CGSolver* MsInv_ = nullptr; + mfem::Solver* MqInvPC_ = nullptr; + mfem::CGSolver* MqInv_ = nullptr; + mfem::Solver* MrhoInvPC_ = nullptr; + mfem::CGSolver* MrhoInv_ = nullptr; + mfem::Solver* HtInvPC_ = nullptr; + mfem::CGSolver* HtInv_ = nullptr; // Vectors Vector Tn_, Tn_next_, Tnm1_, Tnm2_; @@ -262,23 +277,23 @@ class LteThermoChem final : public ThermoChemModelBase { int filter_cutoff_modes_ = 0; double filter_alpha_ = 0.0; - FiniteElementCollection *sfec_filter_ = nullptr; - ParFiniteElementSpace *sfes_filter_ = nullptr; + FiniteElementCollection* sfec_filter_ = nullptr; + ParFiniteElementSpace* sfes_filter_ = nullptr; ParGridFunction Tn_NM1_gf_; ParGridFunction Tn_filtered_gf_; public: - LteThermoChem(mfem::ParMesh *pmesh, LoMachOptions *loMach_opts, temporalSchemeCoefficients &timeCoeff, - ParGridFunction *gridScale, TPS::Tps *tps); + LteThermoChem(mfem::ParMesh* pmesh, LoMachOptions* loMach_opts, temporalSchemeCoefficients& timeCoeff, + ParGridFunction* gridScale, TPS::Tps* tps); virtual ~LteThermoChem(); // Functions overriden from base class void initializeSelf() final; void initializeOperators() final; - void initializeStats(Averaging &average, IODataOrganizer &io, bool continuation) final; + void initializeStats(Averaging& average, IODataOrganizer& io, bool continuation) final; void step() final; - void initializeIO(IODataOrganizer &io) final; - void initializeViz(ParaViewDataCollection &pvdc) final; + void initializeIO(IODataOrganizer& io) final; + void initializeViz(ParaViewDataCollection& pvdc) final; void evaluatePlasmaConductivityGF() final; // Functions added here @@ -292,25 +307,25 @@ class LteThermoChem final : public ThermoChemModelBase { void updateHistory(); /// Return a pointer to the current temperature ParGridFunction. - ParGridFunction *GetCurrentTemperature() { return &Tn_gf_; } + ParGridFunction* GetCurrentTemperature() { return &Tn_gf_; } /// Return a pointer to the current density ParGridFunction. - ParGridFunction *GetCurrentDensity() { return &rn_gf_; } + ParGridFunction* GetCurrentDensity() { return &rn_gf_; } /// Return a pointer to the current total viscosity ParGridFunction. - ParGridFunction *GetCurrentViscosity() { return &mu_gf_; } + ParGridFunction* GetCurrentViscosity() { return &mu_gf_; } /// Return a pointer to the current total thermal diffusivity ParGridFunction. - ParGridFunction *GetCurrentThermalDiffusivity() { return &kappa_gf_; } + ParGridFunction* GetCurrentThermalDiffusivity() { return &kappa_gf_; } /// Return a pointer to the current total thermal diffusivity ParGridFunction. - ParGridFunction *GetCurrentThermalDiv() { return &Qt_gf_; } + ParGridFunction* GetCurrentThermalDiv() { return &Qt_gf_; } /// Add a Dirichlet boundary condition to the temperature and Qt field. - void AddTempDirichletBC(const double &temp, Array &attr); - void AddTempDirichletBC(Coefficient *coeff, Array &attr); - void AddTempDirichletBC(ScalarFuncT *f, Array &attr); - void AddQtDirichletBC(Coefficient *coeff, Array &attr); - void AddQtDirichletBC(ScalarFuncT *f, Array &attr); + void AddTempDirichletBC(const double& temp, Array& attr); + void AddTempDirichletBC(Coefficient* coeff, Array& attr); + void AddTempDirichletBC(ScalarFuncT* f, Array& attr); + void AddQtDirichletBC(Coefficient* coeff, Array& attr); + void AddQtDirichletBC(ScalarFuncT* f, Array& attr); }; #endif // LTE_THERMO_CHEM_HPP_ diff --git a/src/lte_transport_properties.cpp b/src/lte_transport_properties.cpp index 15b22536..ab0b629b 100644 --- a/src/lte_transport_properties.cpp +++ b/src/lte_transport_properties.cpp @@ -33,7 +33,7 @@ #include "lte_transport_properties.hpp" #ifndef _GPU_ -LteTransport::LteTransport(GasMixture *_mixture, RunConfiguration &_runfile) : MolecularTransport(_mixture) { +LteTransport::LteTransport(GasMixture* _mixture, RunConfiguration& _runfile) : MolecularTransport(_mixture) { #ifdef HAVE_GSL mu_table_ = new GslTableInterpolator2D(_runfile.lteMixtureInput.trans_file_name, 0, /* temperature column */ 1, /* density column */ @@ -57,7 +57,7 @@ LteTransport::LteTransport(GasMixture *_mixture, RunConfiguration &_runfile) : M #endif // HAVE_GSL } -LteTransport::LteTransport(GasMixture *_mixture, TableInput mu_table_input, TableInput kappa_table_input, +LteTransport::LteTransport(GasMixture* _mixture, TableInput mu_table_input, TableInput kappa_table_input, TableInput sigma_table_input) : MolecularTransport(_mixture) { mu_table_ = new LinearTable(mu_table_input); @@ -65,7 +65,7 @@ LteTransport::LteTransport(GasMixture *_mixture, TableInput mu_table_input, Tabl sigma_table_ = new LinearTable(sigma_table_input); } #else -MFEM_HOST_DEVICE LteTransport::LteTransport(GasMixture *_mixture, TableInput mu_table_input, +MFEM_HOST_DEVICE LteTransport::LteTransport(GasMixture* _mixture, TableInput mu_table_input, TableInput kappa_table_input, TableInput sigma_table_input) : MolecularTransport(_mixture), mu_table_(LinearTable(mu_table_input)), @@ -81,9 +81,9 @@ MFEM_HOST_DEVICE LteTransport::~LteTransport() { #endif } -MFEM_HOST_DEVICE void LteTransport::ComputeFluxMolecularTransport(const double *state, const double *gradUp, - const double *Efield, double *transportBuffer, - double *diffusionVelocity) { +MFEM_HOST_DEVICE void LteTransport::ComputeFluxMolecularTransport(const double* state, const double* gradUp, + const double* Efield, double* transportBuffer, + double* diffusionVelocity) { const double rho = state[0]; const double T = mixture->ComputeTemperature(state); @@ -104,10 +104,10 @@ MFEM_HOST_DEVICE void LteTransport::ComputeFluxMolecularTransport(const double * } } -MFEM_HOST_DEVICE void LteTransport::ComputeSourceMolecularTransport(const double *state, const double *Up, - const double *gradUp, const double *Efield, - double *globalTransport, double *speciesTransport, - double *diffusionVelocity, double *n_sp) { +MFEM_HOST_DEVICE void LteTransport::ComputeSourceMolecularTransport(const double* state, const double* Up, + const double* gradUp, const double* Efield, + double* globalTransport, double* speciesTransport, + double* diffusionVelocity, double* n_sp) { const double rho = Up[0]; const double T = Up[1 + nvel_]; #ifdef _GPU_ @@ -122,7 +122,7 @@ MFEM_HOST_DEVICE void LteTransport::ComputeSourceMolecularTransport(const double globalTransport[SrcTrns::ELECTRIC_CONDUCTIVITY] = sigma; } -MFEM_HOST_DEVICE void LteTransport::GetViscosities(const double *conserved, const double *primitive, double *visc) { +MFEM_HOST_DEVICE void LteTransport::GetViscosities(const double* conserved, const double* primitive, double* visc) { const double rho = primitive[0]; const double T = primitive[1 + nvel_]; diff --git a/src/lte_transport_properties.hpp b/src/lte_transport_properties.hpp index 9b53242a..ab0f8921 100644 --- a/src/lte_transport_properties.hpp +++ b/src/lte_transport_properties.hpp @@ -59,30 +59,30 @@ class LteTransport : public MolecularTransport { LinearTable kappa_table_; // thermal conductivity LinearTable sigma_table_; // electrical conductivity #else - TableInterface *mu_table_; // dynamic viscosity - TableInterface *kappa_table_; // thermal conductivity - TableInterface *sigma_table_; // electrical conductivity + TableInterface* mu_table_; // dynamic viscosity + TableInterface* kappa_table_; // thermal conductivity + TableInterface* sigma_table_; // electrical conductivity #endif public: #ifndef _GPU_ - LteTransport(GasMixture *_mixture, RunConfiguration &_runfile); + LteTransport(GasMixture* _mixture, RunConfiguration& _runfile); #endif - MFEM_HOST_DEVICE LteTransport(GasMixture *_mixture, TableInput mu_table_input, TableInput kappa_table_input, + MFEM_HOST_DEVICE LteTransport(GasMixture* _mixture, TableInput mu_table_input, TableInput kappa_table_input, TableInput sigma_table_input); MFEM_HOST_DEVICE virtual ~LteTransport(); - MFEM_HOST_DEVICE void ComputeFluxMolecularTransport(const double *state, const double *gradUp, const double *Efield, - double *transportBuffer, double *diffusionVelocity) final; + MFEM_HOST_DEVICE void ComputeFluxMolecularTransport(const double* state, const double* gradUp, const double* Efield, + double* transportBuffer, double* diffusionVelocity) final; - MFEM_HOST_DEVICE void ComputeSourceMolecularTransport(const double *state, const double *Up, const double *gradUp, - const double *Efield, double *globalTransport, - double *speciesTransport, double *diffusionVelocity, - double *n_sp) final; + MFEM_HOST_DEVICE void ComputeSourceMolecularTransport(const double* state, const double* Up, const double* gradUp, + const double* Efield, double* globalTransport, + double* speciesTransport, double* diffusionVelocity, + double* n_sp) final; using MolecularTransport::GetViscosities; - MFEM_HOST_DEVICE void GetViscosities(const double *conserved, const double *primitive, double *visc) final; + MFEM_HOST_DEVICE void GetViscosities(const double* conserved, const double* primitive, double* visc) final; }; #endif // LTE_TRANSPORT_PROPERTIES_HPP_ diff --git a/src/main.cpp b/src/main.cpp index a324951b..b548c189 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -36,7 +36,7 @@ #include "tps.hpp" -int main(int argc, char *argv[]) { +int main(int argc, char* argv[]) { mfem::Mpi::Init(argc, argv); int status; { diff --git a/src/masa_handler.cpp b/src/masa_handler.cpp index c330eeb2..de39bf3b 100644 --- a/src/masa_handler.cpp +++ b/src/masa_handler.cpp @@ -87,8 +87,8 @@ void M2ulPhyS::initMasaHandler() { initMMSCoefficients(); } -void M2ulPhyS::projectExactSolution(const double _time, ParGridFunction *prjU) { - void (*exactSolnFunction)(const Vector &, double, Vector &); +void M2ulPhyS::projectExactSolution(const double _time, ParGridFunction* prjU) { + void (*exactSolnFunction)(const Vector&, double, Vector&); if (config.workFluid == DRY_AIR || config.workFluid == LTE_FLUID) { if (dim == 2) { @@ -124,7 +124,7 @@ void M2ulPhyS::initMMSCoefficients() { // set up origin vector to compute L2 norm via ComputeLpError. zeroUBlock_ = new BlockVector(*offsets); zeroU_ = new ParGridFunction(vfes, zeroUBlock_->HostReadWrite()); - double *dataZeros = zeroU_->HostReadWrite(); + double* dataZeros = zeroU_->HostReadWrite(); int NDof = vfes->GetNDofs(); for (int i = 0; i < NDof; i++) { for (int eq = 0; eq < num_equation; eq++) { @@ -150,7 +150,7 @@ void M2ulPhyS::checkSolutionError(const double _time, const bool final) { cout << "time step: " << iter << ", physical time " << _time << "s" << ", Dens. error: " << errorDen << " Vel. " << errorVel << " press. " << errorPre << endl; } else { - Coefficient *nullPtr = NULL; + Coefficient* nullPtr = NULL; stateMMS_->SetTime(_time); Vector componentErrors(num_equation), componentRelErrors(num_equation); @@ -196,13 +196,13 @@ void M2ulPhyS::checkSolutionError(const double _time, const bool final) { namespace mms { -void exactSolnFunction(const Vector &x, double tin, Vector &y) { +void exactSolnFunction(const Vector& x, double tin, Vector& y) { std::vector y1(y.Size()); MASA::masa_eval_exact_state(x[0], x[1], y1); for (int eq = 0; eq < y.Size(); eq++) y[eq] = y1[eq]; } -void evaluateForcing(const Vector &x, double time, Array &y) { +void evaluateForcing(const Vector& x, double time, Array& y) { std::vector y1(y.Size()); MASA::masa_eval_source_state(x[0], x[1], y1); for (int eq = 0; eq < y.Size(); eq++) y[eq] = y1[eq]; @@ -212,14 +212,14 @@ void evaluateForcing(const Vector &x, double time, Array &y) { namespace dryair2d { -void evaluateForcing(const Vector &x, double time, Array &y) { +void evaluateForcing(const Vector& x, double time, Array& y) { y[0] = MASA::masa_eval_source_rho(x[0], x[1]); // rho y[1] = MASA::masa_eval_source_rho_u(x[0], x[1]); // rho*u y[2] = MASA::masa_eval_source_rho_v(x[0], x[1]); // rho*v y[3] = MASA::masa_eval_source_rho_e(x[0], x[1]); // rhp*e } -void exactSolnFunction(const Vector &x, double tin, Vector &y) { +void exactSolnFunction(const Vector& x, double tin, Vector& y) { // TODO(kevin): make one for NS2DCompressible. MFEM_ASSERT(x.Size() == 2, ""); @@ -237,7 +237,7 @@ void exactSolnFunction(const Vector &x, double tin, Vector &y) { y[3] += k; } -void initEuler2D(const int dim, RunConfiguration &config) { +void initEuler2D(const int dim, RunConfiguration& config) { assert(dim == 2); assert(config.workFluid == DRY_AIR); assert(config.GetEquationSystem() == EULER); @@ -262,7 +262,7 @@ void initEuler2D(const int dim, RunConfiguration &config) { MASA::masa_set_param("a_py", 2.); } -void initCNS2DSutherlands(const int dim, RunConfiguration &config) { +void initCNS2DSutherlands(const int dim, RunConfiguration& config) { assert(dim == 2); assert(config.workFluid == DRY_AIR); assert(config.mms_name_ == "ad_cns_2d_sutherlands"); @@ -303,7 +303,7 @@ void initCNS2DSutherlands(const int dim, RunConfiguration &config) { namespace dryair3d { -void evaluateForcing(const Vector &x, double time, Array &y) { +void evaluateForcing(const Vector& x, double time, Array& y) { y[0] = MASA::masa_eval_source_rho(x[0], x[1], x[2], time); // rho y[1] = MASA::masa_eval_source_u(x[0], x[1], x[2], time); // rho*u y[2] = MASA::masa_eval_source_v(x[0], x[1], x[2], time); // rho*v @@ -311,7 +311,7 @@ void evaluateForcing(const Vector &x, double time, Array &y) { y[4] = MASA::masa_eval_source_e(x[0], x[1], x[2], time); // rhp*e } -void exactSolnFunction(const Vector &x, double tin, Vector &y) { +void exactSolnFunction(const Vector& x, double tin, Vector& y) { // TODO(kevin): make one for NS2DCompressible. MFEM_ASSERT(x.Size() == 3, ""); @@ -330,24 +330,24 @@ void exactSolnFunction(const Vector &x, double tin, Vector &y) { y[4] += k; } -void exactDenFunction(const Vector &x, double tin, Vector &y) { +void exactDenFunction(const Vector& x, double tin, Vector& y) { MFEM_ASSERT(x.Size() == 3, ""); y(0) = MASA::masa_eval_exact_rho(x[0], x[1], x[2], tin); // rho } -void exactVelFunction(const Vector &x, double tin, Vector &y) { +void exactVelFunction(const Vector& x, double tin, Vector& y) { MFEM_ASSERT(x.Size() == 3, ""); y(0) = MASA::masa_eval_exact_u(x[0], x[1], x[2], tin); y(1) = MASA::masa_eval_exact_v(x[0], x[1], x[2], tin); y(2) = MASA::masa_eval_exact_w(x[0], x[1], x[2], tin); } -void exactPreFunction(const Vector &x, double tin, Vector &y) { +void exactPreFunction(const Vector& x, double tin, Vector& y) { MFEM_ASSERT(x.Size() == 3, ""); y(0) = MASA::masa_eval_exact_p(x[0], x[1], x[2], tin); } -void initEuler3DTransient(const int dim, RunConfiguration &config) { +void initEuler3DTransient(const int dim, RunConfiguration& config) { assert(dim == 3); assert(config.workFluid == DRY_AIR || config.workFluid == LTE_FLUID); assert(config.GetEquationSystem() == EULER); @@ -417,7 +417,7 @@ void initEuler3DTransient(const int dim, RunConfiguration &config) { MASA::masa_set_param("a_pt", 400.); } -void initNS3DTransient(const int dim, RunConfiguration &config) { +void initNS3DTransient(const int dim, RunConfiguration& config) { assert(dim == 3); assert(config.workFluid == DRY_AIR); assert(config.GetEquationSystem() == NS); @@ -498,7 +498,7 @@ void initNS3DTransient(const int dim, RunConfiguration &config) { namespace ternary2d { -void initTernary2DBase(GasMixture *mixture, RunConfiguration &config, const double Lx, const double Ly) { +void initTernary2DBase(GasMixture* mixture, RunConfiguration& config, const double Lx, const double Ly) { assert(config.numSpecies == 3); assert(config.transportModel == CONSTANT); assert(config.gasModel == PERFECT_MIXTURE); @@ -618,7 +618,7 @@ void initTernary2DBase(GasMixture *mixture, RunConfiguration &config, const doub MASA::masa_set_param("rE", rE); } -void initTernary2DPeriodic(GasMixture *mixture, RunConfiguration &config, const double Lx, const double Ly) { +void initTernary2DPeriodic(GasMixture* mixture, RunConfiguration& config, const double Lx, const double Ly) { assert(config.mms_name_ == "ternary_2d_periodic"); assert(!config.ambipolar); assert(!config.twoTemperature); @@ -635,7 +635,7 @@ void initTernary2DPeriodic(GasMixture *mixture, RunConfiguration &config, const MASA::masa_set_param("offset_y1", 0.29); } -void initTernary2DPeriodicAmbipolar(GasMixture *mixture, RunConfiguration &config, const double Lx, const double Ly) { +void initTernary2DPeriodicAmbipolar(GasMixture* mixture, RunConfiguration& config, const double Lx, const double Ly) { assert(config.mms_name_ == "ternary_2d_periodic_ambipolar"); assert(config.ambipolar); assert(!config.twoTemperature); @@ -644,7 +644,7 @@ void initTernary2DPeriodicAmbipolar(GasMixture *mixture, RunConfiguration &confi ternary2d::initTernary2DBase(mixture, config, Lx, Ly); } -void initTernary2D2TPeriodicAmbipolar(GasMixture *mixture, RunConfiguration &config, const double Lx, const double Ly) { +void initTernary2D2TPeriodicAmbipolar(GasMixture* mixture, RunConfiguration& config, const double Lx, const double Ly) { assert(config.mms_name_ == "ternary_2d_2t_periodic_ambipolar"); assert(config.ambipolar); assert(config.twoTemperature); @@ -669,7 +669,7 @@ void initTernary2D2TPeriodicAmbipolar(GasMixture *mixture, RunConfiguration &con MASA::masa_set_param("nu_A", config.constantTransport.mtFreq[numSpecies - 1]); } -void initTernary2D2TAmbipolarWall(GasMixture *mixture, RunConfiguration &config, const double Lx, const double Ly) { +void initTernary2D2TAmbipolarWall(GasMixture* mixture, RunConfiguration& config, const double Lx, const double Ly) { assert(config.mms_name_ == "ternary_2d_2t_ambipolar_wall"); assert(config.ambipolar); assert(config.twoTemperature); @@ -717,7 +717,7 @@ void initTernary2D2TAmbipolarWall(GasMixture *mixture, RunConfiguration &config, MASA::masa_set_param("dX0y", 0.045); } -void initTernary2D2TAmbipolarInoutlet(GasMixture *mixture, RunConfiguration &config, const double Lx, const double Ly) { +void initTernary2D2TAmbipolarInoutlet(GasMixture* mixture, RunConfiguration& config, const double Lx, const double Ly) { assert(config.mms_name_ == "ternary_2d_2t_ambipolar_inoutlet"); assert(config.ambipolar); assert(config.twoTemperature); @@ -787,7 +787,7 @@ void initTernary2D2TAmbipolarInoutlet(GasMixture *mixture, RunConfiguration &con MASA::masa_set_param("offset_py", 0.87); } -void initTernary2DSheath(GasMixture *mixture, RunConfiguration &config, const double Lx, const double Ly) { +void initTernary2DSheath(GasMixture* mixture, RunConfiguration& config, const double Lx, const double Ly) { assert(config.mms_name_ == "ternary_2d_sheath"); assert(config.ambipolar); assert(config.twoTemperature); diff --git a/src/masa_handler.hpp b/src/masa_handler.hpp index 5994a520..fb6a6dd1 100644 --- a/src/masa_handler.hpp +++ b/src/masa_handler.hpp @@ -46,49 +46,49 @@ using namespace std; namespace mms { -void exactSolnFunction(const Vector &x, double tin, Vector &y); -void evaluateForcing(const Vector &x, double time, Array &y); +void exactSolnFunction(const Vector& x, double tin, Vector& y); +void evaluateForcing(const Vector& x, double time, Array& y); } // namespace mms namespace dryair2d { -void evaluateForcing(const Vector &x, double time, Array &y); -void exactSolnFunction(const Vector &x, double tin, Vector &y); -void initEuler2D(const int dim, RunConfiguration &config); -void initCNS2DSutherlands(const int dim, RunConfiguration &config); +void evaluateForcing(const Vector& x, double time, Array& y); +void exactSolnFunction(const Vector& x, double tin, Vector& y); +void initEuler2D(const int dim, RunConfiguration& config); +void initCNS2DSutherlands(const int dim, RunConfiguration& config); } // namespace dryair2d namespace dryair3d { -void evaluateForcing(const Vector &x, double time, Array &y); +void evaluateForcing(const Vector& x, double time, Array& y); -void exactSolnFunction(const Vector &x, double tin, Vector &y); -void exactDenFunction(const Vector &x, double tin, Vector &y); -void exactVelFunction(const Vector &x, double tin, Vector &y); -void exactPreFunction(const Vector &x, double tin, Vector &y); +void exactSolnFunction(const Vector& x, double tin, Vector& y); +void exactDenFunction(const Vector& x, double tin, Vector& y); +void exactVelFunction(const Vector& x, double tin, Vector& y); +void exactPreFunction(const Vector& x, double tin, Vector& y); -void initEuler3DTransient(const int dim, RunConfiguration &config); -void initNS3DTransient(const int dim, RunConfiguration &config); +void initEuler3DTransient(const int dim, RunConfiguration& config); +void initNS3DTransient(const int dim, RunConfiguration& config); } // namespace dryair3d namespace ternary2d { -void initTernary2DBase(GasMixture *mixture, RunConfiguration &config, const double Lx, const double Ly); +void initTernary2DBase(GasMixture* mixture, RunConfiguration& config, const double Lx, const double Ly); -void initTernary2DPeriodic(GasMixture *mixture, RunConfiguration &config, const double Lx, const double Ly); +void initTernary2DPeriodic(GasMixture* mixture, RunConfiguration& config, const double Lx, const double Ly); -void initTernary2DPeriodicAmbipolar(GasMixture *mixture, RunConfiguration &config, const double Lx, const double Ly); +void initTernary2DPeriodicAmbipolar(GasMixture* mixture, RunConfiguration& config, const double Lx, const double Ly); -void initTernary2D2TPeriodicAmbipolar(GasMixture *mixture, RunConfiguration &config, const double Lx, const double Ly); +void initTernary2D2TPeriodicAmbipolar(GasMixture* mixture, RunConfiguration& config, const double Lx, const double Ly); -void initTernary2D2TAmbipolarWall(GasMixture *mixture, RunConfiguration &config, const double Lx, const double Ly); +void initTernary2D2TAmbipolarWall(GasMixture* mixture, RunConfiguration& config, const double Lx, const double Ly); -void initTernary2D2TAmbipolarInoutlet(GasMixture *mixture, RunConfiguration &config, const double Lx, const double Ly); +void initTernary2D2TAmbipolarInoutlet(GasMixture* mixture, RunConfiguration& config, const double Lx, const double Ly); -void initTernary2DSheath(GasMixture *mixture, RunConfiguration &config, const double Lx, const double Ly); +void initTernary2DSheath(GasMixture* mixture, RunConfiguration& config, const double Lx, const double Ly); } // namespace ternary2d diff --git a/src/mesh_base.cpp b/src/mesh_base.cpp index 122e45a8..a10ca128 100644 --- a/src/mesh_base.cpp +++ b/src/mesh_base.cpp @@ -47,7 +47,7 @@ using namespace mfem; -MeshBase::MeshBase(TPS::Tps *tps, LoMachOptions *loMach_opts, int order) +MeshBase::MeshBase(TPS::Tps* tps, LoMachOptions* loMach_opts, int order) : tpsP_(tps), groupsMPI(new MPI_Groups(tps->getTPSCommWorld())), rank0_(groupsMPI->isWorldRoot()), @@ -155,7 +155,7 @@ void MeshBase::initializeMesh() { if (loMach_opts_->scale_mesh != 1) { if (rank0_) grvy_printf(ginfo, "Scaling mesh factor of scale_mesh = %.6e\n", loMach_opts_->scale_mesh); serial_mesh_->EnsureNodes(); - GridFunction *nodes = serial_mesh_->GetNodes(); + GridFunction* nodes = serial_mesh_->GetNodes(); *nodes *= loMach_opts_->scale_mesh; } @@ -272,7 +272,7 @@ void MeshBase::initializeMesh() { } } -void MeshBase::initializeViz(ParaViewDataCollection &pvdc) { +void MeshBase::initializeViz(ParaViewDataCollection& pvdc) { pvdc.RegisterField("resolution", gridScale_); if (loMach_opts_->compute_wallDistance) { pvdc.RegisterField("wall_dist", distance_); @@ -296,8 +296,8 @@ void MeshBase::computeGridScale() { zones_per_vdofALL.SetSize(fes_->GetVSize()); zones_per_vdofALL = 0; - double *data = gridScale_->HostReadWrite(); - double *count = dofCount.HostReadWrite(); + double* data = gridScale_->HostReadWrite(); + double* count = dofCount.HostReadWrite(); for (int i = 0; i < fes_->GetNDofs(); i++) { data[i] = 0.0; @@ -308,14 +308,14 @@ void MeshBase::computeGridScale() { for (int e = 0; e < fes_->GetNE(); ++e) { fes_->GetElementVDofs(e, vdofs); vals.SetSize(vdofs.Size()); - ElementTransformation *tr = fes_->GetElementTransformation(e); - const FiniteElement *el = fes_->GetFE(e); + ElementTransformation* tr = fes_->GetElementTransformation(e); + const FiniteElement* el = fes_->GetFE(e); elndofs = el->GetDof(); double delta; // element dof for (int dof = 0; dof < elndofs; ++dof) { - const IntegrationPoint &ip = el->GetNodes().IntPoint(dof); + const IntegrationPoint& ip = el->GetNodes().IntPoint(dof); tr->SetIntPoint(&ip); delta = pmesh_->GetElementSize(tr->ElementNo, 1); delta = delta / ((double)order_); @@ -335,7 +335,7 @@ void MeshBase::computeGridScale() { } // Count the zones globally. - GroupCommunicator &gcomm = gridScale_->ParFESpace()->GroupComm(); + GroupCommunicator& gcomm = gridScale_->ParFESpace()->GroupComm(); gcomm.Reduce(zones_per_vdof, GroupCommunicator::Sum); gcomm.Bcast(zones_per_vdof); diff --git a/src/mesh_base.hpp b/src/mesh_base.hpp index 2ccd4745..5f56c051 100644 --- a/src/mesh_base.hpp +++ b/src/mesh_base.hpp @@ -45,19 +45,19 @@ class LoMachOptions; class MeshBase { private: - TPS::Tps *tpsP_ = nullptr; + TPS::Tps* tpsP_ = nullptr; - MPI_Groups *groupsMPI = nullptr; + MPI_Groups* groupsMPI = nullptr; bool rank0_; int nprocs_; // total number of MPI procs int rank_; // local MPI rank - LoMachOptions *loMach_opts_ = nullptr; + LoMachOptions* loMach_opts_ = nullptr; const int order_; int dim_; - ParMesh *pmesh_ = nullptr; - Mesh *serial_mesh_ = nullptr; + ParMesh* pmesh_ = nullptr; + Mesh* serial_mesh_ = nullptr; // mapping from local to global element index // int *locToGlobElem = nullptr; @@ -70,7 +70,7 @@ class MeshBase { const int defaultPartMethod = 1; // mapping from local to global element index - int *local_to_global_element_ = nullptr; + int* local_to_global_element_ = nullptr; // min/max element size double hmin_, hmax_; @@ -79,32 +79,32 @@ class MeshBase { double xmin_, ymin_, zmin_; double xmax_, ymax_, zmax_; - mfem::FiniteElementCollection *fec_ = nullptr; - mfem::ParFiniteElementSpace *fes_ = nullptr; - mfem::ParGridFunction *gridScale_ = nullptr; - mfem::ParGridFunction *distance_ = nullptr; + mfem::FiniteElementCollection* fec_ = nullptr; + mfem::ParFiniteElementSpace* fes_ = nullptr; + mfem::ParGridFunction* gridScale_ = nullptr; + mfem::ParGridFunction* distance_ = nullptr; // used in loMach int sDof_; public: - MeshBase(TPS::Tps *tps, LoMachOptions *loMach_opts, int order); + MeshBase(TPS::Tps* tps, LoMachOptions* loMach_opts, int order); virtual ~MeshBase(); virtual void initializeMesh(); virtual void computeGridScale(); virtual void computeWallDistance(); - virtual void initializeViz(mfem::ParaViewDataCollection &pvdc); + virtual void initializeViz(mfem::ParaViewDataCollection& pvdc); - virtual ParMesh *getMesh() { return pmesh_; } - virtual Mesh *getSerialMesh() { return serial_mesh_; } - virtual ParGridFunction *getGridScale() { return gridScale_; } - virtual ParGridFunction *getWallDistance() { return distance_; } + virtual ParMesh* getMesh() { return pmesh_; } + virtual Mesh* getSerialMesh() { return serial_mesh_; } + virtual ParGridFunction* getGridScale() { return gridScale_; } + virtual ParGridFunction* getWallDistance() { return distance_; } virtual int getDofSize() { return sDof_; } virtual double getMinGridScale() { return hmin_; } virtual Array getPartition() { return partitioning_; } // virtual int getDim() final { return dim_; } - int *getLocalToGlobalElementMap() const { return local_to_global_element_; } + int* getLocalToGlobalElementMap() const { return local_to_global_element_; } }; #endif // MESH_BASE_HPP_ diff --git a/src/mixing_length_transport.cpp b/src/mixing_length_transport.cpp index 8abe2ebb..acdc63b2 100644 --- a/src/mixing_length_transport.cpp +++ b/src/mixing_length_transport.cpp @@ -37,12 +37,12 @@ using namespace std; using namespace mfem; -MixingLengthTransport::MixingLengthTransport(GasMixture *mix, RunConfiguration &runfile, - MolecularTransport *molecular_transport) +MixingLengthTransport::MixingLengthTransport(GasMixture* mix, RunConfiguration& runfile, + MolecularTransport* molecular_transport) : MixingLengthTransport(mix, runfile.mix_length_trans_input_, molecular_transport) {} -MFEM_HOST_DEVICE MixingLengthTransport::MixingLengthTransport(GasMixture *mix, const mixingLengthTransportData &inputs, - MolecularTransport *molecular_transport) +MFEM_HOST_DEVICE MixingLengthTransport::MixingLengthTransport(GasMixture* mix, const mixingLengthTransportData& inputs, + MolecularTransport* molecular_transport) : TransportProperties(mix), max_mixing_length_(inputs.max_mixing_length_), Prt_(inputs.Prt_), @@ -50,19 +50,19 @@ MFEM_HOST_DEVICE MixingLengthTransport::MixingLengthTransport(GasMixture *mix, c bulk_mult_(inputs.bulk_multiplier_), molecular_transport_(molecular_transport) {} -void MixingLengthTransport::ComputeFluxTransportProperties(const Vector &state, const DenseMatrix &gradUp, - const Vector &Efield, double radius, double distance, - Vector &transportBuffer, DenseMatrix &diffusionVelocity) { +void MixingLengthTransport::ComputeFluxTransportProperties(const Vector& state, const DenseMatrix& gradUp, + const Vector& Efield, double radius, double distance, + Vector& transportBuffer, DenseMatrix& diffusionVelocity) { transportBuffer.SetSize(FluxTrns::NUM_FLUX_TRANS); diffusionVelocity.SetSize(numSpecies, nvel_); ComputeFluxTransportProperties(&state[0], gradUp.Read(), &Efield[0], radius, distance, &transportBuffer[0], diffusionVelocity.Write()); } -MFEM_HOST_DEVICE void MixingLengthTransport::ComputeFluxTransportProperties(const double *state, const double *gradUp, - const double *Efield, double radius, - double distance, double *transportBuffer, - double *diffusionVelocity) { +MFEM_HOST_DEVICE void MixingLengthTransport::ComputeFluxTransportProperties(const double* state, const double* gradUp, + const double* Efield, double radius, + double distance, double* transportBuffer, + double* diffusionVelocity) { molecular_transport_->ComputeFluxMolecularTransport(state, gradUp, Efield, transportBuffer, diffusionVelocity); const double kappa = transportBuffer[FluxTrns::HEAVY_THERMAL_CONDUCTIVITY]; @@ -134,11 +134,11 @@ MFEM_HOST_DEVICE void MixingLengthTransport::ComputeFluxTransportProperties(cons // TODO(trevilo): Deal with species diffusivities } -void MixingLengthTransport::ComputeSourceTransportProperties(const Vector &state, const Vector &Up, - const DenseMatrix &gradUp, const Vector &Efield, - double distance, Vector &globalTransport, - DenseMatrix &speciesTransport, - DenseMatrix &diffusionVelocity, Vector &n_sp) { +void MixingLengthTransport::ComputeSourceTransportProperties(const Vector& state, const Vector& Up, + const DenseMatrix& gradUp, const Vector& Efield, + double distance, Vector& globalTransport, + DenseMatrix& speciesTransport, + DenseMatrix& diffusionVelocity, Vector& n_sp) { globalTransport.SetSize(SrcTrns::NUM_SRC_TRANS); speciesTransport.SetSize(numSpecies, SpeciesTrns::NUM_SPECIES_COEFFS); n_sp.SetSize(numSpecies); @@ -157,8 +157,8 @@ void MixingLengthTransport::ComputeSourceTransportProperties(const Vector &state } MFEM_HOST_DEVICE void MixingLengthTransport::ComputeSourceTransportProperties( - const double *state, const double *Up, const double *gradUp, const double *Efield, double distance, - double *globalTransport, double *speciesTransport, double *diffusionVelocity, double *n_sp) { + const double* state, const double* Up, const double* gradUp, const double* Efield, double distance, + double* globalTransport, double* speciesTransport, double* diffusionVelocity, double* n_sp) { molecular_transport_->ComputeSourceMolecularTransport(state, Up, gradUp, Efield, globalTransport, speciesTransport, diffusionVelocity, n_sp); } diff --git a/src/mixing_length_transport.hpp b/src/mixing_length_transport.hpp index dd86e925..9ceecc95 100644 --- a/src/mixing_length_transport.hpp +++ b/src/mixing_length_transport.hpp @@ -50,43 +50,43 @@ class MixingLengthTransport : public TransportProperties { const double bulk_mult_; // bulk viscosity multiplier // for molecular transport (owned) - MolecularTransport *molecular_transport_; + MolecularTransport* molecular_transport_; public: - MixingLengthTransport(GasMixture *mix, RunConfiguration &runfile, MolecularTransport *molecular_transport); - MFEM_HOST_DEVICE MixingLengthTransport(GasMixture *mix, const mixingLengthTransportData &inputs, - MolecularTransport *molecular_transport); + MixingLengthTransport(GasMixture* mix, RunConfiguration& runfile, MolecularTransport* molecular_transport); + MFEM_HOST_DEVICE MixingLengthTransport(GasMixture* mix, const mixingLengthTransportData& inputs, + MolecularTransport* molecular_transport); MFEM_HOST_DEVICE virtual ~MixingLengthTransport() { delete molecular_transport_; } - void ComputeFluxTransportProperties(const Vector &state, const DenseMatrix &gradUp, const Vector &Efield, - double radius, double distance, Vector &transportBuffer, - DenseMatrix &diffusionVelocity) final; - MFEM_HOST_DEVICE void ComputeFluxTransportProperties(const double *state, const double *gradUp, const double *Efield, - double radius, double distance, double *transportBuffer, - double *diffusionVelocity) final; - void ComputeSourceTransportProperties(const Vector &state, const Vector &Up, const DenseMatrix &gradUp, - const Vector &Efield, double distance, Vector &globalTransport, - DenseMatrix &speciesTransport, DenseMatrix &diffusionVelocity, - Vector &n_sp) final; - MFEM_HOST_DEVICE void ComputeSourceTransportProperties(const double *state, const double *Up, const double *gradUp, - const double *Efield, double distance, double *globalTransport, - double *speciesTransport, double *diffusionVelocity, - double *n_sp) final; - - MFEM_HOST_DEVICE void GetViscosities(const double *conserved, const double *primitive, double *visc) final; - MFEM_HOST_DEVICE void GetViscosities(const double *conserved, const double *primitive, const double *gradUp, - double radius, double distance, double *visc) final; + void ComputeFluxTransportProperties(const Vector& state, const DenseMatrix& gradUp, const Vector& Efield, + double radius, double distance, Vector& transportBuffer, + DenseMatrix& diffusionVelocity) final; + MFEM_HOST_DEVICE void ComputeFluxTransportProperties(const double* state, const double* gradUp, const double* Efield, + double radius, double distance, double* transportBuffer, + double* diffusionVelocity) final; + void ComputeSourceTransportProperties(const Vector& state, const Vector& Up, const DenseMatrix& gradUp, + const Vector& Efield, double distance, Vector& globalTransport, + DenseMatrix& speciesTransport, DenseMatrix& diffusionVelocity, + Vector& n_sp) final; + MFEM_HOST_DEVICE void ComputeSourceTransportProperties(const double* state, const double* Up, const double* gradUp, + const double* Efield, double distance, double* globalTransport, + double* speciesTransport, double* diffusionVelocity, + double* n_sp) final; + + MFEM_HOST_DEVICE void GetViscosities(const double* conserved, const double* primitive, double* visc) final; + MFEM_HOST_DEVICE void GetViscosities(const double* conserved, const double* primitive, const double* gradUp, + double radius, double distance, double* visc) final; }; -MFEM_HOST_DEVICE inline void MixingLengthTransport::GetViscosities(const double *conserved, const double *primitive, - double *visc) { +MFEM_HOST_DEVICE inline void MixingLengthTransport::GetViscosities(const double* conserved, const double* primitive, + double* visc) { assert(false); } -MFEM_HOST_DEVICE inline void MixingLengthTransport::GetViscosities(const double *conserved, const double *primitive, - const double *gradUp, double radius, double distance, - double *visc) { +MFEM_HOST_DEVICE inline void MixingLengthTransport::GetViscosities(const double* conserved, const double* primitive, + const double* gradUp, double radius, double distance, + double* visc) { molecular_transport_->GetViscosities(conserved, primitive, visc); const double rho = conserved[0]; diff --git a/src/outletBC.cpp b/src/outletBC.cpp index aded15aa..a8fd3a88 100644 --- a/src/outletBC.cpp +++ b/src/outletBC.cpp @@ -35,10 +35,10 @@ #include "riemann_solver.hpp" // TODO(kevin): non-reflecting BC for plasma. -OutletBC::OutletBC(MPI_Groups *_groupsMPI, Equations _eqSystem, RiemannSolverTPS *_rsolver, GasMixture *_mixture, - GasMixture *d_mixture, ParFiniteElementSpace *_vfes, IntegrationRules *_intRules, double &_dt, +OutletBC::OutletBC(MPI_Groups* _groupsMPI, Equations _eqSystem, RiemannSolverTPS* _rsolver, GasMixture* _mixture, + GasMixture* d_mixture, ParFiniteElementSpace* _vfes, IntegrationRules* _intRules, double& _dt, const int _dim, const int _num_equation, int _patchNumber, double _refLength, OutletType _bcType, - const Array &_inputData, const int &_maxIntPoints, const int &_maxDofs, bool axisym) + const Array& _inputData, const int& _maxIntPoints, const int& _maxDofs, bool axisym) : BoundaryCondition(_rsolver, _mixture, _eqSystem, _vfes, _intRules, _dt, _dim, _num_equation, _patchNumber, _refLength, axisym), groupsMPI(_groupsMPI), @@ -96,7 +96,7 @@ OutletBC::OutletBC(MPI_Groups *_groupsMPI, Equations _eqSystem, RiemannSolverTPS for (int bel = 0; bel < vfes->GetNBE(); bel++) { int attr = vfes->GetBdrAttribute(bel); if (attr == patchNumber) { - FaceElementTransformations *Tr = vfes->GetMesh()->GetBdrFaceTransformations(bel); + FaceElementTransformations* Tr = vfes->GetMesh()->GetBdrFaceTransformations(bel); Array dofs; vfes->GetElementVDofs(Tr->Elem1No, dofs); @@ -244,7 +244,7 @@ void OutletBC::initBdrElemsShape() { for (int bel = 0; bel < vfes->GetNBE(); bel++) { int attr = vfes->GetBdrAttribute(bel); if (attr == patchNumber) { - FaceElementTransformations *Tr = vfes->GetMesh()->GetBdrFaceTransformations(bel); + FaceElementTransformations* Tr = vfes->GetMesh()->GetBdrFaceTransformations(bel); int elDofs = vfes->GetFE(Tr->Elem1No)->GetDof(); Array dofs; vfes->GetElementVDofs(Tr->Elem1No, dofs); @@ -304,8 +304,8 @@ void OutletBC::initBCs() { } } -void OutletBC::computeBdrFlux(Vector &normal, Vector &stateIn, DenseMatrix &gradState, Vector transip, double delta, - double time, double distance, Vector &bdrFlux) { +void OutletBC::computeBdrFlux(Vector& normal, Vector& stateIn, DenseMatrix& gradState, Vector transip, double delta, + double time, double distance, Vector& bdrFlux) { switch (outletType_) { case SUB_P: subsonicReflectingPressure(normal, stateIn, bdrFlux); @@ -342,16 +342,16 @@ void OutletBC::computeParallelArea() { } } -void OutletBC::updateMean_gpu(ParGridFunction *Up, Vector &localMeanUp, const int num_equation, const int numBdrElems, - const int totDofs, Vector &bdrUp, Array &bdrElemsQ, Array &bdrDofs, - Vector &bdrShape, const int &maxIntPoints, const int &maxDofs) { +void OutletBC::updateMean_gpu(ParGridFunction* Up, Vector& localMeanUp, const int num_equation, const int numBdrElems, + const int totDofs, Vector& bdrUp, Array& bdrElemsQ, Array& bdrDofs, + Vector& bdrShape, const int& maxIntPoints, const int& maxDofs) { #ifdef _GPU_ - const double *d_Up = Up->Read(); - double *d_localMeanUp = localMeanUp.Write(); - double *d_bdrUp = bdrUp.Write(); + const double* d_Up = Up->Read(); + double* d_localMeanUp = localMeanUp.Write(); + double* d_bdrUp = bdrUp.Write(); auto d_bdrElemQ = bdrElemsQ.Read(); auto d_bdrDofs = bdrDofs.Read(); - const double *d_bdrShape = bdrShape.Read(); + const double* d_bdrShape = bdrShape.Read(); int groupAveraging = numBdrElems; if (groupAveraging % 2 != 0) groupAveraging++; @@ -417,7 +417,7 @@ void OutletBC::updateMean_gpu(ParGridFunction *Up, Vector &localMeanUp, const in #endif } -void OutletBC::initBoundaryU(ParGridFunction *Up) { +void OutletBC::initBoundaryU(ParGridFunction* Up) { Vector elUp; elUp.UseDevice(false); Vector shape; @@ -429,7 +429,7 @@ void OutletBC::initBoundaryU(ParGridFunction *Up) { for (int bel = 0; bel < vfes->GetNBE(); bel++) { int attr = vfes->GetBdrAttribute(bel); if (attr == patchNumber) { - FaceElementTransformations *Tr = vfes->GetMesh()->GetBdrFaceTransformations(bel); + FaceElementTransformations* Tr = vfes->GetMesh()->GetBdrFaceTransformations(bel); int elDofs = vfes->GetFE(Tr->Elem1No)->GetDof(); @@ -467,7 +467,7 @@ void OutletBC::initBoundaryU(ParGridFunction *Up) { boundaryU.ReadWrite(); } -void OutletBC::updateMean(IntegrationRules *intRules, ParGridFunction *Up) { +void OutletBC::updateMean(IntegrationRules* intRules, ParGridFunction* Up) { if (outletType_ == SUB_P) return; bdrN = 0; @@ -493,7 +493,7 @@ void OutletBC::updateMean(IntegrationRules *intRules, ParGridFunction *Up) { for (int bel = 0; bel < vfes->GetNBE(); bel++) { int attr = vfes->GetBdrAttribute(bel); if (attr == patchNumber) { - FaceElementTransformations *Tr = vfes->GetMesh()->GetBdrFaceTransformations(bel); + FaceElementTransformations* Tr = vfes->GetMesh()->GetBdrFaceTransformations(bel); int elDofs = vfes->GetFE(Tr->Elem1No)->GetDof(); @@ -530,11 +530,11 @@ void OutletBC::updateMean(IntegrationRules *intRules, ParGridFunction *Up) { } #endif - double *h_localMeanUp = localMeanUp.HostReadWrite(); + double* h_localMeanUp = localMeanUp.HostReadWrite(); int totNbdr = boundaryU.Size() / num_equation_; h_localMeanUp[num_equation_] = static_cast(totNbdr); - double *h_sum = glob_sum.HostWrite(); + double* h_sum = glob_sum.HostWrite(); MPI_Allreduce(h_localMeanUp, h_sum, num_equation_ + 1, MPI_DOUBLE, MPI_SUM, groupsMPI->getComm(patchNumber)); BoundaryCondition::copyValues(glob_sum, meanUp, 1. / h_sum[num_equation_]); @@ -560,17 +560,17 @@ void OutletBC::updateMean(IntegrationRules *intRules, ParGridFunction *Up) { } } -void OutletBC::integrationBC(Vector &y, const Vector &x, const elementIndexingData &elem_index_data, - ParGridFunction *Up, ParGridFunction *gradUp, - const boundaryFaceIntegrationData &boundary_face_data, const int &maxIntPoints, - const int &maxDofs) { +void OutletBC::integrationBC(Vector& y, const Vector& x, const elementIndexingData& elem_index_data, + ParGridFunction* Up, ParGridFunction* gradUp, + const boundaryFaceIntegrationData& boundary_face_data, const int& maxIntPoints, + const int& maxDofs) { interpOutlet_gpu(x, elem_index_data, Up, gradUp, boundary_face_data, listElems, offsetsBoundaryU); integrateOutlets_gpu(y, // output x, elem_index_data, boundary_face_data, listElems, offsetsBoundaryU); } -void OutletBC::subsonicNonReflectingPressure(Vector &normal, Vector &stateIn, DenseMatrix &gradState, Vector &bdrFlux) { +void OutletBC::subsonicNonReflectingPressure(Vector& normal, Vector& stateIn, DenseMatrix& gradState, Vector& bdrFlux) { const double gamma = mixture->GetSpecificHeatRatio(); Vector unitNorm = normal; @@ -728,7 +728,7 @@ void OutletBC::subsonicNonReflectingPressure(Vector &normal, Vector &stateIn, De } // This is more or less right formulation even for two-temperature case. -void OutletBC::subsonicReflectingPressure(Vector &normal, Vector &stateIn, Vector &bdrFlux) { +void OutletBC::subsonicReflectingPressure(Vector& normal, Vector& stateIn, Vector& bdrFlux) { Vector state2(num_equation_); mixture->modifyEnergyForPressure(stateIn, state2, inputState[0]); @@ -736,7 +736,7 @@ void OutletBC::subsonicReflectingPressure(Vector &normal, Vector &stateIn, Vecto rsolver->Eval(stateIn, state2, normal, bdrFlux, true); } -void OutletBC::subsonicNonRefMassFlow(Vector &normal, Vector &stateIn, DenseMatrix &gradState, Vector &bdrFlux) { +void OutletBC::subsonicNonRefMassFlow(Vector& normal, Vector& stateIn, DenseMatrix& gradState, Vector& bdrFlux) { const double gamma = mixture->GetSpecificHeatRatio(); Vector unitNorm = normal; @@ -891,7 +891,7 @@ void OutletBC::subsonicNonRefMassFlow(Vector &normal, Vector &stateIn, DenseMatr rsolver->Eval(stateIn, state2, normal, bdrFlux, true); } -void OutletBC::subsonicNonRefPWMassFlow(Vector &normal, Vector &stateIn, DenseMatrix &gradState, Vector &bdrFlux) { +void OutletBC::subsonicNonRefPWMassFlow(Vector& normal, Vector& stateIn, DenseMatrix& gradState, Vector& bdrFlux) { const double gamma = mixture->GetSpecificHeatRatio(); Vector unitNorm = normal; @@ -1026,20 +1026,20 @@ void OutletBC::subsonicNonRefPWMassFlow(Vector &normal, Vector &stateIn, DenseMa rsolver->Eval(stateIn, state2, normal, bdrFlux, true); } -void OutletBC::integrateOutlets_gpu(Vector &y, const Vector &x, const elementIndexingData &elem_index_data, - const boundaryFaceIntegrationData &boundary_face_data, Array &listElems, - Array &offsetsBoundaryU) { +void OutletBC::integrateOutlets_gpu(Vector& y, const Vector& x, const elementIndexingData& elem_index_data, + const boundaryFaceIntegrationData& boundary_face_data, Array& listElems, + Array& offsetsBoundaryU) { #ifdef _GPU_ - double *d_y = y.ReadWrite(); - const int *d_elem_dofs_list = elem_index_data.dofs_list.Read(); - const int *d_elem_dof_off = elem_index_data.dof_offset.Read(); - const int *d_elem_dof_num = elem_index_data.dof_number.Read(); - - const double *d_face_shape = boundary_face_data.shape.Read(); - const double *d_weight = boundary_face_data.quad_weight.Read(); - const int *d_face_el = boundary_face_data.el.Read(); - const int *d_face_num_quad = boundary_face_data.num_quad.Read(); - const int *d_listElems = listElems.Read(); + double* d_y = y.ReadWrite(); + const int* d_elem_dofs_list = elem_index_data.dofs_list.Read(); + const int* d_elem_dof_off = elem_index_data.dof_offset.Read(); + const int* d_elem_dof_num = elem_index_data.dof_number.Read(); + + const double* d_face_shape = boundary_face_data.shape.Read(); + const double* d_weight = boundary_face_data.quad_weight.Read(); + const int* d_face_el = boundary_face_data.el.Read(); + const int* d_face_num_quad = boundary_face_data.num_quad.Read(); + const int* d_listElems = listElems.Read(); // const int *d_offsetBoundaryU = offsetsBoundaryU.Read(); const int totDofs = x.Size() / num_equation_; @@ -1049,7 +1049,7 @@ void OutletBC::integrateOutlets_gpu(Vector &y, const Vector &x, const elementInd const int maxIntPoints = maxIntPoints_; const int maxDofs = maxDofs_; - const double *d_flux = face_flux_.Read(); + const double* d_flux = face_flux_.Read(); // clang-format off MFEM_FORALL_2D(n, numBdrElem, maxDofs, 1, 1, @@ -1096,31 +1096,31 @@ void OutletBC::integrateOutlets_gpu(Vector &y, const Vector &x, const elementInd // clang-format on } -void OutletBC::interpOutlet_gpu(const mfem::Vector &x, const elementIndexingData &elem_index_data, - mfem::ParGridFunction *Up, mfem::ParGridFunction *gradUp, - const boundaryFaceIntegrationData &boundary_face_data, Array &listElems, - Array &offsetsBoundaryU) { +void OutletBC::interpOutlet_gpu(const mfem::Vector& x, const elementIndexingData& elem_index_data, + mfem::ParGridFunction* Up, mfem::ParGridFunction* gradUp, + const boundaryFaceIntegrationData& boundary_face_data, Array& listElems, + Array& offsetsBoundaryU) { #ifdef _GPU_ - const double *d_inputState = inputState.Read(); - const double *d_U = x.Read(); - const double *d_gradUp = gradUp->Read(); - const int *d_elem_dofs_list = elem_index_data.dofs_list.Read(); - const int *d_elem_dof_off = elem_index_data.dof_offset.Read(); - const int *d_elem_dof_num = elem_index_data.dof_number.Read(); - const double *d_face_shape = boundary_face_data.shape.Read(); - const double *d_normal = boundary_face_data.normal.Read(); - const double *d_xyz = boundary_face_data.xyz.Read(); - const int *d_face_el = boundary_face_data.el.Read(); - const int *d_face_num_quad = boundary_face_data.num_quad.Read(); - const int *d_listElems = listElems.Read(); - const int *d_offsetBoundaryU = offsetsBoundaryU.Read(); - const double *d_meanUp = meanUp.Read(); - double *d_boundaryU = boundaryU.ReadWrite(); - const double *d_tang1 = tangent1.Read(); - const double *d_tang2 = tangent2.Read(); - const double *d_inv = inverseNorm2cartesian.Read(); - - double *d_flux = face_flux_.Write(); + const double* d_inputState = inputState.Read(); + const double* d_U = x.Read(); + const double* d_gradUp = gradUp->Read(); + const int* d_elem_dofs_list = elem_index_data.dofs_list.Read(); + const int* d_elem_dof_off = elem_index_data.dof_offset.Read(); + const int* d_elem_dof_num = elem_index_data.dof_number.Read(); + const double* d_face_shape = boundary_face_data.shape.Read(); + const double* d_normal = boundary_face_data.normal.Read(); + const double* d_xyz = boundary_face_data.xyz.Read(); + const int* d_face_el = boundary_face_data.el.Read(); + const int* d_face_num_quad = boundary_face_data.num_quad.Read(); + const int* d_listElems = listElems.Read(); + const int* d_offsetBoundaryU = offsetsBoundaryU.Read(); + const double* d_meanUp = meanUp.Read(); + double* d_boundaryU = boundaryU.ReadWrite(); + const double* d_tang1 = tangent1.Read(); + const double* d_tang2 = tangent2.Read(); + const double* d_inv = inverseNorm2cartesian.Read(); + + double* d_flux = face_flux_.Write(); const int totDofs = x.Size() / num_equation_; const int numBdrElem = listElems.Size(); @@ -1148,8 +1148,8 @@ void OutletBC::interpOutlet_gpu(const mfem::Vector &x, const elementIndexingData const int maxDofs = maxDofs_; const int nvel = nvel_; - const RiemannSolverTPS *d_rsolver = rsolver; - GasMixture *d_mix = d_mixture_; + const RiemannSolverTPS* d_rsolver = rsolver; + GasMixture* d_mix = d_mixture_; // MFEM_FORALL(n, numBdrElem, { MFEM_FORALL_2D(n, numBdrElem, maxIntPoints, 1, 1, { diff --git a/src/outletBC.hpp b/src/outletBC.hpp index e81f0f5e..67bdf29d 100644 --- a/src/outletBC.hpp +++ b/src/outletBC.hpp @@ -44,8 +44,8 @@ using namespace mfem; class OutletBC : public BoundaryCondition { private: - MPI_Groups *groupsMPI; - GasMixture *d_mixture_; + MPI_Groups* groupsMPI; + GasMixture* d_mixture_; const OutletType outletType_; @@ -64,8 +64,8 @@ class OutletBC : public BoundaryCondition { Array bdrElemsQ; // element dofs and face num. of integration points Array bdrDofs; // indexes of the D Vector bdrShape; // shape functions evaluated at the integration points - const int &maxIntPoints_; - const int &maxDofs_; + const int& maxIntPoints_; + const int& maxDofs_; // local vector for mean calculation Vector localMeanUp; @@ -82,57 +82,57 @@ class OutletBC : public BoundaryCondition { Vector inverseNorm2cartesian; void initBdrElemsShape(); - void initBoundaryU(ParGridFunction *Up); + void initBoundaryU(ParGridFunction* Up); - void subsonicReflectingPressure(Vector &normal, Vector &stateIn, Vector &bdrFlux); + void subsonicReflectingPressure(Vector& normal, Vector& stateIn, Vector& bdrFlux); - void subsonicNonReflectingPressure(Vector &normal, Vector &stateIn, DenseMatrix &gradState, Vector &bdrFlux); + void subsonicNonReflectingPressure(Vector& normal, Vector& stateIn, DenseMatrix& gradState, Vector& bdrFlux); - void subsonicNonRefMassFlow(Vector &normal, Vector &stateIn, DenseMatrix &gradState, Vector &bdrFlux); + void subsonicNonRefMassFlow(Vector& normal, Vector& stateIn, DenseMatrix& gradState, Vector& bdrFlux); - void subsonicNonRefPWMassFlow(Vector &normal, Vector &stateIn, DenseMatrix &gradState, Vector &bdrFlux); + void subsonicNonRefPWMassFlow(Vector& normal, Vector& stateIn, DenseMatrix& gradState, Vector& bdrFlux); - virtual void updateMean(IntegrationRules *intRules, ParGridFunction *Up); + virtual void updateMean(IntegrationRules* intRules, ParGridFunction* Up); void computeParallelArea(); public: - OutletBC(MPI_Groups *_groupsMPI, Equations _eqSystem, RiemannSolverTPS *rsolver_, GasMixture *mixture, - GasMixture *d_mixture, ParFiniteElementSpace *_vfes, IntegrationRules *_intRules, double &_dt, + OutletBC(MPI_Groups* _groupsMPI, Equations _eqSystem, RiemannSolverTPS* rsolver_, GasMixture* mixture, + GasMixture* d_mixture, ParFiniteElementSpace* _vfes, IntegrationRules* _intRules, double& _dt, const int _dim, const int _num_equation, int _patchNumber, double _refLength, OutletType _bcType, - const Array &_inputData, const int &_maxIntPoints, const int &maxDofs, bool axisym); + const Array& _inputData, const int& _maxIntPoints, const int& maxDofs, bool axisym); ~OutletBC(); - void computeBdrFlux(Vector &normal, Vector &stateIn, DenseMatrix &gradState, Vector transip, double delta, - double time, double distance, Vector &bdrFlux); + void computeBdrFlux(Vector& normal, Vector& stateIn, DenseMatrix& gradState, Vector transip, double delta, + double time, double distance, Vector& bdrFlux); virtual void initBCs(); - virtual void integrationBC(Vector &y, // output - const Vector &x, const elementIndexingData &elem_index_data, ParGridFunction *Up, - ParGridFunction *gradUp, const boundaryFaceIntegrationData &boundary_face_data, - const int &maxIntPoints, const int &maxDofs); + virtual void integrationBC(Vector& y, // output + const Vector& x, const elementIndexingData& elem_index_data, ParGridFunction* Up, + ParGridFunction* gradUp, const boundaryFaceIntegrationData& boundary_face_data, + const int& maxIntPoints, const int& maxDofs); - static void updateMean_gpu(ParGridFunction *Up, Vector &localMeanUp, const int _num_equation, const int numBdrElems, - const int totalDofs, Vector &bdrUp, Array &bdrElemsQ, Array &bdrDofs, - Vector &bdrShape, const int &maxIntPoints, const int &maxDofs); + static void updateMean_gpu(ParGridFunction* Up, Vector& localMeanUp, const int _num_equation, const int numBdrElems, + const int totalDofs, Vector& bdrUp, Array& bdrElemsQ, Array& bdrDofs, + Vector& bdrShape, const int& maxIntPoints, const int& maxDofs); // functions for BC integration on GPU - void integrateOutlets_gpu(Vector &y, // output - const Vector &x, const elementIndexingData &elem_index_data, - const boundaryFaceIntegrationData &boundary_face_data, Array &listElems, - Array &offsetBoundaryU); + void integrateOutlets_gpu(Vector& y, // output + const Vector& x, const elementIndexingData& elem_index_data, + const boundaryFaceIntegrationData& boundary_face_data, Array& listElems, + Array& offsetBoundaryU); - void interpOutlet_gpu(const Vector &x, const elementIndexingData &elem_index_data, ParGridFunction *Up, - ParGridFunction *gradUp, const boundaryFaceIntegrationData &boundary_face_data, - Array &listElems, Array &offsetsBoundaryU); + void interpOutlet_gpu(const Vector& x, const elementIndexingData& elem_index_data, ParGridFunction* Up, + ParGridFunction* gradUp, const boundaryFaceIntegrationData& boundary_face_data, + Array& listElems, Array& offsetsBoundaryU); #ifdef _GPU_ // GPU functions - static MFEM_HOST_DEVICE void computeSubPressure(const double *u1, double *u2, const double *nor, const double &press, - const double &gamma, const double &Rg, const int &dim, - const int &num_equation, const WorkingFluid &fluid, - const Equations &eqSystem, const int &thrd, const int &maxThreads) { + static MFEM_HOST_DEVICE void computeSubPressure(const double* u1, double* u2, const double* nor, const double& press, + const double& gamma, const double& Rg, const int& dim, + const int& num_equation, const WorkingFluid& fluid, + const Equations& eqSystem, const int& thrd, const int& maxThreads) { if (fluid == WorkingFluid::DRY_AIR) { DryAir::modifyEnergyForPressure_gpu(u1, u2, press, gamma, Rg, num_equation, dim, thrd, maxThreads); } @@ -147,10 +147,10 @@ class OutletBC : public BoundaryCondition { // } } - static MFEM_HOST_DEVICE void computeSubPressure_gpu_serial(const double *u1, double *u2, const double *nor, - const double &press, const double &gamma, const double &Rg, - const int &dim, const int &num_equation, - const WorkingFluid &fluid) { + static MFEM_HOST_DEVICE void computeSubPressure_gpu_serial(const double* u1, double* u2, const double* nor, + const double& press, const double& gamma, const double& Rg, + const int& dim, const int& num_equation, + const WorkingFluid& fluid) { if (fluid == WorkingFluid::DRY_AIR) { DryAir::modifyEnergyForPressure_gpu_serial(u1, u2, press, gamma, Rg, num_equation, dim); } @@ -165,12 +165,12 @@ class OutletBC : public BoundaryCondition { // } } - static MFEM_HOST_DEVICE void computeNRSubPress(const int &thrd, const int &n, const double *u1, const double *gradUp, - const double *meanUp, const double &dt, double *u2, double *boundaryU, - const double *inputState, const double *nor, const double *d_tang1, - const double *d_tang2, const double *d_inv, const double &refLength, - const double &gamma, const double &Rg, const int &elDof, - const int &dim, const int &num_equation, const Equations &eqSystem) { + static MFEM_HOST_DEVICE void computeNRSubPress(const int& thrd, const int& n, const double* u1, const double* gradUp, + const double* meanUp, const double& dt, double* u2, double* boundaryU, + const double* inputState, const double* nor, const double* d_tang1, + const double* d_tang2, const double* d_inv, const double& refLength, + const double& gamma, const double& Rg, const int& elDof, + const int& dim, const int& num_equation, const Equations& eqSystem) { MFEM_SHARED double unitNorm[3], meanVel[3], normGrad[20]; MFEM_SHARED double mod; MFEM_SHARED double speedSound, meanK, dpdn; @@ -312,10 +312,10 @@ class OutletBC : public BoundaryCondition { } static MFEM_HOST_DEVICE void computeNRSubPress_serial( - const int &n, const double *u1, const double *gradUp, const double *meanUp, const double &dt, double *u2, - double *boundaryU, const double *inputState, const double *nor, const double *d_tang1, const double *d_tang2, - const double *d_inv, const double &refLength, const double &gamma, const double &Rg, const int &elDof, - const int &dim, const int &num_equation, const Equations &eqSystem) { + const int& n, const double* u1, const double* gradUp, const double* meanUp, const double& dt, double* u2, + double* boundaryU, const double* inputState, const double* nor, const double* d_tang1, const double* d_tang2, + const double* d_inv, const double& refLength, const double& gamma, const double& Rg, const int& elDof, + const int& dim, const int& num_equation, const Equations& eqSystem) { double unitNorm[3], meanVel[3], normGrad[20]; double mod; double speedSound, meanK, dpdn; @@ -434,10 +434,10 @@ class OutletBC : public BoundaryCondition { } static MFEM_HOST_DEVICE void computeNRSubMassFlow( - const int &thrd, const int &n, const double *u1, const double *gradUp, const double *meanUp, const double &dt, - double *u2, double *boundaryU, const double *inputState, const double *nor, const double *d_tang1, - const double *d_tang2, const double *d_inv, const double &refLength, const double &area, const double &gamma, - const double &Rg, const int &elDof, const int &dim, const int &num_equation, const Equations &eqSystem) { + const int& thrd, const int& n, const double* u1, const double* gradUp, const double* meanUp, const double& dt, + double* u2, double* boundaryU, const double* inputState, const double* nor, const double* d_tang1, + const double* d_tang2, const double* d_inv, const double& refLength, const double& area, const double& gamma, + const double& Rg, const int& elDof, const int& dim, const int& num_equation, const Equations& eqSystem) { MFEM_SHARED double unitNorm[3], meanVel[3], normGrad[20]; MFEM_SHARED double mod; MFEM_SHARED double speedSound, meanK, dpdn; @@ -580,10 +580,10 @@ class OutletBC : public BoundaryCondition { } static MFEM_HOST_DEVICE void computeNRSubMassFlow_serial( - const int &n, const double *u1, const double *gradUp, const double *meanUp, const double &dt, double *u2, - double *boundaryU, const double *inputState, const double *nor, const double *d_tang1, const double *d_tang2, - const double *d_inv, const double &refLength, const double &area, const double &gamma, const double &Rg, - const int &elDof, const int &dim, const int &num_equation, const Equations &eqSystem) { + const int& n, const double* u1, const double* gradUp, const double* meanUp, const double& dt, double* u2, + double* boundaryU, const double* inputState, const double* nor, const double* d_tang1, const double* d_tang2, + const double* d_inv, const double& refLength, const double& area, const double& gamma, const double& Rg, + const int& elDof, const int& dim, const int& num_equation, const Equations& eqSystem) { double unitNorm[3], meanVel[3], normGrad[20]; double mod; double speedSound, meanK, dpdn; @@ -705,13 +705,13 @@ class OutletBC : public BoundaryCondition { } } - static MFEM_HOST_DEVICE void computeNR_PW_SubMF(const int &thrd, const int &n, const double *u1, const double *gradUp, - const double *meanUp, const double &dt, double *u2, double *boundaryU, - const double *inputState, const double *nor, const double *d_tang1, - const double *d_tang2, const double *d_inv, const double &refLength, - const double &area, const double &gamma, const double &Rg, - const int &elDof, const int &dim, const int &num_equation, - const Equations &eqSystem) { + static MFEM_HOST_DEVICE void computeNR_PW_SubMF(const int& thrd, const int& n, const double* u1, const double* gradUp, + const double* meanUp, const double& dt, double* u2, double* boundaryU, + const double* inputState, const double* nor, const double* d_tang1, + const double* d_tang2, const double* d_inv, const double& refLength, + const double& area, const double& gamma, const double& Rg, + const int& elDof, const int& dim, const int& num_equation, + const Equations& eqSystem) { MFEM_SHARED double unitNorm[3], meanVel[3], normGrad[20]; MFEM_SHARED double mod; MFEM_SHARED double speedSound, meanK, dpdn; diff --git a/src/quasimagnetostatic.cpp b/src/quasimagnetostatic.cpp index 20856a07..27da1009 100644 --- a/src/quasimagnetostatic.cpp +++ b/src/quasimagnetostatic.cpp @@ -43,9 +43,9 @@ using namespace mfem; using namespace mfem::common; static Vector axis(3); -void JFun(const Vector &x, Vector &f); +void JFun(const Vector& x, Vector& f); -QuasiMagnetostaticSolverBase::QuasiMagnetostaticSolverBase(ElectromagneticOptions em_opts, TPS::Tps *tps) +QuasiMagnetostaticSolverBase::QuasiMagnetostaticSolverBase(ElectromagneticOptions em_opts, TPS::Tps* tps) : em_opts_(em_opts), offsets_(3), storeE_(false), Ereal_(NULL), Eimag_(NULL) { MPI_Comm_size(tps->getTPSCommWorld(), &nprocs_); MPI_Comm_rank(tps->getTPSCommWorld(), &rank_); @@ -69,7 +69,7 @@ QuasiMagnetostaticSolverBase::QuasiMagnetostaticSolverBase(ElectromagneticOption joule_heating_ = NULL; } -double JouleHeatingCoefficient3D::Eval(ElementTransformation &T, const IntegrationPoint &ip) { +double JouleHeatingCoefficient3D::Eval(ElementTransformation& T, const IntegrationPoint& ip) { Vector Er, Ei; double sig; Ereal_.GetVectorValue(T, ip, Er); @@ -78,7 +78,7 @@ double JouleHeatingCoefficient3D::Eval(ElementTransformation &T, const Integrati return sig * (Er * Er + Ei * Ei); } -QuasiMagnetostaticSolver3D::QuasiMagnetostaticSolver3D(ElectromagneticOptions em_opts, TPS::Tps *tps) +QuasiMagnetostaticSolver3D::QuasiMagnetostaticSolver3D(ElectromagneticOptions em_opts, TPS::Tps* tps) : QuasiMagnetostaticSolverBase(em_opts, tps) { hcurl_ = NULL; h1_ = NULL; @@ -142,7 +142,7 @@ void QuasiMagnetostaticSolver3D::initialize() { //----------------------------------------------------- // 1a) Read the serial mesh (on each mpi rank) - Mesh *mesh = new Mesh(em_opts_.mesh_file.c_str(), 1, 1); + Mesh* mesh = new Mesh(em_opts_.mesh_file.c_str(), 1, 1); dim_ = mesh->Dimension(); if (dim_ != 3) { if (verbose) { @@ -222,6 +222,7 @@ void QuasiMagnetostaticSolver3D::initialize() { joule_heating_ = new ParGridFunction(jh_space_); *joule_heating_ = 0.0; + if (rank0_) std::cout << "QM3D initialize okay..." << endl; } void QuasiMagnetostaticSolver3D::InitializeCurrent() { @@ -281,8 +282,8 @@ void QuasiMagnetostaticSolver3D::InitializeCurrent() { // 2) Build a discretely divergence-free approximation of the source // current that lives in the Nedelec FE space defined in // Initialize() - ParGridFunction *Jorig = new ParGridFunction(Aspace_); - ParGridFunction *Jproj = new ParGridFunction(Aspace_); + ParGridFunction* Jorig = new ParGridFunction(Aspace_); + ParGridFunction* Jproj = new ParGridFunction(Aspace_); r_ = new ParLinearForm(Aspace_); @@ -305,7 +306,7 @@ void QuasiMagnetostaticSolver3D::InitializeCurrent() { delete Jorig; // 3) Multiply by the mass matrix to get the RHS vector - ParBilinearForm *mass = new ParBilinearForm(Aspace_); + ParBilinearForm* mass = new ParBilinearForm(Aspace_); mass->AddDomainIntegrator(new VectorFEMassIntegrator); mass->Assemble(); mass->Finalize(); @@ -316,6 +317,7 @@ void QuasiMagnetostaticSolver3D::InitializeCurrent() { delete Jproj; current_initialized_ = true; + if (rank0_) std::cout << "InitializeCurrent okay..." << endl; } // query solver-specific runtime controls @@ -418,8 +420,8 @@ void QuasiMagnetostaticSolver3D::solveStep() { OperatorPtr Koffd; Kconductivity->FormSystemMatrix(ess_bdr_tdofs_, Koffd); - HypreParMatrix *Kdiag_mat = Kdiag.As(); - HypreParMatrix *Koffd_mat = Koffd.As(); + HypreParMatrix* Kdiag_mat = Kdiag.As(); + HypreParMatrix* Koffd_mat = Koffd.As(); Koffd_mat->EliminateRows(ess_bdr_tdofs_); @@ -486,7 +488,7 @@ void QuasiMagnetostaticSolver3D::solveStep() { if (Bimag_ == NULL) Bimag_ = new ParGridFunction(Bspace_); *Breal_ = 0; - ParDiscreteLinearOperator *curl = new ParDiscreteLinearOperator(Aspace_, Bspace_); + ParDiscreteLinearOperator* curl = new ParDiscreteLinearOperator(Aspace_, Bspace_); curl->AddDomainInterpolator(new CurlInterpolator); curl->Assemble(); curl->Finalize(); @@ -571,8 +573,8 @@ void QuasiMagnetostaticSolver3D::InterpolateToYAxis() const { Array eid; Array ips; - double *Byloc = new double[em_opts_.nBy]; - double *By = new double[em_opts_.nBy]; + double* Byloc = new double[em_opts_.nBy]; + double* By = new double[em_opts_.nBy]; Vector Bpoint(dim_); // Get element numbers and integration points @@ -660,8 +662,8 @@ void QuasiMagnetostaticSolver3D::setStoreE(bool storeE) { } } -double QuasiMagnetostaticSolver3D::elementJouleHeating(const FiniteElement &el, ElementTransformation &Tr, - const Vector &elfun) { +double QuasiMagnetostaticSolver3D::elementJouleHeating(const FiniteElement& el, ElementTransformation& Tr, + const Vector& elfun) { // Get size info const int dof = el.GetDof(); const int nvar = 1; @@ -678,13 +680,13 @@ double QuasiMagnetostaticSolver3D::elementJouleHeating(const FiniteElement &el, // Get quadrature rule const int order = el.GetOrder(); const int intorder = order + 1; - const IntegrationRule *ir = &IntRules.Get(el.GetGeomType(), intorder); + const IntegrationRule* ir = &IntRules.Get(el.GetGeomType(), intorder); double elem_jh = 0; // for every quadrature point... for (int i = 0; i < ir->GetNPoints(); i++) { - const IntegrationPoint &ip = ir->IntPoint(i); + const IntegrationPoint& ip = ir->IntPoint(i); Tr.SetIntPoint(&ip); // evaluate basis functions @@ -697,7 +699,26 @@ double QuasiMagnetostaticSolver3D::elementJouleHeating(const FiniteElement &el, double qpcontrib = soln[0]; const double wt = ip.weight * Tr.Weight(); - elem_jh += qpcontrib * wt; + // elem_jh += qpcontrib * wt; + + // HERE + // need to modify here so that joule heating is only IN torch + // this is a problem-specific hack (HACK) + double rCyl = 0.028; + double x, z, dist; + double wgt = 1.0; + Vector coords(Tr.GetSpaceDim()); + Tr.Transform(ip, coords); + x = coords[0]; + // unused, but if we need it later... y = coords[1]; + dist = x * x; + if (dim_ == Tr.GetSpaceDim()) { + z = coords[2]; + dist += z * z; + } + dist = std::sqrt(dist); + if (dist > rCyl) wgt = 0.0; + elem_jh += qpcontrib * wt * wgt; } return elem_jh; @@ -705,7 +726,7 @@ double QuasiMagnetostaticSolver3D::elementJouleHeating(const FiniteElement &el, double QuasiMagnetostaticSolver3D::totalJouleHeating() { const int NE = pmesh_->GetNE(); - const ParFiniteElementSpace *fes = jh_space_; + const ParFiniteElementSpace* fes = jh_space_; double int_jh = 0; @@ -714,10 +735,10 @@ double QuasiMagnetostaticSolver3D::totalJouleHeating() { // loop over elements on this mpi rank and integrate joule heating for (int ielem = 0; ielem < NE; ielem++) { - const FiniteElement *fe = fes->GetFE(ielem); - ElementTransformation *T = fes->GetElementTransformation(ielem); + const FiniteElement* fe = fes->GetFE(ielem); + ElementTransformation* T = fes->GetElementTransformation(ielem); #if MFEM_VERSION >= 40400 - DofTransformation *doftrans = fes->GetElementVDofs(ielem, vdofs); + DofTransformation* doftrans = fes->GetElementVDofs(ielem, vdofs); joule_heating_->GetSubVector(vdofs, el_x); if (doftrans) { doftrans->InvTransformPrimal(el_x); @@ -737,7 +758,7 @@ double QuasiMagnetostaticSolver3D::totalJouleHeating() { return total_int_jh; } -void JFun(const Vector &x, Vector &J) { +void JFun(const Vector& x, Vector& J) { Vector axx(3); axx(0) = axis(1) * x(2) - axis(2) * x(1); @@ -748,11 +769,11 @@ void JFun(const Vector &x, Vector &J) { J = axx; } -static double radius(const Vector &x) { return x[0]; } +static double radius(const Vector& x) { return x[0]; } -static double oneOverRadius(const Vector &x) { return 1.0 / x[0]; } +static double oneOverRadius(const Vector& x) { return 1.0 / x[0]; } -QuasiMagnetostaticSolverAxiSym::QuasiMagnetostaticSolverAxiSym(ElectromagneticOptions em_opts, TPS::Tps *tps) +QuasiMagnetostaticSolverAxiSym::QuasiMagnetostaticSolverAxiSym(ElectromagneticOptions em_opts, TPS::Tps* tps) : QuasiMagnetostaticSolverBase(em_opts, tps) { h1_ = NULL; Atheta_space_ = NULL; @@ -799,7 +820,7 @@ void QuasiMagnetostaticSolverAxiSym::initialize() { // 1a) Read the serial mesh (on each mpi rank) if (verbose) grvy_printf(ginfo, "Reading EM mesh file: %s\n", em_opts_.mesh_file.c_str()); - Mesh *mesh = new Mesh(em_opts_.mesh_file.c_str(), 1, 1); + Mesh* mesh = new Mesh(em_opts_.mesh_file.c_str(), 1, 1); dim_ = mesh->Dimension(); if (dim_ != 2) { if (verbose) { @@ -1022,8 +1043,8 @@ void QuasiMagnetostaticSolverAxiSym::solveStep() { OperatorPtr Koffd; Kconductivity->FormSystemMatrix(ess_bdr_tdofs_, Koffd); - HypreParMatrix *Kdiag_mat = Kdiag.As(); - HypreParMatrix *Koffd_mat = Koffd.As(); + HypreParMatrix* Kdiag_mat = Kdiag.As(); + HypreParMatrix* Koffd_mat = Koffd.As(); Koffd_mat->EliminateRows(ess_bdr_tdofs_); @@ -1131,8 +1152,8 @@ void QuasiMagnetostaticSolverAxiSym::setStoreE(bool storeE) { } } -double QuasiMagnetostaticSolverAxiSym::elementJouleHeating(const FiniteElement &el, ElementTransformation &Tr, - const Vector &elfun) { +double QuasiMagnetostaticSolverAxiSym::elementJouleHeating(const FiniteElement& el, ElementTransformation& Tr, + const Vector& elfun) { // Get size info const int dof = el.GetDof(); const int dim = el.GetDim(); @@ -1152,13 +1173,13 @@ double QuasiMagnetostaticSolverAxiSym::elementJouleHeating(const FiniteElement & // Get quadrature rule const int order = el.GetOrder(); const int intorder = order + 1; - const IntegrationRule *ir = &IntRules.Get(el.GetGeomType(), intorder); + const IntegrationRule* ir = &IntRules.Get(el.GetGeomType(), intorder); double elem_jh = 0; // for every quadrature point... for (int i = 0; i < ir->GetNPoints(); i++) { - const IntegrationPoint &ip = ir->IntPoint(i); + const IntegrationPoint& ip = ir->IntPoint(i); Tr.SetIntPoint(&ip); // evaluate radius @@ -1185,7 +1206,7 @@ double QuasiMagnetostaticSolverAxiSym::elementJouleHeating(const FiniteElement & double QuasiMagnetostaticSolverAxiSym::totalJouleHeating() { const int NE = pmesh_->GetNE(); - const ParFiniteElementSpace *fes = this->getFESpace(); + const ParFiniteElementSpace* fes = this->getFESpace(); double int_jh = 0; @@ -1194,10 +1215,10 @@ double QuasiMagnetostaticSolverAxiSym::totalJouleHeating() { // loop over elements on this mpi rank and integrate joule heating for (int ielem = 0; ielem < NE; ielem++) { - const FiniteElement *fe = fes->GetFE(ielem); - ElementTransformation *T = fes->GetElementTransformation(ielem); + const FiniteElement* fe = fes->GetFE(ielem); + ElementTransformation* T = fes->GetElementTransformation(ielem); #if MFEM_VERSION >= 40400 - DofTransformation *doftrans = fes->GetElementVDofs(ielem, vdofs); + DofTransformation* doftrans = fes->GetElementVDofs(ielem, vdofs); joule_heating_->GetSubVector(vdofs, el_x); if (doftrans) { doftrans->InvTransformPrimal(el_x); @@ -1241,18 +1262,18 @@ double QuasiMagnetostaticSolverAxiSym::coilCurrent() const { // factor of 2 \pi radius double current = 0; const int NE = pmesh_->GetNE(); - const ParFiniteElementSpace *fes = Atheta_space_; + const ParFiniteElementSpace* fes = Atheta_space_; for (int ielem = 0; ielem < NE; ielem++) { - const FiniteElement *fe = fes->GetFE(ielem); - ElementTransformation *T = fes->GetElementTransformation(ielem); + const FiniteElement* fe = fes->GetFE(ielem); + ElementTransformation* T = fes->GetElementTransformation(ielem); // B/c the current is piecewise constant, first order rule is sufficient const int intorder = 1; - const IntegrationRule *ir = &IntRules.Get(fe->GetGeomType(), intorder); + const IntegrationRule* ir = &IntRules.Get(fe->GetGeomType(), intorder); for (int i = 0; i < ir->GetNPoints(); i++) { - const IntegrationPoint &ip = ir->IntPoint(i); + const IntegrationPoint& ip = ir->IntPoint(i); T->SetIntPoint(&ip); current += ip.weight * T->Weight() * J0coef.Eval(*T, ip); } @@ -1270,11 +1291,11 @@ double QuasiMagnetostaticSolverAxiSym::magneticEnergy() const { const double mu0 = em_opts_.mu0; const int NE = pmesh_->GetNE(); - const ParFiniteElementSpace *fes = Atheta_space_; + const ParFiniteElementSpace* fes = Atheta_space_; for (int ielem = 0; ielem < NE; ielem++) { - const FiniteElement *fe = fes->GetFE(ielem); - ElementTransformation *T = fes->GetElementTransformation(ielem); + const FiniteElement* fe = fes->GetFE(ielem); + ElementTransformation* T = fes->GetElementTransformation(ielem); // Get size info const int dof = fe->GetDof(); @@ -1307,7 +1328,7 @@ double QuasiMagnetostaticSolverAxiSym::magneticEnergy() const { Vector el_Areal; Vector el_Aimag; - DofTransformation *doftrans = fes->GetElementVDofs(ielem, vdofs); + DofTransformation* doftrans = fes->GetElementVDofs(ielem, vdofs); Atheta_real_->GetSubVector(vdofs, el_Areal); if (doftrans) { doftrans->InvTransformPrimal(el_Areal); @@ -1324,11 +1345,11 @@ double QuasiMagnetostaticSolverAxiSym::magneticEnergy() const { // Get quadrature rule const int order = fe->GetOrder(); const int intorder = 2 * order + 1; - const IntegrationRule *ir = &IntRules.Get(fe->GetGeomType(), intorder); + const IntegrationRule* ir = &IntRules.Get(fe->GetGeomType(), intorder); // for every quadrature point... for (int i = 0; i < ir->GetNPoints(); i++) { - const IntegrationPoint &ip = ir->IntPoint(i); + const IntegrationPoint& ip = ir->IntPoint(i); T->SetIntPoint(&ip); // evaluate radius @@ -1351,13 +1372,13 @@ double QuasiMagnetostaticSolverAxiSym::magneticEnergy() const { MultAtB(el_Areal_mat, dshape, Areal_x); MultAtB(el_Aimag_mat, dshape, Aimag_x); - const double *hAr = Areal.HostRead(); - const double *hAi = Aimag.HostRead(); - const double *hAr_x = Areal_x.HostRead(); - const double *hAi_x = Aimag_x.HostRead(); + const double* hAr = Areal.HostRead(); + const double* hAi = Aimag.HostRead(); + const double* hAr_x = Areal_x.HostRead(); + const double* hAi_x = Aimag_x.HostRead(); - double *hBr = Breal.HostWrite(); - double *hBi = Bimag.HostWrite(); + double* hBr = Breal.HostWrite(); + double* hBi = Bimag.HostWrite(); // B = curl(A) hBr[0] = -hAr_x[1]; diff --git a/src/quasimagnetostatic.hpp b/src/quasimagnetostatic.hpp index b32253cc..7cb26612 100644 --- a/src/quasimagnetostatic.hpp +++ b/src/quasimagnetostatic.hpp @@ -53,28 +53,28 @@ class QuasiMagnetostaticSolverBase : public TPS::Solver { ElectromagneticOptions em_opts_; // pointer to parent Tps class - TPS::Tps *tpsP_; + TPS::Tps* tpsP_; - mfem::ParMesh *pmesh_; + mfem::ParMesh* pmesh_; int dim_; int true_size_; Array offsets_; - mfem::ParGridFunction *plasma_conductivity_; - mfem::GridFunctionCoefficient *plasma_conductivity_coef_; + mfem::ParGridFunction* plasma_conductivity_; + mfem::GridFunctionCoefficient* plasma_conductivity_coef_; - mfem::ParGridFunction *joule_heating_; + mfem::ParGridFunction* joule_heating_; bool storeE_; - mfem::ParGridFunction *Ereal_; - mfem::ParGridFunction *Eimag_; + mfem::ParGridFunction* Ereal_; + mfem::ParGridFunction* Eimag_; int rank_; int nprocs_; bool rank0_; public: - QuasiMagnetostaticSolverBase(ElectromagneticOptions em_opts, TPS::Tps *tps); + QuasiMagnetostaticSolverBase(ElectromagneticOptions em_opts, TPS::Tps* tps); virtual ~QuasiMagnetostaticSolverBase() {} /** Initialize current for axisymmetric quasi-magnetostatic problem @@ -83,21 +83,21 @@ class QuasiMagnetostaticSolverBase : public TPS::Solver { */ virtual void InitializeCurrent() = 0; - mfem::ParMesh *getMesh() const override { return pmesh_; } - mfem::ParGridFunction *getPlasmaConductivityGF() { return plasma_conductivity_; } - mfem::ParGridFunction *getJouleHeatingGF() { return joule_heating_; } - mfem::ParGridFunction *getElectricFieldreal() { + mfem::ParMesh* getMesh() const override { return pmesh_; } + mfem::ParGridFunction* getPlasmaConductivityGF() { return plasma_conductivity_; } + mfem::ParGridFunction* getJouleHeatingGF() { return joule_heating_; } + mfem::ParGridFunction* getElectricFieldreal() { assert(storeE_); return Ereal_; } - mfem::ParGridFunction *getElectricFieldimag() { + mfem::ParGridFunction* getElectricFieldimag() { assert(storeE_); return Eimag_; } virtual void setStoreE(bool storeE) = 0; - virtual double elementJouleHeating(const FiniteElement &el, ElementTransformation &Tr, const Vector &elfun) = 0; + virtual double elementJouleHeating(const FiniteElement& el, ElementTransformation& Tr, const Vector& elfun) = 0; virtual double totalJouleHeating() = 0; void scaleJouleHeating(const double val) { (*joule_heating_) *= val; } @@ -129,14 +129,14 @@ class QuasiMagnetostaticSolverBase : public TPS::Solver { */ class JouleHeatingCoefficient3D : public Coefficient { private: - GridFunctionCoefficient &sigma_; - ParGridFunction &Ereal_; - ParGridFunction &Eimag_; + GridFunctionCoefficient& sigma_; + ParGridFunction& Ereal_; + ParGridFunction& Eimag_; public: - JouleHeatingCoefficient3D(GridFunctionCoefficient &sigma, ParGridFunction &Ereal, ParGridFunction &Eimag) + JouleHeatingCoefficient3D(GridFunctionCoefficient& sigma, ParGridFunction& Ereal, ParGridFunction& Eimag) : sigma_(sigma), Ereal_(Ereal), Eimag_(Eimag) {} - virtual double Eval(ElementTransformation &T, const IntegrationPoint &ip); + virtual double Eval(ElementTransformation& T, const IntegrationPoint& ip); virtual ~JouleHeatingCoefficient3D() {} }; @@ -149,29 +149,29 @@ class JouleHeatingCoefficient3D : public Coefficient { // class QuasiMagnetostaticSolver3D : public TPS::Solver { class QuasiMagnetostaticSolver3D : public QuasiMagnetostaticSolverBase { protected: - mfem::FiniteElementCollection *hcurl_; - mfem::FiniteElementCollection *h1_; - mfem::FiniteElementCollection *hdiv_; - mfem::FiniteElementCollection *L2_; + mfem::FiniteElementCollection* hcurl_; + mfem::FiniteElementCollection* h1_; + mfem::FiniteElementCollection* hdiv_; + mfem::FiniteElementCollection* L2_; - mfem::ParFiniteElementSpace *Aspace_; - mfem::ParFiniteElementSpace *pspace_; - mfem::ParFiniteElementSpace *Bspace_; - mfem::ParFiniteElementSpace *jh_space_; + mfem::ParFiniteElementSpace* Aspace_; + mfem::ParFiniteElementSpace* pspace_; + mfem::ParFiniteElementSpace* Bspace_; + mfem::ParFiniteElementSpace* jh_space_; mfem::Array ess_bdr_tdofs_; - mfem::ParBilinearForm *K_; - mfem::ParLinearForm *r_; + mfem::ParBilinearForm* K_; + mfem::ParLinearForm* r_; - mfem::common::ParDiscreteGradOperator *grad_; - mfem::common::DivergenceFreeProjector *div_free_; + mfem::common::ParDiscreteGradOperator* grad_; + mfem::common::DivergenceFreeProjector* div_free_; - mfem::ParGridFunction *Areal_; - mfem::ParGridFunction *Aimag_; + mfem::ParGridFunction* Areal_; + mfem::ParGridFunction* Aimag_; - mfem::ParGridFunction *Breal_; - mfem::ParGridFunction *Bimag_; + mfem::ParGridFunction* Breal_; + mfem::ParGridFunction* Bimag_; // mfem::ParGridFunction *plasma_conductivity_; // mfem::GridFunctionCoefficient *plasma_conductivity_coef_; @@ -182,7 +182,7 @@ class QuasiMagnetostaticSolver3D : public QuasiMagnetostaticSolverBase { void InterpolateToYAxis() const; public: - QuasiMagnetostaticSolver3D(ElectromagneticOptions em_opts, TPS::Tps *tps); + QuasiMagnetostaticSolver3D(ElectromagneticOptions em_opts, TPS::Tps* tps); ~QuasiMagnetostaticSolver3D(); /** Initialize quasi-magnetostatic problem @@ -214,10 +214,10 @@ class QuasiMagnetostaticSolver3D : public QuasiMagnetostaticSolverBase { /** Does nothing */ void solveEnd() override; - mfem::ParFiniteElementSpace *getFESpace() const override { return pspace_; } + mfem::ParFiniteElementSpace* getFESpace() const override { return pspace_; } void setStoreE(bool storeE) override; - double elementJouleHeating(const FiniteElement &el, ElementTransformation &Tr, const Vector &elfun) override; + double elementJouleHeating(const FiniteElement& el, ElementTransformation& Tr, const Vector& elfun) override; double totalJouleHeating() override; }; @@ -229,17 +229,17 @@ class QuasiMagnetostaticSolver3D : public QuasiMagnetostaticSolverBase { */ class QuasiMagnetostaticSolverAxiSym : public QuasiMagnetostaticSolverBase { // public TPS::Solver { protected: - mfem::FiniteElementCollection *h1_; + mfem::FiniteElementCollection* h1_; - mfem::ParFiniteElementSpace *Atheta_space_; + mfem::ParFiniteElementSpace* Atheta_space_; mfem::Array ess_bdr_tdofs_; - mfem::ParBilinearForm *K_; - mfem::ParLinearForm *r_; + mfem::ParBilinearForm* K_; + mfem::ParLinearForm* r_; - mfem::ParGridFunction *Atheta_real_; - mfem::ParGridFunction *Atheta_imag_; + mfem::ParGridFunction* Atheta_real_; + mfem::ParGridFunction* Atheta_imag_; bool operator_initialized_; bool current_initialized_; @@ -247,7 +247,7 @@ class QuasiMagnetostaticSolverAxiSym : public QuasiMagnetostaticSolverBase { // void InterpolateToYAxis() const; public: - QuasiMagnetostaticSolverAxiSym(ElectromagneticOptions em_opts, TPS::Tps *tps); + QuasiMagnetostaticSolverAxiSym(ElectromagneticOptions em_opts, TPS::Tps* tps); ~QuasiMagnetostaticSolverAxiSym(); /** Initialize axisymmetric quasi-magnetostatic problem @@ -278,10 +278,10 @@ class QuasiMagnetostaticSolverAxiSym : public QuasiMagnetostaticSolverBase { // /** Does nothing */ void solveEnd() override; - mfem::ParFiniteElementSpace *getFESpace() const override { return Atheta_space_; } + mfem::ParFiniteElementSpace* getFESpace() const override { return Atheta_space_; } void setStoreE(bool storeE) override; - double elementJouleHeating(const FiniteElement &el, ElementTransformation &Tr, const Vector &elfun) override; + double elementJouleHeating(const FiniteElement& el, ElementTransformation& Tr, const Vector& elfun) override; double totalJouleHeating() override; double coilCurrent() const final; diff --git a/src/radiation.cpp b/src/radiation.cpp index cd5fc5f3..de0c596d 100644 --- a/src/radiation.cpp +++ b/src/radiation.cpp @@ -32,7 +32,7 @@ #include "radiation.hpp" -MFEM_HOST_DEVICE NetEmission::NetEmission(const RadiationInput &inputs) +MFEM_HOST_DEVICE NetEmission::NetEmission(const RadiationInput& inputs) : Radiation(), necTable_(LinearTable(inputs.necTableInput)) { assert(inputs.model == NET_EMISSION); assert(inputs.necModel == TABULATED_NEC); diff --git a/src/radiation.hpp b/src/radiation.hpp index 392e4532..caaf726a 100644 --- a/src/radiation.hpp +++ b/src/radiation.hpp @@ -47,7 +47,7 @@ class Radiation { MFEM_HOST_DEVICE virtual ~Radiation() {} // Currently has the minimal format required for NEC model. - MFEM_HOST_DEVICE virtual double computeEnergySink(const double &T_h) { + MFEM_HOST_DEVICE virtual double computeEnergySink(const double& T_h) { printf("computeEnergySink not implemented"); assert(false); return 0; @@ -62,11 +62,11 @@ class NetEmission : public Radiation { LinearTable necTable_; public: - MFEM_HOST_DEVICE NetEmission(const RadiationInput &inputs); + MFEM_HOST_DEVICE NetEmission(const RadiationInput& inputs); MFEM_HOST_DEVICE ~NetEmission(); - MFEM_HOST_DEVICE double computeEnergySink(const double &T_h) override { return -4.0 * PI_ * necTable_.eval(T_h); } + MFEM_HOST_DEVICE double computeEnergySink(const double& T_h) override { return -4.0 * PI_ * necTable_.eval(T_h); } }; #endif // RADIATION_HPP_ diff --git a/src/reactingFlow.cpp b/src/reactingFlow.cpp index 35c70fca..f5de78a0 100644 --- a/src/reactingFlow.cpp +++ b/src/reactingFlow.cpp @@ -46,15 +46,15 @@ using namespace mfem; using namespace mfem::common; /// forward declarations -double species_stepLeft(const Vector &coords, double t); -double species_stepRight(const Vector &coords, double t); -double species_uniform(const Vector &coords, double t); -double binaryTest(const Vector &coords, double t); +double species_stepLeft(const Vector& coords, double t); +double species_stepRight(const Vector& coords, double t); +double species_uniform(const Vector& coords, double t); +double binaryTest(const Vector& coords, double t); -static double radius(const Vector &pos) { return pos[0]; } +static double radius(const Vector& pos) { return pos[0]; } static FunctionCoefficient radius_coeff(radius); -static double sigmaTorchStartUp(const Vector &pos) { +static double sigmaTorchStartUp(const Vector& pos) { // const double x = pos[0]; // radial location const double x = std::sqrt(pos[0] * pos[0] + pos[2] * pos[2]); // radial location const double y = pos[1]; // axial location @@ -71,8 +71,9 @@ static double sigmaTorchStartUp(const Vector &pos) { // additions for 3d, this should just use "SetConstantPlasmaConductivity" in equation_of_state.cpp const double z = pos[2]; const double rCyl = 0.029; - const double rsig = 0.005; // 5mm - const double ysig = 0.01; + // const double rsig = 0.005; // 5mm + const double rsig = 0.0075; + const double ysig = 0.1; const double y0 = 0.15; // step location double radius_here = std::sqrt(x * x + z * z); @@ -81,7 +82,7 @@ static double sigmaTorchStartUp(const Vector &pos) { rwgt = std::exp(-0.5 * (radius_here / rsig) * (radius_here / rsig)); hwgt = std::exp(-0.5 * ((y - y0) / ysig) * ((y - y0) / ysig)); if (radius_here >= rCyl) rwgt = 0.0; - sigma = 2000. * rwgt * hwgt; + sigma = 4000. * rwgt * hwgt; // if (sigma > 1.0) { // std::cout << "sigma: " << sigma << " radius: " << radius_here << " y: " << y << endl; @@ -90,10 +91,32 @@ static double sigmaTorchStartUp(const Vector &pos) { return sigma; } +static double sigmaTorchStartUp2D(const Vector& pos) { + const double x = std::sqrt(pos[0] * pos[0]); // radial location + const double y = pos[1]; // axial location + + // additions for 3d, this should just use "SetConstantPlasmaConductivity" in equation_of_state.cpp + const double rCyl = 0.029; + const double rsig = 0.005; // 5mm + const double ysig = 0.01; + const double y0 = 0.15; // step location + + double radius_here = std::sqrt(x * x); + double rwgt, hwgt; + double sigma; + rwgt = std::exp(-0.5 * (radius_here / rsig) * (radius_here / rsig)); + hwgt = std::exp(-0.5 * ((y - y0) / ysig) * ((y - y0) / ysig)); + if (radius_here >= rCyl) rwgt = 0.0; + sigma = 2000. * rwgt * hwgt; + + return sigma; +} + static FunctionCoefficient sigma_start_up(sigmaTorchStartUp); +static FunctionCoefficient sigma_start_up_2d(sigmaTorchStartUp2D); -ReactingFlow::ReactingFlow(mfem::ParMesh *pmesh, LoMachOptions *loMach_opts, temporalSchemeCoefficients &time_coeff, - ParGridFunction *gridScale, TPS::Tps *tps) +ReactingFlow::ReactingFlow(mfem::ParMesh* pmesh, LoMachOptions* loMach_opts, temporalSchemeCoefficients& time_coeff, + ParGridFunction* gridScale, TPS::Tps* tps) : tpsP_(tps), pmesh_(pmesh), dim_(pmesh->Dimension()), time_coeff_(time_coeff) { rank0_ = (pmesh_->GetMyRank() == 0); order_ = loMach_opts->order; @@ -781,15 +804,24 @@ ReactingFlow::ReactingFlow(mfem::ParMesh *pmesh, LoMachOptions *loMach_opts, tem // artificial diffusion (SUPG) tpsP_->getInput("loMach/reactingFlow/streamwise-stabilization", sw_stab_, false); - // specified plasma initial condition + // specified plasma initial condition (use full sw-stab for all but momentum) tpsP_->getInput("plasma_models/initialize_species", species_init_, false); - tpsP_->getInput("loMach/reactingFlow/Reh_factor", Reh_factor_, 0.5); - tpsP_->getInput("loMach/reactingFlow/Reh_offset", Reh_offset_, 1.0); + tpsP_->getInput("loMach/reactingFlow/Reh_factor", Reh_factor_, 1.0); + tpsP_->getInput("loMach/reactingFlow/Reh_offset", Reh_offset_, 0.0); // zero-gradient BCs tpsP_->getInput("loMach/reactingFlow/neumann-temp", neumann_temp_, false); tpsP_->getInput("loMach/reactingFlow/neumann-species-inlet", neumann_species_inlet_, true); tpsP_->getInput("loMach/reactingFlow/neumann-species-wall", neumann_species_wall_, true); + + // spark flow + spark_center_.SetSize(dim_); + Vector zero(dim_); + zero = 0.0; + tpsP_->getInput("loMach/reactingFlow/spark", spark_, false); + tpsP_->getVec("loMach/reactingFlow/spark-center", spark_center_, dim_, zero); + tpsP_->getInput("loMach/reactingFlow/spark-radius", spark_radius_, 1.0); + tpsP_->getInput("loMach/reactingFlow/spark-electron-mass-fraction", spark_peak_, 1.0e-18); } // NOLINT ReactingFlow::~ReactingFlow() { @@ -1381,12 +1413,12 @@ void ReactingFlow::initializeSelf() { double Twall; tpsP_->getRequiredInput((basepath + "/temperature").c_str(), Twall); - ConstantCoefficient *Twall_coeff = new ConstantCoefficient(); + ConstantCoefficient* Twall_coeff = new ConstantCoefficient(); Twall_coeff->constant = Twall; AddTempDirichletBC(Twall_coeff, attr_wall); - ConstantCoefficient *Qt_bc_coeff = new ConstantCoefficient(); + ConstantCoefficient* Qt_bc_coeff = new ConstantCoefficient(); Qt_bc_coeff->constant = 0.0; AddQtDirichletBC(Qt_bc_coeff, attr_wall); @@ -1412,7 +1444,11 @@ void ReactingFlow::initializeOperators() { // TODO(trevilo): Put a flag for this!!!! if (torch_cold_start_) { if (rank0_) std::cout << " Cold start selected. Specifying sigma field." << endl; - sigma_gf_.ProjectCoefficient(sigma_start_up); + if (dim_ == 3) { + sigma_gf_.ProjectCoefficient(sigma_start_up); + } else { + sigma_gf_.ProjectCoefficient(sigma_start_up_2d); + } } Array empty; @@ -1421,9 +1457,9 @@ void ReactingFlow::initializeOperators() { // unsteady: p+p [+p] = 2p [3p] // convection: p+p+(p-1) [+p] = 3p-1 [4p-1] // diffusion: (p-1)+(p-1) [+p] = 2p-2 [3p-2] - const IntegrationRule &ir_i = gll_rules_.Get(sfes_->GetFE(0)->GetGeomType(), 2 * order_ + 1); - const IntegrationRule &ir_nli = gll_rules_.Get(sfes_->GetFE(0)->GetGeomType(), 4 * order_); - const IntegrationRule &ir_di = gll_rules_.Get(sfes_->GetFE(0)->GetGeomType(), 3 * order_ - 1); + const IntegrationRule& ir_i = gll_rules_.Get(sfes_->GetFE(0)->GetGeomType(), 2 * order_ + 1); + const IntegrationRule& ir_nli = gll_rules_.Get(sfes_->GetFE(0)->GetGeomType(), 4 * order_); + const IntegrationRule& ir_di = gll_rules_.Get(sfes_->GetFE(0)->GetGeomType(), 3 * order_ - 1); // coefficients for operators cpMix_coeff_ = new GridFunctionCoefficient(&CpMix_gf_); @@ -1515,7 +1551,7 @@ void ReactingFlow::initializeOperators() { } At_form_ = new ParBilinearForm(sfes_); - ConvectionIntegrator *at_blfi; + ConvectionIntegrator* at_blfi; if (axisym_) { at_blfi = new ConvectionIntegrator(*rad_rho_Cp_u_coeff_); } else { @@ -1532,7 +1568,7 @@ void ReactingFlow::initializeOperators() { At_form_->FormSystemMatrix(empty, At_); Ay_form_ = new ParBilinearForm(sfes_); - ConvectionIntegrator *ay_blfi; + ConvectionIntegrator* ay_blfi; if (axisym_) { ay_blfi = new ConvectionIntegrator(*rad_rho_u_coeff_); } else { @@ -1550,7 +1586,7 @@ void ReactingFlow::initializeOperators() { // mass matrix Ms_form_ = new ParBilinearForm(sfes_); - MassIntegrator *ms_blfi; + MassIntegrator* ms_blfi; if (axisym_) { ms_blfi = new MassIntegrator(radius_coeff); } else { @@ -1568,7 +1604,7 @@ void ReactingFlow::initializeOperators() { // mass matrix with rho MsRho_form_ = new ParBilinearForm(sfes_); - MassIntegrator *msrho_blfi; + MassIntegrator* msrho_blfi; if (axisym_) { msrho_blfi = new MassIntegrator(*rad_rho_coeff_); } else { @@ -1586,7 +1622,7 @@ void ReactingFlow::initializeOperators() { // mass matrix with rho and Cp MsRhoCp_form_ = new ParBilinearForm(sfes_); - MassIntegrator *msrhocp_blfi; + MassIntegrator* msrhocp_blfi; if (axisym_) { msrhocp_blfi = new MassIntegrator(*rad_rho_Cp_coeff_); } else { @@ -1604,13 +1640,13 @@ void ReactingFlow::initializeOperators() { // temperature Helmholtz Ht_form_ = new ParBilinearForm(sfes_); - MassIntegrator *hmt_blfi; + MassIntegrator* hmt_blfi; if (axisym_) { hmt_blfi = new MassIntegrator(*rad_rho_Cp_over_dt_coeff_); } else { hmt_blfi = new MassIntegrator(*rhoCp_over_dt_coeff_); } - DiffusionIntegrator *hdt_blfi; + DiffusionIntegrator* hdt_blfi; if (axisym_) { hdt_blfi = new DiffusionIntegrator(*rad_thermal_diff_total_coeff_); } else { @@ -1638,13 +1674,13 @@ void ReactingFlow::initializeOperators() { // species Helmholtz Hy_form_ = new ParBilinearForm(sfes_); - MassIntegrator *hmy_blfi; + MassIntegrator* hmy_blfi; if (axisym_) { hmy_blfi = new MassIntegrator(*rad_rho_over_dt_coeff_); } else { hmy_blfi = new MassIntegrator(*rho_over_dt_coeff_); } - DiffusionIntegrator *hdy_blfi; + DiffusionIntegrator* hdy_blfi; if (axisym_) { hdy_blfi = new DiffusionIntegrator(*rad_species_diff_total_coeff_); } else { @@ -1676,7 +1712,7 @@ void ReactingFlow::initializeOperators() { MsInvPC_ = new OperatorJacobiSmoother(diag_pa, empty); } else { MsInvPC_ = new HypreSmoother(*Ms_.As()); - dynamic_cast(MsInvPC_)->SetType(HypreSmoother::Jacobi, 1); + dynamic_cast(MsInvPC_)->SetType(HypreSmoother::Jacobi, 1); } MsInv_ = new CGSolver(sfes_->GetComm()); MsInv_->iterative_mode = false; @@ -1692,7 +1728,7 @@ void ReactingFlow::initializeOperators() { HtInvPC_ = new OperatorJacobiSmoother(diag_pa, temp_ess_tdof_); } else { HtInvPC_ = new HypreSmoother(*Ht_.As()); - dynamic_cast(HtInvPC_)->SetType(HypreSmoother::Jacobi, 1); + dynamic_cast(HtInvPC_)->SetType(HypreSmoother::Jacobi, 1); } HtInv_ = new CGSolver(sfes_->GetComm()); @@ -1709,7 +1745,7 @@ void ReactingFlow::initializeOperators() { HyInvPC_ = new OperatorJacobiSmoother(diag_pa, spec_ess_tdof_); } else { HyInvPC_ = new HypreSmoother(*Hy_.As()); - dynamic_cast(HyInvPC_)->SetType(HypreSmoother::Jacobi, 1); + dynamic_cast(HyInvPC_)->SetType(HypreSmoother::Jacobi, 1); } HyInv_ = new CGSolver(sfes_->GetComm()); @@ -1722,7 +1758,7 @@ void ReactingFlow::initializeOperators() { // Vector space mass matrix (used in gradient calcs) Mv_form_ = new ParBilinearForm(vfes_); - VectorMassIntegrator *mv_blfi; + VectorMassIntegrator* mv_blfi; if (axisym_) { mv_blfi = new VectorMassIntegrator(radius_coeff); } else { @@ -1745,7 +1781,7 @@ void ReactingFlow::initializeOperators() { Mv_inv_pc_ = new OperatorJacobiSmoother(diag_pa, empty); } else { Mv_inv_pc_ = new HypreSmoother(*Mv_op_.As()); - dynamic_cast(Mv_inv_pc_)->SetType(HypreSmoother::Jacobi, 1); + dynamic_cast(Mv_inv_pc_)->SetType(HypreSmoother::Jacobi, 1); } Mv_inv_ = new CGSolver(vfes_->GetComm()); Mv_inv_->iterative_mode = false; @@ -1758,8 +1794,8 @@ void ReactingFlow::initializeOperators() { // Energy sink/source terms: Joule heating and radiation sink jh_form_ = new ParLinearForm(sfes_); - DomainLFIntegrator *jh_dlfi; - DomainLFIntegrator *rad_dlfi; + DomainLFIntegrator* jh_dlfi; + DomainLFIntegrator* rad_dlfi; if (axisym_) { jh_dlfi = new DomainLFIntegrator(*rad_jh_coeff_); rad_dlfi = new DomainLFIntegrator(*rad_radiation_sink_coeff_); @@ -1776,7 +1812,7 @@ void ReactingFlow::initializeOperators() { // Qt ..................................... Mq_form_ = new ParBilinearForm(sfes_); - MassIntegrator *mq_blfi; + MassIntegrator* mq_blfi; if (axisym_) { mq_blfi = new MassIntegrator(radius_coeff); } else { @@ -1798,7 +1834,7 @@ void ReactingFlow::initializeOperators() { MqInvPC_ = new OperatorJacobiSmoother(diag_pa, empty); } else { MqInvPC_ = new HypreSmoother(*Mq_.As()); - dynamic_cast(MqInvPC_)->SetType(HypreSmoother::Jacobi, 1); + dynamic_cast(MqInvPC_)->SetType(HypreSmoother::Jacobi, 1); } MqInv_ = new CGSolver(sfes_->GetComm()); MqInv_->iterative_mode = false; @@ -1809,7 +1845,7 @@ void ReactingFlow::initializeOperators() { MqInv_->SetMaxIter(max_iter_); LQ_form_ = new ParBilinearForm(sfes_); - DiffusionIntegrator *lqd_blfi; + DiffusionIntegrator* lqd_blfi; if (axisym_) { lqd_blfi = new DiffusionIntegrator(*rad_thermal_diff_total_coeff_); } else { @@ -1820,14 +1856,16 @@ void ReactingFlow::initializeOperators() { } LQ_form_->AddDomainIntegrator(lqd_blfi); - DiffusionIntegrator *slqd_blfi; - if (sw_stab_) { - slqd_blfi = new DiffusionIntegrator(*supg_coeff_); - if (numerical_integ_) { - slqd_blfi->SetIntRule(&ir_di); - } - LQ_form_->AddDomainIntegrator(slqd_blfi); - } + // NO, this is not consistent and will degrade stability + // DiffusionIntegrator *slqd_blfi; + // if (sw_stab_) { + // slqd_blfi = new DiffusionIntegrator(*supg_coeff_); + // if (numerical_integ_) { + // slqd_blfi->SetIntRule(&ir_di); + // } + // LQ_form_->AddDomainIntegrator(slqd_blfi); + // } + if (partial_assembly_) { LQ_form_->SetAssemblyLevel(AssemblyLevel::PARTIAL); } @@ -1835,7 +1873,7 @@ void ReactingFlow::initializeOperators() { LQ_form_->FormSystemMatrix(empty, LQ_); LQ_bdry_ = new ParLinearForm(sfes_); - BoundaryNormalLFIntegrator *lq_bdry_lfi; + BoundaryNormalLFIntegrator* lq_bdry_lfi; if (axisym_) { lq_bdry_lfi = new BoundaryNormalLFIntegrator(*rad_kap_gradT_coeff_, 2, -1); } else { @@ -1849,7 +1887,7 @@ void ReactingFlow::initializeOperators() { // for explicit species-diff source term in energy (inv not needed) // TODO(trevilo): This operator is not used. Can we eliminate it? LY_form_ = new ParBilinearForm(sfes_); - auto *lyd_blfi = new DiffusionIntegrator(*species_diff_Cp_coeff_); + auto* lyd_blfi = new DiffusionIntegrator(*species_diff_Cp_coeff_); if (numerical_integ_) { lyd_blfi->SetIntRule(&ir_di); } @@ -1871,7 +1909,7 @@ void ReactingFlow::initializeOperators() { // gradient of scalar G_form_ = new ParMixedBilinearForm(sfes_, vfes_); - GradientIntegrator *g_mblfi; + GradientIntegrator* g_mblfi; if (axisym_) { g_mblfi = new GradientIntegrator(radius_coeff); } else { @@ -1911,8 +1949,8 @@ void ReactingFlow::initializeOperators() { if (restart_from_lte) { Vector n_sp(nSpecies_); Vector rho_sp(nSpecies_); - const double *h_T = Tn_.HostRead(); - double *h_Yn = Yn_.HostWrite(); + const double* h_T = Tn_.HostRead(); + double* h_Yn = Yn_.HostWrite(); for (int i = 0; i < sDofInt_; i++) { const double Ti = h_T[i]; @@ -1998,8 +2036,63 @@ void ReactingFlow::step() { dt_ = time_coeff_.dt; time_ = time_coeff_.time; + // spark flow at specified location if triggered + // TODO(swh) move to seperate function + if (spark_) { + if (rank0_) std::cout << "Sparking flow" << endl; + + // TODO(swh) confirm that this check is alreay enforced elsewhere + int nSlot = nSpecies_ - 1; + int eSlot = nSpecies_ - 2; + int ionSlot = nSpecies_ - 3; + + const double m_n = mixture_->GetGasParams(nSlot, GasParams::SPECIES_MW); + const double m_e = mixture_->GetGasParams(eSlot, GasParams::SPECIES_MW); + const double m_ion = mixture_->GetGasParams(ionSlot, GasParams::SPECIES_MW); + + ParGridFunction coordsDof(vfes_); + pmesh_->GetNodes(coordsDof); + auto h_Yn = Yn_.HostReadWrite(); + for (int i = 0; i < sDofInt_; i++) { + // spark volume weight + double x, y, z, dist; + double wgt; + x = coordsDof(0 * sDofInt_ + i); + y = coordsDof(1 * sDofInt_ + i); + x = x - spark_center_[0]; + y = y - spark_center_[1]; + dist = x * x + y * y; + if (dim_ == 3) { + z = coordsDof(2 * sDofInt_ + i); + z = z - spark_center_[2]; + dist += z * z; + } + dist = std::sqrt(dist); + wgt = std::exp(-0.5 * (dist / spark_radius_) * (dist / spark_radius_)); + // if (rank0_) std::cout << "SPARK WGT: " << wgt << " | dist: " << dist << " | spark_radius: " << spark_radius_ << + // endl; wgt = 1.0; if(wgt < 0) { std::cout << "BAD WGT: " << wgt << endl; + // } + // if(wgt >1) { + // std::cout << "BAD WGT: " << wgt << endl; + // } + + // free electron value (mass-fraction) + h_Yn[eSlot * sDofInt_ + i] += wgt * spark_peak_; + + // correct ion value to stay consistent + h_Yn[ionSlot * sDofInt_ + i] += h_Yn[eSlot * sDofInt_ + i] * m_ion / m_e; + + // correct nuetral + h_Yn[nSlot * sDofInt_ + i] -= h_Yn[eSlot * sDofInt_ + i] * m_n / m_e; + } + YnFull_gf_.SetFromTrueDofs(Yn_); + + // only do this once + spark_ = false; + } // end spark loop + // Set current time for velocity Dirichlet boundary conditions. - for (auto &temp_dbc : temp_dbcs_) { + for (auto& temp_dbc : temp_dbcs_) { temp_dbc.coeff->SetTime(time_ + dt_); } @@ -2092,7 +2185,7 @@ void ReactingFlow::step() { if (implicit_chemistry_) { auto h_Yn = Yn_next_.HostReadWrite(); auto h_Tn = Tn_next_.HostReadWrite(); - double *YT = new double[nActiveSpecies_ + 1]; + double* YT = new double[nActiveSpecies_ + 1]; for (int i = 0; i < sDofInt_; i++) { // Extract point state for (int sp = 0; sp < nActiveSpecies_; sp++) { @@ -2227,8 +2320,8 @@ void ReactingFlow::evalSubstepNumber() { speciesProduction(); { - const double *dataProd = prodY_.HostRead(); - const double *dataYn = Yn_.HostRead(); + const double* dataProd = prodY_.HostRead(); + const double* dataYn = Yn_.HostRead(); for (int i = 0; i < sDofInt_; i++) { for (int sp = 0; sp < nSpecies_; sp++) { // basic based on max production @@ -2266,9 +2359,9 @@ void ReactingFlow::temperatureStep() { // Update radiation sink if (radiation_ != nullptr) { - const double *d_T = Tn_next_.Read(); - double *d_rad = radiation_sink_.Write(); - Radiation *rmodel = radiation_; + const double* d_T = Tn_next_.Read(); + double* d_rad = radiation_sink_.Write(); + Radiation* rmodel = radiation_; MFEM_FORALL(i, Tn_next_.Size(), { d_rad[i] = rmodel->computeEnergySink(d_T[i]); }); } radiation_sink_gf_.SetFromTrueDofs(radiation_sink_); @@ -2306,6 +2399,31 @@ void ReactingFlow::temperatureStep() { jh_form_->Update(); jh_form_->Assemble(); jh_form_->ParallelAssemble(jh_); + + // this bit is to prevent joule heating bleed -> make more elegant and then move to separate routine + ParGridFunction coordsDof(vfes_); + pmesh_->GetNodes(coordsDof); + double rCyl = 0.029; + { + double* djh = jh_.HostReadWrite(); + for (int i = 0; i < sDofInt_; i++) { + double x, z, dist; + double wgt; + x = coordsDof(0 * sDofInt_ + i); + // y = coordsDof(1 * sDofInt_ + i); + dist = x * x; + if (dim_ == 3) { + z = coordsDof(2 * sDofInt_ + i); + // z = z - spark_center_[2]; + dist += z * z; + } + dist = std::sqrt(dist); + wgt = 1.0; + if (dist > rCyl) wgt = 0.0; + djh[i] *= wgt; + } + } + resT_ += jh_; // species-temp diffusion term, already in int-weak form @@ -2333,14 +2451,14 @@ void ReactingFlow::temperatureStep() { } // Prepare for the solve - for (auto &temp_dbc : temp_dbcs_) { + for (auto& temp_dbc : temp_dbcs_) { Tn_next_gf_.ProjectBdrCoefficient(*temp_dbc.coeff, temp_dbc.attr); } sfes_->GetRestrictionMatrix()->MultTranspose(resT_, resT_gf_); Vector Xt2, Bt2; if (partial_assembly_) { - auto *HC = Ht_.As(); + auto* HC = Ht_.As(); EliminateRHS(*Ht_form_, *HC, temp_ess_tdof_, Tn_next_gf_, resT_gf_, Xt2, Bt2, 1); } else { Ht_form_->FormLinearSystem(temp_ess_tdof_, Tn_next_gf_, resT_gf_, Ht_, Xt2, Bt2, 1); @@ -2430,9 +2548,9 @@ void ReactingFlow::temperatureSubstep(int iSub) { // tmpR0_.Add(1.0, TnStar_); // tmpR0_.Add(1.0, Tn_); - double *data = tmpR0_.HostReadWrite(); - double *dTstar = TnStar_.HostReadWrite(); - double *dTn = Tn_.HostReadWrite(); + double* data = tmpR0_.HostReadWrite(); + double* dTstar = TnStar_.HostReadWrite(); + double* dTn = Tn_.HostReadWrite(); if (explicit_destruction_) { for (int i = 0; i < sDofInt_; i++) { @@ -2466,8 +2584,8 @@ void ReactingFlow::temperatureSubstep(int iSub) { void ReactingFlow::speciesLastStep() { tmpR0_ = 0.0; - double *dataYn = Yn_next_.HostReadWrite(); - double *dataYsum = tmpR0_.HostReadWrite(); + double* dataYn = Yn_next_.HostReadWrite(); + double* dataYsum = tmpR0_.HostReadWrite(); for (int n = 0; n < nSpecies_ - 1; n++) { for (int i = 0; i < sDofInt_; i++) { dataYsum[i] += dataYn[i + n * sDofInt_]; @@ -2480,8 +2598,8 @@ void ReactingFlow::speciesLastStep() { void ReactingFlow::speciesLastSubstep() { tmpR0_ = 0.0; - double *dataYn = Yn_.HostReadWrite(); - double *dataYsum = tmpR0_.HostReadWrite(); + double* dataYn = Yn_.HostReadWrite(); + double* dataYsum = tmpR0_.HostReadWrite(); for (int n = 0; n < nSpecies_ - 1; n++) { for (int i = 0; i < sDofInt_; i++) { dataYsum[i] += dataYn[i + n * sDofInt_]; @@ -2551,14 +2669,14 @@ void ReactingFlow::speciesStep(int iSpec) { setScalarFromVector(Yn_, iSpec, &tmpR0a_); Yn_next_gf_.SetFromTrueDofs(tmpR0a_); - for (auto &spec_dbc : spec_dbcs_) { + for (auto& spec_dbc : spec_dbcs_) { Yn_next_gf_.ProjectBdrCoefficient(*spec_dbc.coeff, spec_dbc.attr); } sfes_->GetRestrictionMatrix()->MultTranspose(resY_, resY_gf_); Vector Xt2, Bt2; if (partial_assembly_) { - auto *HC = Hy_.As(); + auto* HC = Hy_.As(); EliminateRHS(*Hy_form_, *HC, spec_ess_tdof_, Yn_next_gf_, resY_gf_, Xt2, Bt2, 1); } else { Hy_form_->FormLinearSystem(spec_ess_tdof_, Yn_next_gf_, resY_gf_, Hy_, Xt2, Bt2, 1); @@ -2611,10 +2729,10 @@ void ReactingFlow::speciesSubstep(int iSpec, int iSub) { // setScalarFromVector(Yn_, iSpec, &tmpR0a_); // tmpR0_.Add(1.0, tmpR0a_); - const double *dYstar = YnStar_.HostRead(); - const double *dYn = Yn_.HostRead(); + const double* dYstar = YnStar_.HostRead(); + const double* dYn = Yn_.HostRead(); // const double *dRho = rn_.HostRead(); - double *data = tmpR0_.HostReadWrite(); + double* data = tmpR0_.HostReadWrite(); if (explicit_destruction_) { for (int i = 0; i < sDofInt_; i++) { @@ -2643,7 +2761,7 @@ void ReactingFlow::speciesSubstep(int iSpec, int iSub) { // clip any small negative values { - double *data = tmpR0_.HostReadWrite(); + double* data = tmpR0_.HostReadWrite(); for (int i = 0; i < sDofInt_; i++) { data[i] = max(data[i], 0.0); } @@ -2655,11 +2773,11 @@ void ReactingFlow::speciesSubstep(int iSpec, int iSub) { /**/ void ReactingFlow::speciesProduction() { - const double *dataT = Tn_.HostRead(); - const double *dataRho = rn_.HostRead(); - const double *dataY = Yn_.HostRead(); - double *dataProd = prodY_.HostWrite(); - double *dataEmit = prodE_.HostWrite(); + const double* dataT = Tn_.HostRead(); + const double* dataRho = rn_.HostRead(); + const double* dataY = Yn_.HostRead(); + double* dataProd = prodY_.HostWrite(); + double* dataEmit = prodE_.HostWrite(); // const int nEq = dim_ + 2 + nActiveSpecies_; Vector state(gpudata::MAXEQUATIONS); @@ -2731,12 +2849,12 @@ void ReactingFlow::speciesProduction() { void ReactingFlow::heatOfFormation() { hw_ = 0.0; tmpR0_ = 0.0; - double *h_hw = hw_.HostReadWrite(); - double *h_em = tmpR0_.HostReadWrite(); + double* h_hw = hw_.HostReadWrite(); + double* h_em = tmpR0_.HostReadWrite(); - const double *dataT = Tn_.HostRead(); - const double *h_prodY = prodY_.HostRead(); - const double *h_prodE = prodE_.HostRead(); + const double* dataT = Tn_.HostRead(); + const double* h_prodY = prodY_.HostRead(); + const double* h_prodE = prodE_.HostRead(); double hspecies; @@ -2846,7 +2964,7 @@ void ReactingFlow::computeExplicitSpecConvectionOP(int iSpec, bool extrap) { setVectorFromScalar(tmpR0a_, iSpec, &NYn_); } -void ReactingFlow::initializeIO(IODataOrganizer &io) { +void ReactingFlow::initializeIO(IODataOrganizer& io) { io.registerIOFamily("Temperature", "/temperature", &Tn_gf_, true, true, sfec_); io.registerIOVar("/temperature", "temperature", 0); @@ -2868,7 +2986,7 @@ void ReactingFlow::initializeIO(IODataOrganizer &io) { } } -void ReactingFlow::initializeViz(ParaViewDataCollection &pvdc) { +void ReactingFlow::initializeViz(ParaViewDataCollection& pvdc) { pvdc.RegisterField("temperature", &Tn_gf_); pvdc.RegisterField("density", &rn_gf_); pvdc.RegisterField("sigma", &sigma_gf_); @@ -2952,9 +3070,9 @@ void ReactingFlow::substepState() { void ReactingFlow::updateMixture() { { - double *dataY = Yn_gf_.HostReadWrite(); - double *dataR = Rmix_gf_.HostReadWrite(); - double *dataM = Mmix_gf_.HostReadWrite(); + double* dataY = Yn_gf_.HostReadWrite(); + double* dataR = Rmix_gf_.HostReadWrite(); + double* dataM = Mmix_gf_.HostReadWrite(); Mmix_gf_ = 0.0; for (int sp = 0; sp < nSpecies_; sp++) { @@ -2978,9 +3096,9 @@ void ReactingFlow::updateMixture() { setScalarFromVector(Yn_, sp, &tmpR0a_); setScalarFromVector(Xn_, sp, &tmpR0b_); Mmix_gf_.GetTrueDofs(tmpR0c_); - double *d_Y = tmpR0a_.HostReadWrite(); - double *d_X = tmpR0b_.HostReadWrite(); - double *d_M = tmpR0c_.HostReadWrite(); + double* d_Y = tmpR0a_.HostReadWrite(); + double* d_X = tmpR0b_.HostReadWrite(); + double* d_M = tmpR0c_.HostReadWrite(); for (int i = 0; i < sDofInt_; i++) { d_X[i] = d_Y[i] * d_M[i] / gasParams_(sp, GasParams::SPECIES_MW); } @@ -2989,10 +3107,10 @@ void ReactingFlow::updateMixture() { // mixture Cp { - double *d_CMix = tmpR0c_.HostReadWrite(); - double *d_Yn = Yn_.HostReadWrite(); - double *d_Rho = rn_.HostReadWrite(); - double *d_Cp = CpY_.HostReadWrite(); + double* d_CMix = tmpR0c_.HostReadWrite(); + double* d_Yn = Yn_.HostReadWrite(); + double* d_Rho = rn_.HostReadWrite(); + double* d_Cp = CpY_.HostReadWrite(); // int nEq = dim_ + 2 + nActiveSpecies_; Vector state(gpudata::MAXEQUATIONS); @@ -3070,14 +3188,14 @@ void ReactingFlow::updateThermoP() { void ReactingFlow::updateDiffusivity() { (flow_interface_->velocity)->GetTrueDofs(tmpR1_); - const double *dataTemp = Tn_.HostRead(); - const double *dataRho = rn_.HostRead(); - const double *dataU = tmpR1_.HostRead(); + const double* dataTemp = Tn_.HostRead(); + const double* dataRho = rn_.HostRead(); + const double* dataU = tmpR1_.HostRead(); double diffY_min = 1.0e-8; // make readable // species diffusivities { - double *dataDiff = diffY_.HostReadWrite(); + double* dataDiff = diffY_.HostReadWrite(); for (int i = 0; i < sDofInt_; i++) { double Efield[gpudata::MAXDIM]; for (int v = 0; v < dim_; v++) Efield[v] = 0.0; @@ -3107,7 +3225,7 @@ void ReactingFlow::updateDiffusivity() { // viscosity { - double *dataVisc = visc_.HostReadWrite(); + double* dataVisc = visc_.HostReadWrite(); for (int i = 0; i < sDofInt_; i++) { double state[gpudata::MAXEQUATIONS]; double conservedState[gpudata::MAXEQUATIONS]; @@ -3132,7 +3250,7 @@ void ReactingFlow::updateDiffusivity() { // thermal conductivity (kappa = alpha*rho*Cp = (nu/Pr)*(rho*Cp)) { - double *dataKappa = kappa_.HostReadWrite(); + double* dataKappa = kappa_.HostReadWrite(); for (int i = 0; i < sDofInt_; i++) { // int nEq = dim_ + 2 + nActiveSpecies_; double state[gpudata::MAXEQUATIONS]; @@ -3158,9 +3276,13 @@ void ReactingFlow::updateDiffusivity() { // electrical conductivity if (!torch_cold_start_ && !fixed_conductivity_) { - // if(rank0_) std::cout << " sigma update portion... " << endl; + // this bit is to prevent joule heating bleed + // ParGridFunction coordsDof(vfes_); + // pmesh_->GetNodes(coordsDof); + // double rCyl = 0.029; + { - double *h_sig = sigma_.HostReadWrite(); + double* h_sig = sigma_.HostReadWrite(); for (int i = 0; i < sDofInt_; i++) { // int nEq = dim_ + 2 + nActiveSpecies_; double state[gpudata::MAXEQUATIONS]; @@ -3182,6 +3304,21 @@ void ReactingFlow::updateDiffusivity() { double sig; transport_->ComputeElectricalConductivity(conservedState, sig); h_sig[i] = sig; + + // this is hack to prevent heating in outflow tank + // double x, y, z, dist; + // double wgt; + // x = coordsDof(0 * sDofInt_ + i); + // y = coordsDof(1 * sDofInt_ + i); + // dist = x * x; + // if (dim_ == 3) { + // z = coordsDof(2 * sDofInt_ + i); + // dist += z * z; + //} + // dist = std::sqrt(dist); + // wgt = 1.0; + // if (dist > rCyl) wgt = 0.0; + // h_sig[i] = wgt * sig; } } @@ -3190,14 +3327,14 @@ void ReactingFlow::updateDiffusivity() { } void ReactingFlow::evaluatePlasmaConductivityGF() { - if (rank0_) std::cout << " we are in evaluatePlasmaConductivityGF " << endl; + if (rank0_) std::cout << " ...we are in evaluatePlasmaConductivityGF " << endl; (flow_interface_->velocity)->GetTrueDofs(tmpR1_); - const double *dataTemp = Tn_.HostRead(); - const double *dataRho = rn_.HostRead(); - const double *dataU = tmpR1_.HostRead(); + const double* dataTemp = Tn_.HostRead(); + const double* dataRho = rn_.HostRead(); + const double* dataU = tmpR1_.HostRead(); - double *h_sig = sigma_.HostReadWrite(); + double* h_sig = sigma_.HostReadWrite(); if (!torch_cold_start_) { for (int i = 0; i < sDofInt_; i++) { @@ -3288,7 +3425,7 @@ void ReactingFlow::computeSystemMass() { } /// Add a Dirichlet boundary condition to the temperature field -void ReactingFlow::AddTempDirichletBC(const double &temp, Array &attr) { +void ReactingFlow::AddTempDirichletBC(const double& temp, Array& attr) { temp_dbcs_.emplace_back(attr, new ConstantCoefficient(temp)); for (int i = 0; i < attr.Size(); ++i) { if (attr[i] == 1) { @@ -3310,7 +3447,7 @@ void ReactingFlow::AddSpecDirichletBC(const double &Y, Array &attr) { } */ -void ReactingFlow::AddTempDirichletBC(Coefficient *coeff, Array &attr) { +void ReactingFlow::AddTempDirichletBC(Coefficient* coeff, Array& attr) { temp_dbcs_.emplace_back(attr, coeff); for (int i = 0; i < attr.Size(); ++i) { if (attr[i] == 1) { @@ -3320,12 +3457,12 @@ void ReactingFlow::AddTempDirichletBC(Coefficient *coeff, Array &attr) { } } -void ReactingFlow::AddTempDirichletBC(ScalarFuncT *f, Array &attr) { +void ReactingFlow::AddTempDirichletBC(ScalarFuncT* f, Array& attr) { AddTempDirichletBC(new FunctionCoefficient(f), attr); } /// Add a Dirichlet boundary condition to the species field -void ReactingFlow::AddSpecDirichletBC(const double &spec, Array &attr) { +void ReactingFlow::AddSpecDirichletBC(const double& spec, Array& attr) { spec_dbcs_.emplace_back(attr, new ConstantCoefficient(spec)); for (int i = 0; i < attr.Size(); ++i) { if (attr[i] == 1) { @@ -3335,7 +3472,7 @@ void ReactingFlow::AddSpecDirichletBC(const double &spec, Array &attr) { } } -void ReactingFlow::AddSpecDirichletBC(Coefficient *coeff, Array &attr) { +void ReactingFlow::AddSpecDirichletBC(Coefficient* coeff, Array& attr) { spec_dbcs_.emplace_back(attr, coeff); for (int i = 0; i < attr.Size(); ++i) { if (attr[i] == 1) { @@ -3345,12 +3482,12 @@ void ReactingFlow::AddSpecDirichletBC(Coefficient *coeff, Array &attr) { } } -void ReactingFlow::AddSpecDirichletBC(ScalarFuncT *f, Array &attr) { +void ReactingFlow::AddSpecDirichletBC(ScalarFuncT* f, Array& attr) { AddSpecDirichletBC(new FunctionCoefficient(f), attr); } // thermal divergence term -void ReactingFlow::AddQtDirichletBC(Coefficient *coeff, Array &attr) { +void ReactingFlow::AddQtDirichletBC(Coefficient* coeff, Array& attr) { Qt_dbcs_.emplace_back(attr, coeff); if (rank0_ && pmesh_->GetMyRank() == 0) { @@ -3371,10 +3508,16 @@ void ReactingFlow::AddQtDirichletBC(Coefficient *coeff, Array &attr) { } } -void ReactingFlow::AddQtDirichletBC(ScalarFuncT *f, Array &attr) { +void ReactingFlow::AddQtDirichletBC(ScalarFuncT* f, Array& attr) { AddQtDirichletBC(new FunctionCoefficient(f), attr); } +// Rather than filtering Qt, a better way is to filter the temperature +// that is fed to the Qt operators. In particular, temperature +// should live in C1 (at least). This can be done with polynomial +// space filtering or numericallly with and (I-alpha*nabla)T type +// filter. In the latter, alpha should depend on discontinuity in +// grad(T) at element boundaries (which is annoying to compute). void ReactingFlow::computeQtTO() { tmpR0_ = 0.0; // rhsqt_bd_ = 0.0; @@ -3406,6 +3549,31 @@ void ReactingFlow::computeQtTO() { jh_form_->Update(); jh_form_->Assemble(); jh_form_->ParallelAssemble(jh_); + + // this bit is to prevent joule heating bleed -> make more elegant and then move to separate routine + ParGridFunction coordsDof(vfes_); + pmesh_->GetNodes(coordsDof); + double rCyl = 0.029; + { + double* djh = jh_.HostReadWrite(); + for (int i = 0; i < sDofInt_; i++) { + double x, z, dist; + double wgt; + x = coordsDof(0 * sDofInt_ + i); + // y = coordsDof(1 * sDofInt_ + i); + dist = x * x; + if (dim_ == 3) { + z = coordsDof(2 * sDofInt_ + i); + // z = z - spark_center_[2]; + dist += z * z; + } + dist = std::sqrt(dist); + wgt = 1.0; + if (dist > rCyl) wgt = 0.0; + djh[i] *= wgt; + } + } + tmpR0_ -= jh_; // rhsqt_jh_.SetFromTrueDofs(jh_); // rhsqt_jh_.Neg(); @@ -3457,7 +3625,7 @@ void ReactingFlow::computeQtTO() { /// identifySpeciesType and identifyCollisionType copies from M2ulPhyS // note: this is rather convoluted and messy, is it even used? -void ReactingFlow::identifySpeciesType(Array &speciesType) { +void ReactingFlow::identifySpeciesType(Array& speciesType) { speciesType.SetSize(nSpecies_); switch (gasType_) { @@ -3599,7 +3767,7 @@ void ReactingFlow::identifySpeciesType(Array &speciesType) { return; } -void ReactingFlow::readTableWrapper(std::string inputPath, TableInput &result) { +void ReactingFlow::readTableWrapper(std::string inputPath, TableInput& result) { std::string filename; tpsP_->getInput((inputPath + "/x_log").c_str(), result.xLogScale, false); tpsP_->getInput((inputPath + "/f_log").c_str(), result.fLogScale, false); @@ -3608,7 +3776,7 @@ void ReactingFlow::readTableWrapper(std::string inputPath, TableInput &result) { readTable(tpsP_->getTPSCommWorld(), filename, result.xLogScale, result.fLogScale, result.order, tableHost_, result); } -void ReactingFlow::identifyCollisionType(const Array &speciesType, GasColl *collisionIndex) { +void ReactingFlow::identifyCollisionType(const Array& speciesType, GasColl* collisionIndex) { for (int spI = 0; spI < nSpecies_; spI++) { for (int spJ = spI; spJ < nSpecies_; spJ++) { // If not initialized, will raise an error. @@ -3702,7 +3870,7 @@ void ReactingFlow::identifyCollisionType(const Array &speciesType, GasC return; } -void ReactingFlow::evaluateReactingSource(const double *YT, const int dofindex, double *omega) { +void ReactingFlow::evaluateReactingSource(const double* YT, const int dofindex, double* omega) { // This function evaluates the reacting flow source terms at a given // state (i.e., at a point in the grid) which is necessary for a // nonlinear solve for an implicit time step at each point. The @@ -3859,14 +4027,14 @@ void ReactingFlow::evaluateReactingSource(const double *YT, const int dofindex, omega[nActiveSpecies_] = hw / rho / Cpmix; } -void ReactingFlow::solveChemistryStep(double *YT, const int dofindex, const double dt) { +void ReactingFlow::solveChemistryStep(double* YT, const int dofindex, const double dt) { const int nState = nActiveSpecies_ + 1; // Number of variables in YT const double eps = implicit_chemistry_fd_eps_; // Perturbation for finite difference Jacobian - double *YT1 = new double[nState]; - double *YT0 = new double[nState]; - double *rhs1 = new double[nState]; - double *rhs = new double[nState]; + double* YT1 = new double[nState]; + double* YT0 = new double[nState]; + double* rhs1 = new double[nState]; + double* rhs = new double[nState]; mfem::DenseMatrix Jac(nState); @@ -3986,7 +4154,7 @@ void ReactingFlow::solveChemistryStep(double *YT, const int dofindex, const doub delete[] rhs; } -double binaryTest(const Vector &coords, double t) { +double binaryTest(const Vector& coords, double t) { double x = coords(0); double y = coords(1); // double z = coords(2); @@ -4005,7 +4173,7 @@ double binaryTest(const Vector &coords, double t) { return yn; } -double species_stepLeft(const Vector &coords, double t) { +double species_stepLeft(const Vector& coords, double t) { double x = coords(0); // douable y = coords(1); // double z = coords(2); @@ -4017,7 +4185,7 @@ double species_stepLeft(const Vector &coords, double t) { return yn; } -double species_stepRight(const Vector &coords, double t) { +double species_stepRight(const Vector& coords, double t) { double x = coords(0); // double y = coords(1); // double z = coords(2); @@ -4030,7 +4198,7 @@ double species_stepRight(const Vector &coords, double t) { return yn; } -double species_uniform(const Vector &coords, double t) { +double species_uniform(const Vector& coords, double t) { // double x = coords(0); // double y = coords(1); // double z = coords(2); diff --git a/src/reactingFlow.hpp b/src/reactingFlow.hpp index 18740071..45b0b7a7 100644 --- a/src/reactingFlow.hpp +++ b/src/reactingFlow.hpp @@ -57,8 +57,8 @@ class Tps; #include "tps_mfem_wrap.hpp" #include "utils.hpp" -using VecFuncT = void(const Vector &x, double t, Vector &u); -using ScalarFuncT = double(const Vector &x, double t); +using VecFuncT = void(const Vector& x, double t, Vector& u); +using ScalarFuncT = double(const Vector& x, double t); class LoMachOptions; struct temporalSchemeCoefficients; @@ -70,14 +70,14 @@ class Radiation; class ReactingFlow : public ThermoChemModelBase { private: // Options-related structures - TPS::Tps *tpsP_ = nullptr; + TPS::Tps* tpsP_ = nullptr; // Mesh and discretization scheme info - ParMesh *pmesh_ = nullptr; + ParMesh* pmesh_ = nullptr; int dim_; int order_; IntegrationRules gll_rules_; - const temporalSchemeCoefficients &time_coeff_; + const temporalSchemeCoefficients& time_coeff_; double dt_; double time_; @@ -93,7 +93,7 @@ class ReactingFlow : public ThermoChemModelBase { GasModel gasModel_; TransportModel transportModel_; ChemistryModel chemistryModel_; - Radiation *radiation_ = nullptr; + Radiation* radiation_ = nullptr; // packaged inputs PerfectMixtureInput mixtureInput_; @@ -101,10 +101,10 @@ class ReactingFlow : public ThermoChemModelBase { ChemistryInput chemistryInput_; ChemistryInput chemistryInputBase_; - PerfectMixture *mixture_ = NULL; - GasMixtureTransport *transport_ = NULL; - Chemistry *chemistry_ = NULL; - Chemistry *chemistryBase_ = NULL; + PerfectMixture* mixture_ = NULL; + GasMixtureTransport* transport_ = NULL; + Chemistry* chemistry_ = NULL; + Chemistry* chemistryBase_ = NULL; std::vector speciesNames_; std::map atomMap_; @@ -171,27 +171,33 @@ class ReactingFlow : public ThermoChemModelBase { bool sw_stab_; double Reh_factor_, Reh_offset_; + // flow spark + bool spark_ = false; + double spark_radius_; + double spark_peak_; + Vector spark_center_; + // FEM related fields and objects // Scalar \f$H^1\f$ finite element collection. - FiniteElementCollection *sfec_ = nullptr; + FiniteElementCollection* sfec_ = nullptr; // Scalar \f$H^1\f$ finite element space. - ParFiniteElementSpace *sfes_ = nullptr; + ParFiniteElementSpace* sfes_ = nullptr; // Species \f$H^1\f$ finite element collection. - FiniteElementCollection *yfec_ = nullptr; + FiniteElementCollection* yfec_ = nullptr; // Species \f$H^1\f$ finite element space. - ParFiniteElementSpace *yfes_ = nullptr; + ParFiniteElementSpace* yfes_ = nullptr; // Vector \f$H^1\f$ finite element collection. - FiniteElementCollection *vfec_ = nullptr; + FiniteElementCollection* vfec_ = nullptr; // Vector \f$H^1\f$ finite element space. - ParFiniteElementSpace *vfes_ = nullptr; + ParFiniteElementSpace* vfes_ = nullptr; - ParGridFunction *gridScale_gf_ = nullptr; + ParGridFunction* gridScale_gf_ = nullptr; // Fields ParGridFunction Tnm1_gf_, Tnm2_gf_; @@ -233,80 +239,80 @@ class ReactingFlow : public ThermoChemModelBase { // ParGridFunction Xqt_gf_; // ParGridFunction *buffer_tInlet_ = nullptr; - GridFunctionCoefficient *temperature_bc_field_ = nullptr; - GridFunctionCoefficient *species_bc_field_ = nullptr; - VectorGridFunctionCoefficient *species_init_field_ = nullptr; - - VectorGridFunctionCoefficient *un_next_coeff_ = nullptr; - GridFunctionCoefficient *rhon_next_coeff_ = nullptr; - ScalarVectorProductCoefficient *rhou_coeff_ = nullptr; - GridFunctionCoefficient *thermal_diff_coeff_ = nullptr; - GridFunctionCoefficient *mut_coeff_ = nullptr; - GridFunctionCoefficient *mult_coeff_ = nullptr; - SumCoefficient *thermal_diff_sum_coeff_ = nullptr; - ProductCoefficient *thermal_diff_total_coeff_ = nullptr; - GradientGridFunctionCoefficient *gradT_coeff_ = nullptr; - ScalarVectorProductCoefficient *kap_gradT_coeff_ = nullptr; - GridFunctionCoefficient *rho_over_dt_coeff_ = nullptr; - GridFunctionCoefficient *rho_coeff_ = nullptr; - GridFunctionCoefficient *cpMix_coeff_ = nullptr; - ProductCoefficient *rhoCp_coeff_ = nullptr; - ScalarVectorProductCoefficient *rhouCp_coeff_ = nullptr; - ProductCoefficient *rhoCp_over_dt_coeff_ = nullptr; - - GridFunctionCoefficient *species_diff_coeff_ = nullptr; - SumCoefficient *species_diff_sum_coeff_ = nullptr; - ProductCoefficient *species_diff_total_coeff_ = nullptr; - - GridFunctionCoefficient *species_Cp_coeff_ = nullptr; - ProductCoefficient *species_diff_Cp_coeff_ = nullptr; - - GridFunctionCoefficient *jh_coeff_ = nullptr; - GridFunctionCoefficient *radiation_sink_coeff_ = nullptr; - - ProductCoefficient *rad_rho_coeff_ = nullptr; - ProductCoefficient *rad_rho_Cp_coeff_ = nullptr; - ScalarVectorProductCoefficient *rad_rho_u_coeff_ = nullptr; - ScalarVectorProductCoefficient *rad_rho_Cp_u_coeff_ = nullptr; - ProductCoefficient *rad_rho_over_dt_coeff_ = nullptr; - ProductCoefficient *rad_species_diff_total_coeff_ = nullptr; - ProductCoefficient *rad_rho_Cp_over_dt_coeff_ = nullptr; - ProductCoefficient *rad_thermal_diff_total_coeff_ = nullptr; - ProductCoefficient *rad_jh_coeff_ = nullptr; - ProductCoefficient *rad_radiation_sink_coeff_ = nullptr; - ScalarVectorProductCoefficient *rad_kap_gradT_coeff_ = nullptr; - - VectorMagnitudeCoefficient *umag_coeff_ = nullptr; - GridFunctionCoefficient *gscale_coeff_ = nullptr; - GridFunctionCoefficient *visc_coeff_ = nullptr; - PowerCoefficient *visc_inv_coeff_ = nullptr; - ProductCoefficient *reh1_coeff_ = nullptr; - ProductCoefficient *reh2_coeff_ = nullptr; - ProductCoefficient *Reh_coeff_ = nullptr; - ExtTransformedCoefficient *csupg_coeff_ = nullptr; - ProductCoefficient *uw1_coeff_ = nullptr; - ProductCoefficient *uw2_coeff_ = nullptr; - ProductCoefficient *upwind_coeff_ = nullptr; - TransformedMatrixVectorCoefficient *swdiff_coeff_ = nullptr; - ScalarMatrixProductCoefficient *supg_coeff_ = nullptr; - ScalarMatrixProductCoefficient *supg_cp_coeff_ = nullptr; + GridFunctionCoefficient* temperature_bc_field_ = nullptr; + GridFunctionCoefficient* species_bc_field_ = nullptr; + VectorGridFunctionCoefficient* species_init_field_ = nullptr; + + VectorGridFunctionCoefficient* un_next_coeff_ = nullptr; + GridFunctionCoefficient* rhon_next_coeff_ = nullptr; + ScalarVectorProductCoefficient* rhou_coeff_ = nullptr; + GridFunctionCoefficient* thermal_diff_coeff_ = nullptr; + GridFunctionCoefficient* mut_coeff_ = nullptr; + GridFunctionCoefficient* mult_coeff_ = nullptr; + SumCoefficient* thermal_diff_sum_coeff_ = nullptr; + ProductCoefficient* thermal_diff_total_coeff_ = nullptr; + GradientGridFunctionCoefficient* gradT_coeff_ = nullptr; + ScalarVectorProductCoefficient* kap_gradT_coeff_ = nullptr; + GridFunctionCoefficient* rho_over_dt_coeff_ = nullptr; + GridFunctionCoefficient* rho_coeff_ = nullptr; + GridFunctionCoefficient* cpMix_coeff_ = nullptr; + ProductCoefficient* rhoCp_coeff_ = nullptr; + ScalarVectorProductCoefficient* rhouCp_coeff_ = nullptr; + ProductCoefficient* rhoCp_over_dt_coeff_ = nullptr; + + GridFunctionCoefficient* species_diff_coeff_ = nullptr; + SumCoefficient* species_diff_sum_coeff_ = nullptr; + ProductCoefficient* species_diff_total_coeff_ = nullptr; + + GridFunctionCoefficient* species_Cp_coeff_ = nullptr; + ProductCoefficient* species_diff_Cp_coeff_ = nullptr; + + GridFunctionCoefficient* jh_coeff_ = nullptr; + GridFunctionCoefficient* radiation_sink_coeff_ = nullptr; + + ProductCoefficient* rad_rho_coeff_ = nullptr; + ProductCoefficient* rad_rho_Cp_coeff_ = nullptr; + ScalarVectorProductCoefficient* rad_rho_u_coeff_ = nullptr; + ScalarVectorProductCoefficient* rad_rho_Cp_u_coeff_ = nullptr; + ProductCoefficient* rad_rho_over_dt_coeff_ = nullptr; + ProductCoefficient* rad_species_diff_total_coeff_ = nullptr; + ProductCoefficient* rad_rho_Cp_over_dt_coeff_ = nullptr; + ProductCoefficient* rad_thermal_diff_total_coeff_ = nullptr; + ProductCoefficient* rad_jh_coeff_ = nullptr; + ProductCoefficient* rad_radiation_sink_coeff_ = nullptr; + ScalarVectorProductCoefficient* rad_kap_gradT_coeff_ = nullptr; + + VectorMagnitudeCoefficient* umag_coeff_ = nullptr; + GridFunctionCoefficient* gscale_coeff_ = nullptr; + GridFunctionCoefficient* visc_coeff_ = nullptr; + PowerCoefficient* visc_inv_coeff_ = nullptr; + ProductCoefficient* reh1_coeff_ = nullptr; + ProductCoefficient* reh2_coeff_ = nullptr; + ProductCoefficient* Reh_coeff_ = nullptr; + ExtTransformedCoefficient* csupg_coeff_ = nullptr; + ProductCoefficient* uw1_coeff_ = nullptr; + ProductCoefficient* uw2_coeff_ = nullptr; + ProductCoefficient* upwind_coeff_ = nullptr; + TransformedMatrixVectorCoefficient* swdiff_coeff_ = nullptr; + ScalarMatrixProductCoefficient* supg_coeff_ = nullptr; + ScalarMatrixProductCoefficient* supg_cp_coeff_ = nullptr; // operators and solvers - ParBilinearForm *At_form_ = nullptr; - ParBilinearForm *Ay_form_ = nullptr; - ParBilinearForm *Ms_form_ = nullptr; - ParBilinearForm *MsRho_form_ = nullptr; - ParBilinearForm *MsRhoCp_form_ = nullptr; - ParBilinearForm *Ht_form_ = nullptr; - ParBilinearForm *Hy_form_ = nullptr; - ParBilinearForm *Mq_form_ = nullptr; - ParBilinearForm *LQ_form_ = nullptr; - ParLinearForm *LQ_bdry_ = nullptr; - ParBilinearForm *LY_form_ = nullptr; - ParMixedBilinearForm *G_form_ = nullptr; - ParBilinearForm *Mv_form_ = nullptr; - - ParLinearForm *jh_form_ = nullptr; + ParBilinearForm* At_form_ = nullptr; + ParBilinearForm* Ay_form_ = nullptr; + ParBilinearForm* Ms_form_ = nullptr; + ParBilinearForm* MsRho_form_ = nullptr; + ParBilinearForm* MsRhoCp_form_ = nullptr; + ParBilinearForm* Ht_form_ = nullptr; + ParBilinearForm* Hy_form_ = nullptr; + ParBilinearForm* Mq_form_ = nullptr; + ParBilinearForm* LQ_form_ = nullptr; + ParLinearForm* LQ_bdry_ = nullptr; + ParBilinearForm* LY_form_ = nullptr; + ParMixedBilinearForm* G_form_ = nullptr; + ParBilinearForm* Mv_form_ = nullptr; + + ParLinearForm* jh_form_ = nullptr; OperatorHandle LQ_; OperatorHandle LY_; @@ -321,16 +327,16 @@ class ReactingFlow : public ThermoChemModelBase { OperatorHandle G_; OperatorHandle Mv_op_; - mfem::Solver *MsInvPC_ = nullptr; - mfem::CGSolver *MsInv_ = nullptr; - mfem::Solver *MqInvPC_ = nullptr; - mfem::CGSolver *MqInv_ = nullptr; - mfem::Solver *HtInvPC_ = nullptr; - mfem::CGSolver *HtInv_ = nullptr; - mfem::Solver *HyInvPC_ = nullptr; - mfem::CGSolver *HyInv_ = nullptr; - mfem::Solver *Mv_inv_pc_ = nullptr; - mfem::CGSolver *Mv_inv_ = nullptr; + mfem::Solver* MsInvPC_ = nullptr; + mfem::CGSolver* MsInv_ = nullptr; + mfem::Solver* MqInvPC_ = nullptr; + mfem::CGSolver* MqInv_ = nullptr; + mfem::Solver* HtInvPC_ = nullptr; + mfem::CGSolver* HtInv_ = nullptr; + mfem::Solver* HyInvPC_ = nullptr; + mfem::CGSolver* HyInv_ = nullptr; + mfem::Solver* Mv_inv_pc_ = nullptr; + mfem::CGSolver* Mv_inv_ = nullptr; // Vectors Vector Tn_, Tn_next_, Tnm1_, Tnm2_; @@ -399,28 +405,28 @@ class ReactingFlow : public ThermoChemModelBase { // set a static sigma field bool torch_cold_start_ = false; - FiniteElementCollection *sfec_filter_ = nullptr; - ParFiniteElementSpace *sfes_filter_ = nullptr; + FiniteElementCollection* sfec_filter_ = nullptr; + ParFiniteElementSpace* sfes_filter_ = nullptr; ParGridFunction Tn_NM1_gf_; ParGridFunction Tn_filtered_gf_; double Pnm1_, Pnm2_, Pnm3_; std::list tableHost_; - std::vector vizSpecFields_; + std::vector vizSpecFields_; std::vector vizSpecNames_; public: - ReactingFlow(mfem::ParMesh *pmesh, LoMachOptions *loMach_opts, temporalSchemeCoefficients &timeCoeff, - ParGridFunction *gridScale, TPS::Tps *tps); + ReactingFlow(mfem::ParMesh* pmesh, LoMachOptions* loMach_opts, temporalSchemeCoefficients& timeCoeff, + ParGridFunction* gridScale, TPS::Tps* tps); virtual ~ReactingFlow(); // Functions overriden from base class void initializeSelf() final; void initializeOperators() final; void step() final; - void initializeIO(IODataOrganizer &io) final; - void initializeViz(ParaViewDataCollection &pvdc) final; + void initializeIO(IODataOrganizer& io) final; + void initializeViz(ParaViewDataCollection& pvdc) final; void evaluatePlasmaConductivityGF() final; // Functions added here @@ -454,7 +460,7 @@ class ReactingFlow : public ThermoChemModelBase { * The incoming YT must contain the nActiveSpecies_ mass fractions * for the active species and temperature. */ - void evaluateReactingSource(const double *YT, const int dofindex, double *omega); + void evaluateReactingSource(const double* YT, const int dofindex, double* omega); /** * @brief Solve the thermochemistry update @@ -466,7 +472,7 @@ class ReactingFlow : public ThermoChemModelBase { * for the active species and temperature. This state is * overwritten with the new local state at the end of the time step. */ - void solveChemistryStep(double *YT, const int dofindex, const double dt); + void solveChemistryStep(double* YT, const int dofindex, const double dt); // time-splitting void substepState(); @@ -475,40 +481,40 @@ class ReactingFlow : public ThermoChemModelBase { void temperatureSubstep(int iSub); /// for creation of structs to interface with old plasma/chem stuff - void identifySpeciesType(Array &speciesType); - void identifyCollisionType(const Array &speciesType, GasColl *collisionIndex); + void identifySpeciesType(Array& speciesType); + void identifyCollisionType(const Array& speciesType, GasColl* collisionIndex); /// Return a pointer to the current temperature ParGridFunction. - ParGridFunction *GetCurrentTemperature() { return &Tn_gf_; } + ParGridFunction* GetCurrentTemperature() { return &Tn_gf_; } /// Return a pointer to the current density ParGridFunction. - ParGridFunction *GetCurrentDensity() { return &rn_gf_; } + ParGridFunction* GetCurrentDensity() { return &rn_gf_; } /// Return a pointer to the current total viscosity ParGridFunction. - ParGridFunction *GetCurrentViscosity() { return &visc_gf_; } + ParGridFunction* GetCurrentViscosity() { return &visc_gf_; } /// Return a pointer to the current total thermal diffusivity ParGridFunction. - ParGridFunction *GetCurrentThermalDiffusivity() { return &kappa_gf_; } + ParGridFunction* GetCurrentThermalDiffusivity() { return &kappa_gf_; } /// Return a pointer to the current total thermal diffusivity ParGridFunction. - ParGridFunction *GetCurrentThermalDiv() { return &Qt_gf_; } + ParGridFunction* GetCurrentThermalDiv() { return &Qt_gf_; } /// Rotate entries in the time step and solution history arrays. void UpdateTimestepHistory(double dt); /// Add a Dirichlet boundary condition to the temperature and Qt field. - void AddTempDirichletBC(const double &temp, Array &attr); - void AddTempDirichletBC(Coefficient *coeff, Array &attr); - void AddTempDirichletBC(ScalarFuncT *f, Array &attr); + void AddTempDirichletBC(const double& temp, Array& attr); + void AddTempDirichletBC(Coefficient* coeff, Array& attr); + void AddTempDirichletBC(ScalarFuncT* f, Array& attr); - void AddQtDirichletBC(Coefficient *coeff, Array &attr); - void AddQtDirichletBC(ScalarFuncT *f, Array &attr); + void AddQtDirichletBC(Coefficient* coeff, Array& attr); + void AddQtDirichletBC(ScalarFuncT* f, Array& attr); - void AddSpecDirichletBC(const double &spec, Array &attr); - void AddSpecDirichletBC(Coefficient *coeff, Array &attr); - void AddSpecDirichletBC(ScalarFuncT *f, Array &attr); + void AddSpecDirichletBC(const double& spec, Array& attr); + void AddSpecDirichletBC(Coefficient* coeff, Array& attr); + void AddSpecDirichletBC(ScalarFuncT* f, Array& attr); void evalSubstepNumber(); - void readTableWrapper(std::string inputPath, TableInput &result); + void readTableWrapper(std::string inputPath, TableInput& result); }; #endif // REACTINGFLOW_HPP_ diff --git a/src/reaction.cpp b/src/reaction.cpp index d119f58b..97e0351f 100644 --- a/src/reaction.cpp +++ b/src/reaction.cpp @@ -35,32 +35,32 @@ using namespace mfem; using namespace std; -MFEM_HOST_DEVICE Arrhenius::Arrhenius(const double &A, const double &b, const double &E) +MFEM_HOST_DEVICE Arrhenius::Arrhenius(const double& A, const double& b, const double& E) : Reaction(ARRHENIUS), A_(A), b_(b), E_(E) {} -MFEM_HOST_DEVICE double Arrhenius::computeRateCoefficient(const double &T_h, const double &T_e, - [[maybe_unused]] const int &dofindex, +MFEM_HOST_DEVICE double Arrhenius::computeRateCoefficient(const double& T_h, const double& T_e, + [[maybe_unused]] const int& dofindex, const bool isElectronInvolved, - [[maybe_unused]] const double *nsp) { + [[maybe_unused]] const double* nsp) { double temp = (isElectronInvolved) ? T_e : T_h; return A_ * pow(temp, b_) * exp(-E_ / UNIVERSALGASCONSTANT / temp); } -MFEM_HOST_DEVICE HoffertLien::HoffertLien(const double &A, const double &b, const double &E) +MFEM_HOST_DEVICE HoffertLien::HoffertLien(const double& A, const double& b, const double& E) : Reaction(HOFFERTLIEN), A_(A), b_(b), E_(E) {} -MFEM_HOST_DEVICE double HoffertLien::computeRateCoefficient(const double &T_h, const double &T_e, - [[maybe_unused]] const int &dofindex, +MFEM_HOST_DEVICE double HoffertLien::computeRateCoefficient(const double& T_h, const double& T_e, + [[maybe_unused]] const int& dofindex, const bool isElectronInvolved, - [[maybe_unused]] const double *nsp) { + [[maybe_unused]] const double* nsp) { double temp = (isElectronInvolved) ? T_e : T_h; double tempFactor = E_ / BOLTZMANNCONSTANT / temp; return A_ * pow(temp, b_) * (tempFactor + 2.0) * exp(-tempFactor); } -MFEM_HOST_DEVICE Tabulated::Tabulated(const TableInput &input) : Reaction(TABULATED_RXN) { +MFEM_HOST_DEVICE Tabulated::Tabulated(const TableInput& input) : Reaction(TABULATED_RXN) { switch (input.order) { case 1: { table_ = new LinearTable(input); @@ -74,10 +74,10 @@ MFEM_HOST_DEVICE Tabulated::Tabulated(const TableInput &input) : Reaction(TABULA MFEM_HOST_DEVICE Tabulated::~Tabulated() { delete table_; } -MFEM_HOST_DEVICE double Tabulated::computeRateCoefficient(const double &T_h, const double &T_e, - [[maybe_unused]] const int &dofindex, +MFEM_HOST_DEVICE double Tabulated::computeRateCoefficient(const double& T_h, const double& T_e, + [[maybe_unused]] const int& dofindex, const bool isElectronInvolved, - [[maybe_unused]] const double *nsp) { + [[maybe_unused]] const double* nsp) { double temp = (isElectronInvolved) ? T_e : T_h; return table_->eval(temp); } @@ -87,12 +87,12 @@ MFEM_HOST_DEVICE GridFunctionReaction::GridFunctionReaction(int comp) MFEM_HOST_DEVICE GridFunctionReaction::~GridFunctionReaction() {} -MFEM_HOST_DEVICE void GridFunctionReaction::setData(const double *data, int size) { +MFEM_HOST_DEVICE void GridFunctionReaction::setData(const double* data, int size) { data_ = data + comp_ * size_; size_ = size; } -void GridFunctionReaction::setGridFunction(const mfem::GridFunction &f) { +void GridFunctionReaction::setGridFunction(const mfem::GridFunction& f) { size_ = f.FESpace()->GetNDofs(); assert(comp_ < f.FESpace()->GetVDim()); assert(f.FESpace()->GetOrdering() == mfem::Ordering::byNODES); @@ -103,11 +103,11 @@ void GridFunctionReaction::setGridFunction(const mfem::GridFunction &f) { #endif } -MFEM_HOST_DEVICE double GridFunctionReaction::computeRateCoefficient([[maybe_unused]] const double &T_h, - [[maybe_unused]] const double &T_e, - const int &dofindex, +MFEM_HOST_DEVICE double GridFunctionReaction::computeRateCoefficient([[maybe_unused]] const double& T_h, + [[maybe_unused]] const double& T_e, + const int& dofindex, [[maybe_unused]] const bool isElectronInvolved, - [[maybe_unused]] const double *nsp) { + [[maybe_unused]] const double* nsp) { if (data_) { assert(dofindex < size_); return data_[dofindex]; @@ -118,9 +118,9 @@ MFEM_HOST_DEVICE double GridFunctionReaction::computeRateCoefficient([[maybe_unu #ifndef _GPU_ // Radiative decay portion: extracted from commit (de27f14) -MFEM_HOST_DEVICE RadiativeDecay::RadiativeDecay(const double _R, const std::map *_speciesMapping, - const std::vector *_speciesNames, const int *numSpecies, - const double *_reactantStoich, const double *_productStoich) +MFEM_HOST_DEVICE RadiativeDecay::RadiativeDecay(const double _R, const std::map* _speciesMapping, + const std::vector* _speciesNames, const int* numSpecies, + const double* _reactantStoich, const double* _productStoich) : Reaction(RADIATIVE_DECAY), Rcyl(_R) { rank0_ = Mpi::Root(); Lcyl = 2.0 * Rcyl; @@ -190,10 +190,10 @@ MFEM_HOST_DEVICE RadiativeDecay::RadiativeDecay(const double _R, const std::map< MFEM_HOST_DEVICE RadiativeDecay::~RadiativeDecay() {} -MFEM_HOST_DEVICE double RadiativeDecay::computeRateCoefficient(const double &T_h, const double &T_e, - const int &dofindex, +MFEM_HOST_DEVICE double RadiativeDecay::computeRateCoefficient(const double& T_h, const double& T_e, + const int& dofindex, [[maybe_unused]] const bool isElectronInvolved, - const double *nsp) { + const double* nsp) { double n_sp_u = nsp[iAr_u]; // Find the index corresponding to the correct species double n_sp_l = nsp[iAr_l]; @@ -214,8 +214,8 @@ MFEM_HOST_DEVICE double RadiativeDecay::computeRateCoefficient(const double &T_h return effAcoef; } -MFEM_HOST_DEVICE void RadiativeDecay::GetNumDensityOfInteralLevels(const int NumOfInteral_lvl, const double &n_sp, - const double &T_e, double *n_sp_internal) { +MFEM_HOST_DEVICE void RadiativeDecay::GetNumDensityOfInteralLevels(const int NumOfInteral_lvl, const double& n_sp, + const double& T_e, double* n_sp_internal) { // n_sp in [mol/m^3] is the number concentration of a lumped state/level. // Here, we evaluate the number concentration of the internal levels assuming that they // are Boltzmann distributed. @@ -235,7 +235,7 @@ MFEM_HOST_DEVICE void RadiativeDecay::GetNumDensityOfInteralLevels(const int Num } } -MFEM_HOST_DEVICE void RadiativeDecay::GetEinsteinACoefficient(const double &T_h, const double &T_e, double *effAcoef) { +MFEM_HOST_DEVICE void RadiativeDecay::GetEinsteinACoefficient(const double& T_h, const double& T_e, double* effAcoef) { for (int i_lvl = 0; i_lvl < NumOfInteral_lvl_u; i_lvl++) { for (int itrans = 0; itrans < int((*Aji)[i_lvl].size()); itrans++) { double Acoef = (*Aji)[i_lvl][itrans]; @@ -246,9 +246,9 @@ MFEM_HOST_DEVICE void RadiativeDecay::GetEinsteinACoefficient(const double &T_h, } } -MFEM_HOST_DEVICE double RadiativeDecay::escapeFactCalc(const double &n_i, const double &E_j, const double &E_i, - const double &g_j, const double &g_i, const double &A_ji, - const double &T_g) { +MFEM_HOST_DEVICE double RadiativeDecay::escapeFactCalc(const double& n_i, const double& E_j, const double& E_i, + const double& g_j, const double& g_i, const double& A_ji, + const double& T_g) { // Calculations for escape factor // i -> lower level // j -> upper level diff --git a/src/reaction.hpp b/src/reaction.hpp index d46194c5..96023a99 100644 --- a/src/reaction.hpp +++ b/src/reaction.hpp @@ -58,10 +58,10 @@ class Reaction { MFEM_HOST_DEVICE virtual ~Reaction() {} - MFEM_HOST_DEVICE virtual double computeRateCoefficient(const double &T_h, const double &T_e, - [[maybe_unused]] const int &dofindex, + MFEM_HOST_DEVICE virtual double computeRateCoefficient(const double& T_h, const double& T_e, + [[maybe_unused]] const int& dofindex, const bool isElectronInvolved = false, - [[maybe_unused]] const double *nsp = 0) { + [[maybe_unused]] const double* nsp = 0) { printf("computeRateCoefficient not implemented"); return 0; } @@ -75,14 +75,14 @@ class Arrhenius : public Reaction { double E_; public: - MFEM_HOST_DEVICE Arrhenius(const double &A, const double &b, const double &E); + MFEM_HOST_DEVICE Arrhenius(const double& A, const double& b, const double& E); MFEM_HOST_DEVICE virtual ~Arrhenius() {} - MFEM_HOST_DEVICE virtual double computeRateCoefficient(const double &T_h, const double &T_e, - [[maybe_unused]] const int &dofindex, + MFEM_HOST_DEVICE virtual double computeRateCoefficient(const double& T_h, const double& T_e, + [[maybe_unused]] const int& dofindex, const bool isElectronInvolved = false, - [[maybe_unused]] const double *nsp = 0); + [[maybe_unused]] const double* nsp = 0); }; class HoffertLien : public Reaction { @@ -97,34 +97,34 @@ class HoffertLien : public Reaction { double E_; public: - MFEM_HOST_DEVICE HoffertLien(const double &A, const double &b, const double &E); + MFEM_HOST_DEVICE HoffertLien(const double& A, const double& b, const double& E); MFEM_HOST_DEVICE virtual ~HoffertLien() {} - MFEM_HOST_DEVICE virtual double computeRateCoefficient(const double &T_h, const double &T_e, - [[maybe_unused]] const int &dofindex, + MFEM_HOST_DEVICE virtual double computeRateCoefficient(const double& T_h, const double& T_e, + [[maybe_unused]] const int& dofindex, const bool isElectronInvolved = false, - [[maybe_unused]] const double *nsp = 0); + [[maybe_unused]] const double* nsp = 0); }; class Tabulated : public Reaction { private: - TableInterpolator *table_ = NULL; + TableInterpolator* table_ = NULL; public: - MFEM_HOST_DEVICE Tabulated(const TableInput &input); + MFEM_HOST_DEVICE Tabulated(const TableInput& input); MFEM_HOST_DEVICE virtual ~Tabulated(); - MFEM_HOST_DEVICE virtual double computeRateCoefficient(const double &T_h, const double &T_e, - [[maybe_unused]] const int &dofindex, + MFEM_HOST_DEVICE virtual double computeRateCoefficient(const double& T_h, const double& T_e, + [[maybe_unused]] const int& dofindex, const bool isElectronInvolved = false, - [[maybe_unused]] const double *nsp = 0); + [[maybe_unused]] const double* nsp = 0); }; class GridFunctionReaction : public Reaction { private: - const double *data_; + const double* data_; const int comp_; int size_; @@ -133,14 +133,14 @@ class GridFunctionReaction : public Reaction { MFEM_HOST_DEVICE virtual ~GridFunctionReaction(); - void setGridFunction(const mfem::GridFunction &f); + void setGridFunction(const mfem::GridFunction& f); - MFEM_HOST_DEVICE void setData(const double *data, int size); + MFEM_HOST_DEVICE void setData(const double* data, int size); - MFEM_HOST_DEVICE virtual double computeRateCoefficient([[maybe_unused]] const double &T_h, - [[maybe_unused]] const double &T_e, const int &dofindex, + MFEM_HOST_DEVICE virtual double computeRateCoefficient([[maybe_unused]] const double& T_h, + [[maybe_unused]] const double& T_e, const int& dofindex, [[maybe_unused]] const bool isElectronInvolved = false, - [[maybe_unused]] const double *nsp = 0); + [[maybe_unused]] const double* nsp = 0); }; class RadiativeDecay : public Reaction { @@ -167,13 +167,13 @@ class RadiativeDecay : public Reaction { // Variables int NumOfInteral_lvl_u; - std::vector *E_lvl_u; - std::vector *g_lvl_u; + std::vector* E_lvl_u; + std::vector* g_lvl_u; std::vector n_sp_lvl_u; - std::vector> *Aji; + std::vector>* Aji; std::vector effAcoef_lvl; - std::vector *E_lvl_l; - std::vector *g_lvl_l; + std::vector* E_lvl_l; + std::vector* g_lvl_l; std::vector n_sp_lvl_l; int numSpecies_; @@ -287,23 +287,23 @@ class RadiativeDecay : public Reaction { // 750.59 Ar(4p'[1/2]0) -> Ar(4s'[1/2]1) 45000000.0 public: - MFEM_HOST_DEVICE RadiativeDecay(const double _R, const std::map *_speciesMapping, - const std::vector *_speciesNames, const int *numSpecies, - const double *_reactantStoich, const double *_productStoich); + MFEM_HOST_DEVICE RadiativeDecay(const double _R, const std::map* _speciesMapping, + const std::vector* _speciesNames, const int* numSpecies, + const double* _reactantStoich, const double* _productStoich); MFEM_HOST_DEVICE virtual ~RadiativeDecay(); - MFEM_HOST_DEVICE virtual double computeRateCoefficient(const double &T_h, const double &T_e, const int &dofindex, + MFEM_HOST_DEVICE virtual double computeRateCoefficient(const double& T_h, const double& T_e, const int& dofindex, [[maybe_unused]] const bool isElectronInvolved = false, - const double *nsp = 0); + const double* nsp = 0); - MFEM_HOST_DEVICE void GetEinsteinACoefficient(const double &T_h, const double &T_e, double *effAcoef); + MFEM_HOST_DEVICE void GetEinsteinACoefficient(const double& T_h, const double& T_e, double* effAcoef); - MFEM_HOST_DEVICE void GetNumDensityOfInteralLevels(const int NumOfInteral_lvl, const double &n_sp, const double &T_e, - double *n_sp_internal); + MFEM_HOST_DEVICE void GetNumDensityOfInteralLevels(const int NumOfInteral_lvl, const double& n_sp, const double& T_e, + double* n_sp_internal); - MFEM_HOST_DEVICE double escapeFactCalc(const double &n_i, const double &E_j, const double &E_i, const double &g_j, - const double &g_i, const double &A_ji, const double &T_g); + MFEM_HOST_DEVICE double escapeFactCalc(const double& n_i, const double& E_j, const double& E_i, const double& g_j, + const double& g_i, const double& A_ji, const double& T_g); }; #endif // REACTION_HPP_ diff --git a/src/rhs_operator.cpp b/src/rhs_operator.cpp index bb556b0e..498e1970 100644 --- a/src/rhs_operator.cpp +++ b/src/rhs_operator.cpp @@ -31,21 +31,21 @@ // -----------------------------------------------------------------------------------el- #include "rhs_operator.hpp" -double getRadius(const Vector &pos) { return pos[0]; } +double getRadius(const Vector& pos) { return pos[0]; } FunctionCoefficient radiusFcn(getRadius); // Implementation of class RHSoperator -RHSoperator::RHSoperator(int &_iter, const int _dim, const int &_num_equation, const int &_order, - const Equations &_eqSystem, double &_max_char_speed, IntegrationRules *_intRules, - int _intRuleType, Fluxes *_fluxClass, GasMixture *_mixture, GasMixture *d_mixture, - Chemistry *_chemistry, TransportProperties *_transport, Radiation *_radiation, - ParFiniteElementSpace *_vfes, ParFiniteElementSpace *_fes, - const precomputedIntegrationData &gpu_precomputed_data, const int &_maxIntPoints, - const int &_maxDofs, DGNonLinearForm *_A, MixedBilinearForm *_Aflux, ParMesh *_mesh, - ParGridFunction *_spaceVaryViscMult, ParGridFunction *U, ParGridFunction *_Up, - ParGridFunction *_gradUp, ParFiniteElementSpace *_gradUpfes, GradNonLinearForm *_gradUp_A, - BCintegrator *_bcIntegrator, RunConfiguration &_config, ParGridFunction *pc, - ParGridFunction *jh, ParGridFunction *distance) +RHSoperator::RHSoperator(int& _iter, const int _dim, const int& _num_equation, const int& _order, + const Equations& _eqSystem, double& _max_char_speed, IntegrationRules* _intRules, + int _intRuleType, Fluxes* _fluxClass, GasMixture* _mixture, GasMixture* d_mixture, + Chemistry* _chemistry, TransportProperties* _transport, Radiation* _radiation, + ParFiniteElementSpace* _vfes, ParFiniteElementSpace* _fes, + const precomputedIntegrationData& gpu_precomputed_data, const int& _maxIntPoints, + const int& _maxDofs, DGNonLinearForm* _A, MixedBilinearForm* _Aflux, ParMesh* _mesh, + ParGridFunction* _spaceVaryViscMult, ParGridFunction* U, ParGridFunction* _Up, + ParGridFunction* _gradUp, ParFiniteElementSpace* _gradUpfes, GradNonLinearForm* _gradUp_A, + BCintegrator* _bcIntegrator, RunConfiguration& _config, ParGridFunction* pc, + ParGridFunction* jh, ParGridFunction* distance) : TimeDependentOperator(_A->Height()), config_(_config), iter(_iter), @@ -89,7 +89,7 @@ RHSoperator::RHSoperator(int &_iter, const int _dim, const int &_num_equation, c fk.SetSize(dim_ * vfes->GetNDofs()); zk.SetSize(vfes->GetNDofs()); - const elementIndexingData &elem_data = gpu_precomputed_data_.element_indexing_data; + const elementIndexingData& elem_data = gpu_precomputed_data_.element_indexing_data; h_num_elems_of_type = elem_data.num_elems_of_type.HostRead(); Me_inv.SetSize(vfes->GetNE()); @@ -136,7 +136,7 @@ RHSoperator::RHSoperator(int &_iter, const int _dim, const int &_num_equation, c #endif // not just for axisymmetric - const FiniteElementCollection *fec = vfes->FEColl(); + const FiniteElementCollection* fec = vfes->FEColl(); dfes = new ParFiniteElementSpace(mesh, fec, dim_, Ordering::byNODES); coordsDof = new ParGridFunction(dfes); mesh->GetNodes(*coordsDof); @@ -260,11 +260,11 @@ RHSoperator::RHSoperator(int &_iter, const int _dim, const int &_num_equation, c DenseMatrix Dx(dof), Kx(dof); Dx = 0.; Kx = 0.; - ElementTransformation *Tr = vfes->GetElementTransformation(elem); + ElementTransformation* Tr = vfes->GetElementTransformation(elem); int integrationOrder = 2 * vfes->GetFE(elem)->GetOrder(); const IntegrationRule intRule = intRules->Get(vfes->GetFE(elem)->GetGeomType(), integrationOrder); for (int k = 0; k < intRule.GetNPoints(); k++) { - const IntegrationPoint &ip = intRule.IntPoint(k); + const IntegrationPoint& ip = intRule.IntPoint(k); double wk = ip.weight; Tr->SetIntPoint(&ip); @@ -340,7 +340,7 @@ RHSoperator::~RHSoperator() { if (transferGradUp.statuses != NULL) delete[] transferGradUp.statuses; } -void RHSoperator::Mult(const Vector &x, Vector &y) const { +void RHSoperator::Mult(const Vector& x, Vector& y) const { max_char_speed = 0.; // Update primite varibales @@ -409,7 +409,7 @@ void RHSoperator::Mult(const Vector &x, Vector &y) const { // 3. Multiply element-wise by the inverse mass matrices. #ifdef _GPU_ - const elementIndexingData &elem_data = gpu_precomputed_data_.element_indexing_data; + const elementIndexingData& elem_data = gpu_precomputed_data_.element_indexing_data; auto h_elem_dof_num = elem_data.dof_number.HostRead(); for (int eltype = 0; eltype < elem_data.num_elems_of_type.Size(); eltype++) { int elemOffset = 0; @@ -463,22 +463,22 @@ void RHSoperator::Mult(const Vector &x, Vector &y) const { computeMeanTimeDerivatives(y); } -void RHSoperator::copyZk2Z_gpu(Vector &z, Vector &zk, const int eq, const int dof) { +void RHSoperator::copyZk2Z_gpu(Vector& z, Vector& zk, const int eq, const int dof) { #ifdef _GPU_ - const double *d_zk = zk.Read(); - double *d_z = z.ReadWrite(); + const double* d_zk = zk.Read(); + double* d_z = z.ReadWrite(); MFEM_FORALL(n, dof, { d_z[n + eq * dof] = d_zk[n]; }); #endif } -void RHSoperator::copyDataForFluxIntegration_gpu(const Vector &z, DenseTensor &flux, Vector &fk, Vector &zk, +void RHSoperator::copyDataForFluxIntegration_gpu(const Vector& z, DenseTensor& flux, Vector& fk, Vector& zk, const int eq, const int dof, const int dim) { #ifdef _GPU_ - const double *d_flux = flux.Read(); - const double *d_z = z.Read(); - double *d_fk = fk.Write(); - double *d_zk = zk.Write(); + const double* d_flux = flux.Read(); + const double* d_z = z.Read(); + double* d_fk = fk.Write(); + double* d_zk = zk.Write(); MFEM_FORALL(n, dof, { d_zk[n] = d_z[n + eq * dof]; @@ -490,7 +490,7 @@ void RHSoperator::copyDataForFluxIntegration_gpu(const Vector &z, DenseTensor &f } // Compute the flux at solution nodes. -void RHSoperator::GetFlux(const Vector &x, DenseTensor &flux) const { +void RHSoperator::GetFlux(const Vector& x, DenseTensor& flux) const { #ifdef _GPU_ GetFlux_gpu(x, flux); @@ -499,7 +499,7 @@ void RHSoperator::GetFlux(const Vector &x, DenseTensor &flux) const { DenseMatrix xmat(x.GetData(), vfes->GetNDofs(), num_equation_); DenseMatrix f(num_equation_, dim_); - double *dataGradUp = gradUp->GetData(); + double* dataGradUp = gradUp->GetData(); const int dof = flux.SizeI(); const int dim = flux.SizeJ(); @@ -558,7 +558,7 @@ void RHSoperator::GetFlux(const Vector &x, DenseTensor &flux) const { MPI_Allreduce(&partition_max_char, &max_char_speed, 1, MPI_DOUBLE, MPI_MAX, mesh->GetComm()); } -void RHSoperator::GetFlux_gpu(const Vector &x, DenseTensor &flux) const { +void RHSoperator::GetFlux_gpu(const Vector& x, DenseTensor& flux) const { auto dataIn = x.Read(); auto d_flux = flux.Write(); @@ -566,16 +566,16 @@ void RHSoperator::GetFlux_gpu(const Vector &x, DenseTensor &flux) const { const int dim = dim_; const int num_equation = num_equation_; - const double *d_coord = coordsDof->Read(); - const double *d_gradUp = gradUp->Read(); + const double* d_coord = coordsDof->Read(); + const double* d_gradUp = gradUp->Read(); - Fluxes *d_fluxClass = fluxClass; + Fluxes* d_fluxClass = fluxClass; // This element size is divided by element polynomial order when // elSize is set, in the RHSoperator ctor auto d_elSize = elSize->Read(); - const double *d_distance = NULL; + const double* d_distance = NULL; if (distance_ != NULL) { d_distance = distance_->Read(); } @@ -620,7 +620,7 @@ void RHSoperator::GetFlux_gpu(const Vector &x, DenseTensor &flux) const { }); } -void RHSoperator::updatePrimitives(const Vector &x_in) const { +void RHSoperator::updatePrimitives(const Vector& x_in) const { #ifdef _GPU_ auto dataUp = Up->Write(); // make sure data is available in GPU auto dataIn = x_in.Read(); // make sure data is available in GPU @@ -628,7 +628,7 @@ void RHSoperator::updatePrimitives(const Vector &x_in) const { const int ndofs = vfes->GetNDofs(); const int num_equation = num_equation_; - GasMixture *d_mix = d_mixture_; + GasMixture* d_mix = d_mixture_; MFEM_FORALL(n, ndofs, { double state[gpudata::MAXEQUATIONS], @@ -639,7 +639,7 @@ void RHSoperator::updatePrimitives(const Vector &x_in) const { for (int eq = 0; eq < num_equation; eq++) dataUp[n + eq * ndofs] = prim[eq]; }); #else - double *dataUp = Up->GetData(); + double* dataUp = Up->GetData(); for (int i = 0; i < vfes->GetNDofs(); i++) { Vector iState(num_equation_); Vector primitiveState(num_equation_); @@ -650,7 +650,7 @@ void RHSoperator::updatePrimitives(const Vector &x_in) const { #endif // _GPU_ } -void RHSoperator::updateGradients(const Vector &x, const bool &primitiveUpdated) const { +void RHSoperator::updateGradients(const Vector& x, const bool& primitiveUpdated) const { // Update primite varibales if (!primitiveUpdated) updatePrimitives(x); @@ -672,18 +672,18 @@ void RHSoperator::updateGradients(const Vector &x, const bool &primitiveUpdated) #endif } -void RHSoperator::multiPlyInvers_gpu(Vector &y, Vector &z, const precomputedIntegrationData &gpu_precomputed_data, - const Vector &invMArray, const Array &posDofInvM, const int num_equation, +void RHSoperator::multiPlyInvers_gpu(Vector& y, Vector& z, const precomputedIntegrationData& gpu_precomputed_data, + const Vector& invMArray, const Array& posDofInvM, const int num_equation, const int totNumDof, const int NE, const int elemOffset, const int dof) { #ifdef _GPU_ - double *d_y = y.ReadWrite(); - const double *d_z = z.Read(); + double* d_y = y.ReadWrite(); + const double* d_z = z.Read(); - const elementIndexingData &elem_data = gpu_precomputed_data.element_indexing_data; + const elementIndexingData& elem_data = gpu_precomputed_data.element_indexing_data; auto d_elem_dofs_list = elem_data.dofs_list.Read(); auto d_elem_dof_off = elem_data.dof_offset.Read(); auto d_posDofInvM = posDofInvM.Read(); - const double *d_invM = invMArray.Read(); + const double* d_invM = invMArray.Read(); MFEM_FORALL_2D(el, NE, dof, 1, 1, { MFEM_SHARED double data[gpudata::MAXDOFS * gpudata::MAXEQUATIONS]; // MFEM_SHARED double data[216 * 20]; @@ -714,12 +714,12 @@ void RHSoperator::multiPlyInvers_gpu(Vector &y, Vector &z, const precomputedInte } void RHSoperator::allocateTransferData() { - ParFiniteElementSpace *pfes = Up->ParFESpace(); - ParMesh *mesh = pfes->GetParMesh(); + ParFiniteElementSpace* pfes = Up->ParFESpace(); + ParMesh* mesh = pfes->GetParMesh(); mesh->ExchangeFaceNbrNodes(); mesh->ExchangeFaceNbrData(); vfes->ExchangeFaceNbrData(); - ParFiniteElementSpace *gradFes = gradUp->ParFESpace(); + ParFiniteElementSpace* gradFes = gradUp->ParFESpace(); gradFes->ExchangeFaceNbrData(); const int Nshared = mesh->GetNSharedFaces(); @@ -751,9 +751,9 @@ void RHSoperator::allocateTransferData() { transferGradUp.send_data = 0.; transferGradUp.num_face_nbrs = mesh->GetNFaceNeighbors(); - MPI_Request *requestsU = new MPI_Request[2 * mesh->GetNFaceNeighbors()]; - MPI_Request *requestsUp = new MPI_Request[2 * mesh->GetNFaceNeighbors()]; - MPI_Request *requGradUp = new MPI_Request[2 * mesh->GetNFaceNeighbors()]; + MPI_Request* requestsU = new MPI_Request[2 * mesh->GetNFaceNeighbors()]; + MPI_Request* requestsUp = new MPI_Request[2 * mesh->GetNFaceNeighbors()]; + MPI_Request* requGradUp = new MPI_Request[2 * mesh->GetNFaceNeighbors()]; transferU.requests = requestsU; transferUp.requests = requestsUp; transferGradUp.requests = requGradUp; @@ -772,20 +772,20 @@ void RHSoperator::allocateTransferData() { } } -void RHSoperator::initNBlockDataTransfer(const Vector &x, ParFiniteElementSpace *pfes, - dataTransferArrays &dataTransfer) { +void RHSoperator::initNBlockDataTransfer(const Vector& x, ParFiniteElementSpace* pfes, + dataTransferArrays& dataTransfer) { if (pfes->GetFaceNbrVSize() <= 0) { return; } - ParMesh *pmesh = pfes->GetParMesh(); + ParMesh* pmesh = pfes->GetParMesh(); // face_nbr_data.SetSize(pfes->GetFaceNbrVSize()); // send_data.SetSize(pfes->send_face_nbr_ldof.Size_of_connections()); - int *send_offset = pfes->send_face_nbr_ldof.GetI(); - const int *d_send_ldof = mfem::Read(pfes->send_face_nbr_ldof.GetJMemory(), dataTransfer.send_data.Size()); - int *recv_offset = pfes->face_nbr_ldof.GetI(); + int* send_offset = pfes->send_face_nbr_ldof.GetI(); + const int* d_send_ldof = mfem::Read(pfes->send_face_nbr_ldof.GetJMemory(), dataTransfer.send_data.Size()); + int* recv_offset = pfes->face_nbr_ldof.GetI(); MPI_Comm MyComm = pfes->GetComm(); // int num_face_nbrs = pmesh->GetNFaceNeighbors(); @@ -821,7 +821,7 @@ void RHSoperator::initNBlockDataTransfer(const Vector &x, ParFiniteElementSpace } } -void RHSoperator::waitAllDataTransfer(ParFiniteElementSpace *pfes, dataTransferArrays &dataTransfer) { +void RHSoperator::waitAllDataTransfer(ParFiniteElementSpace* pfes, dataTransferArrays& dataTransfer) { if (pfes->GetFaceNbrVSize() <= 0) { return; } @@ -830,7 +830,7 @@ void RHSoperator::waitAllDataTransfer(ParFiniteElementSpace *pfes, dataTransferA MPI_Waitall(dataTransfer.num_face_nbrs, dataTransfer.requests + dataTransfer.num_face_nbrs, dataTransfer.statuses); } -void RHSoperator::computeMeanTimeDerivatives(Vector &y) const { +void RHSoperator::computeMeanTimeDerivatives(Vector& y) const { if (iter % 100 == 0) { #ifdef _GPU_ int Ndof = y.Size() / num_equation_; @@ -848,8 +848,8 @@ void RHSoperator::computeMeanTimeDerivatives(Vector &y) const { } } -void RHSoperator::meanTimeDerivatives_gpu(Vector &y, Vector &local_timeDerivatives, Vector &tmp_vec, const int &NDof, - const int &num_equation, const int &dim) { +void RHSoperator::meanTimeDerivatives_gpu(Vector& y, Vector& local_timeDerivatives, Vector& tmp_vec, const int& NDof, + const int& num_equation, const int& dim) { #ifdef _GPU_ auto d_y = y.Read(); diff --git a/src/rhs_operator.hpp b/src/rhs_operator.hpp index 35bcf14f..ef0a38f3 100644 --- a/src/rhs_operator.hpp +++ b/src/rhs_operator.hpp @@ -58,74 +58,74 @@ using namespace mfem; // DG weak form. class RHSoperator : public TimeDependentOperator { private: - const RunConfiguration &config_; - Gradients *gradients; + const RunConfiguration& config_; + Gradients* gradients; - int &iter; + int& iter; const int dim_; const int nvel; - const Equations &eqSystem; + const Equations& eqSystem; - double &max_char_speed; - const int &num_equation_; + double& max_char_speed; + const int& num_equation_; - IntegrationRules *intRules; + IntegrationRules* intRules; const int intRuleType; - Fluxes *fluxClass; + Fluxes* fluxClass; GasMixture *mixture, *d_mixture_; - TransportProperties *transport_; + TransportProperties* transport_; - ParFiniteElementSpace *vfes; - ParFiniteElementSpace *fes; + ParFiniteElementSpace* vfes; + ParFiniteElementSpace* fes; - const precomputedIntegrationData &gpu_precomputed_data_; + const precomputedIntegrationData& gpu_precomputed_data_; - const int *h_num_elems_of_type; + const int* h_num_elems_of_type; - const int &maxIntPoints; - const int &maxDofs; + const int& maxIntPoints; + const int& maxDofs; - DGNonLinearForm *A; + DGNonLinearForm* A; - MixedBilinearForm *Aflux; + MixedBilinearForm* Aflux; - ParMesh *mesh; + ParMesh* mesh; - ParFiniteElementSpace *dfes; - ParGridFunction *coordsDof; - ParGridFunction *elSize; + ParFiniteElementSpace* dfes; + ParGridFunction* coordsDof; + ParGridFunction* elSize; - ParGridFunction *spaceVaryViscMult; - linearlyVaryingVisc &linViscData; + ParGridFunction* spaceVaryViscMult; + linearlyVaryingVisc& linViscData; - Array Me_inv; - Array Me_inv_rad; + Array Me_inv; + Array Me_inv_rad; Vector invMArray; Vector invMArray_rad; Array posDofInvM; // reference to conserved varibales - ParGridFunction *U_; + ParGridFunction* U_; // reference to primitive varibales - ParGridFunction *Up; - ParGridFunction *plasma_conductivity_; - ParGridFunction *joule_heating_; + ParGridFunction* Up; + ParGridFunction* plasma_conductivity_; + ParGridFunction* joule_heating_; // gradients of primitives and associated forms&FE space - ParGridFunction *gradUp; - ParFiniteElementSpace *gradUpfes; + ParGridFunction* gradUp; + ParFiniteElementSpace* gradUpfes; // ParNonlinearForm *gradUp_A; - GradNonLinearForm *gradUp_A; + GradNonLinearForm* gradUp_A; - BCintegrator *bcIntegrator; - ParGridFunction *distance_; + BCintegrator* bcIntegrator; + ParGridFunction* distance_; - Array forcing; + Array forcing; int masaForcingIndex_ = -1; mutable DenseTensor flux; @@ -138,49 +138,49 @@ class RHSoperator : public TimeDependentOperator { void allocateTransferData(); // void GetFlux(const DenseMatrix &state, DenseTensor &flux) const; - void GetFlux(const Vector &state, DenseTensor &flux) const; + void GetFlux(const Vector& state, DenseTensor& flux) const; mutable Vector local_timeDerivatives; - void computeMeanTimeDerivatives(Vector &y) const; + void computeMeanTimeDerivatives(Vector& y) const; public: - RHSoperator(int &_iter, const int _dim, const int &_num_equation, const int &_order, const Equations &_eqSystem, - double &_max_char_speed, IntegrationRules *_intRules, int _intRuleType, Fluxes *_fluxClass, - GasMixture *_mixture, GasMixture *d_mixture, Chemistry *_chemistry, TransportProperties *_transport, - Radiation *_radiation, ParFiniteElementSpace *_vfes, ParFiniteElementSpace *_fes, - const precomputedIntegrationData &gpu_precomputed_data, const int &_maxIntPoints, const int &_maxDofs, - DGNonLinearForm *_A, MixedBilinearForm *_Aflux, ParMesh *_mesh, ParGridFunction *_spaceVaryViscMult, - ParGridFunction *U, ParGridFunction *_Up, ParGridFunction *_gradUp, ParFiniteElementSpace *_gradUpfes, - GradNonLinearForm *_gradUp_A, BCintegrator *_bcIntegrator, RunConfiguration &_config, ParGridFunction *pc, - ParGridFunction *jh, ParGridFunction *distance); - - virtual void Mult(const Vector &x, Vector &y) const; - void updatePrimitives(const Vector &x) const; - void updateGradients(const Vector &x, const bool &primitiveUpdated) const; + RHSoperator(int& _iter, const int _dim, const int& _num_equation, const int& _order, const Equations& _eqSystem, + double& _max_char_speed, IntegrationRules* _intRules, int _intRuleType, Fluxes* _fluxClass, + GasMixture* _mixture, GasMixture* d_mixture, Chemistry* _chemistry, TransportProperties* _transport, + Radiation* _radiation, ParFiniteElementSpace* _vfes, ParFiniteElementSpace* _fes, + const precomputedIntegrationData& gpu_precomputed_data, const int& _maxIntPoints, const int& _maxDofs, + DGNonLinearForm* _A, MixedBilinearForm* _Aflux, ParMesh* _mesh, ParGridFunction* _spaceVaryViscMult, + ParGridFunction* U, ParGridFunction* _Up, ParGridFunction* _gradUp, ParFiniteElementSpace* _gradUpfes, + GradNonLinearForm* _gradUp_A, BCintegrator* _bcIntegrator, RunConfiguration& _config, ParGridFunction* pc, + ParGridFunction* jh, ParGridFunction* distance); + + virtual void Mult(const Vector& x, Vector& y) const; + void updatePrimitives(const Vector& x) const; + void updateGradients(const Vector& x, const bool& primitiveUpdated) const; virtual ~RHSoperator(); - Gradients *getGradients() { return gradients; } - DenseTensor *getFlux() { return &flux; } + Gradients* getGradients() { return gradients; } + DenseTensor* getFlux() { return &flux; } - const double *getLocalTimeDerivatives() { return local_timeDerivatives.HostRead(); } - ForcingTerms *getForcingTerm(const int index) { return forcing[index]; } + const double* getLocalTimeDerivatives() { return local_timeDerivatives.HostRead(); } + ForcingTerms* getForcingTerm(const int index) { return forcing[index]; } int getMasaForcingIndex() { return masaForcingIndex_; } - static void initNBlockDataTransfer(const Vector &x, ParFiniteElementSpace *pfes, dataTransferArrays &dataTransfer); - static void waitAllDataTransfer(ParFiniteElementSpace *pfes, dataTransferArrays &dataTransfer); + static void initNBlockDataTransfer(const Vector& x, ParFiniteElementSpace* pfes, dataTransferArrays& dataTransfer); + static void waitAllDataTransfer(ParFiniteElementSpace* pfes, dataTransferArrays& dataTransfer); // GPU functions - void GetFlux_gpu(const Vector &state, DenseTensor &flux) const; - static void copyZk2Z_gpu(Vector &z, Vector &zk, const int eq, const int dof); - static void copyDataForFluxIntegration_gpu(const Vector &z, DenseTensor &flux, Vector &fk, Vector &zk, const int eq, + void GetFlux_gpu(const Vector& state, DenseTensor& flux) const; + static void copyZk2Z_gpu(Vector& z, Vector& zk, const int eq, const int dof); + static void copyDataForFluxIntegration_gpu(const Vector& z, DenseTensor& flux, Vector& fk, Vector& zk, const int eq, const int dof, const int dim); - static void multiPlyInvers_gpu(Vector &y, Vector &z, const precomputedIntegrationData &gpu_precomputed_data, - const Vector &invMArray, const Array &posDofInvM, const int num_equation, + static void multiPlyInvers_gpu(Vector& y, Vector& z, const precomputedIntegrationData& gpu_precomputed_data, + const Vector& invMArray, const Array& posDofInvM, const int num_equation, const int totNumDof, const int NE, const int elemOffset, const int dof); - static void meanTimeDerivatives_gpu(Vector &y, Vector &local_timeDerivatives, Vector &tmp_vec, const int &NDof, - const int &num_equation, const int &dim); + static void meanTimeDerivatives_gpu(Vector& y, Vector& local_timeDerivatives, Vector& tmp_vec, const int& NDof, + const int& num_equation, const int& dim); }; #endif // RHS_OPERATOR_HPP_ diff --git a/src/riemann_solver.cpp b/src/riemann_solver.cpp index e1e23d09..89dc418b 100644 --- a/src/riemann_solver.cpp +++ b/src/riemann_solver.cpp @@ -35,8 +35,8 @@ using namespace mfem; // Implementation of class RiemannSolverTPS -MFEM_HOST_DEVICE RiemannSolverTPS::RiemannSolverTPS(int _num_equation, GasMixture *_mixture, Equations _eqSystem, - Fluxes *_fluxClass, bool _useRoe, bool axisym) +MFEM_HOST_DEVICE RiemannSolverTPS::RiemannSolverTPS(int _num_equation, GasMixture* _mixture, Equations _eqSystem, + Fluxes* _fluxClass, bool _useRoe, bool axisym) : num_equation(_num_equation), mixture(_mixture), eqSystem(_eqSystem), @@ -45,12 +45,12 @@ MFEM_HOST_DEVICE RiemannSolverTPS::RiemannSolverTPS(int _num_equation, GasMixtur axisymmetric_(axisym) {} // Compute the scalar F(u).n -void RiemannSolverTPS::ComputeFluxDotN(const Vector &state, const Vector &nor, Vector &fluxN) { +void RiemannSolverTPS::ComputeFluxDotN(const Vector& state, const Vector& nor, Vector& fluxN) { ComputeFluxDotN(state.GetData(), nor.GetData(), fluxN.GetData()); } // Compute the scalar F(u).n -MFEM_HOST_DEVICE void RiemannSolverTPS::ComputeFluxDotN(const double *state, const double *nor, double *fluxN) const { +MFEM_HOST_DEVICE void RiemannSolverTPS::ComputeFluxDotN(const double* state, const double* nor, double* fluxN) const { const int dim = mixture->GetDimension(); double fluxes[gpudata::MAXEQUATIONS * gpudata::MAXDIM]; // double fluxes[5 * 3]; @@ -63,7 +63,7 @@ MFEM_HOST_DEVICE void RiemannSolverTPS::ComputeFluxDotN(const double *state, con } } -void RiemannSolverTPS::Eval(const Vector &state1, const Vector &state2, const Vector &nor, Vector &flux, bool LF) { +void RiemannSolverTPS::Eval(const Vector& state1, const Vector& state2, const Vector& nor, Vector& flux, bool LF) { if (useRoe && !LF) { Eval_Roe(state1, state2, nor, flux); } else { @@ -71,8 +71,8 @@ void RiemannSolverTPS::Eval(const Vector &state1, const Vector &state2, const Ve } } -MFEM_HOST_DEVICE void RiemannSolverTPS::Eval(const double *state1, const double *state2, const double *nor, - double *flux, bool LF) { +MFEM_HOST_DEVICE void RiemannSolverTPS::Eval(const double* state1, const double* state2, const double* nor, + double* flux, bool LF) { if (useRoe && !LF) { // TODO(kevin): implement MFEM_HOST_DEVICE Eval_Roe. printf("Roe RiemannSolverTPS is not implmented for gpu!"); @@ -82,12 +82,12 @@ MFEM_HOST_DEVICE void RiemannSolverTPS::Eval(const double *state1, const double } } -void RiemannSolverTPS::Eval_LF(const Vector &state1, const Vector &state2, const Vector &nor, Vector &flux) { +void RiemannSolverTPS::Eval_LF(const Vector& state1, const Vector& state2, const Vector& nor, Vector& flux) { Eval_LF(state1.GetData(), state2.GetData(), nor.GetData(), flux.GetData()); } -MFEM_HOST_DEVICE void RiemannSolverTPS::Eval_LF(const double *state1, const double *state2, const double *nor, - double *flux) const { +MFEM_HOST_DEVICE void RiemannSolverTPS::Eval_LF(const double* state1, const double* state2, const double* nor, + double* flux) const { const int dim = mixture->GetDimension(); const double maxE1 = mixture->ComputeMaxCharSpeed(state1); @@ -114,7 +114,7 @@ MFEM_HOST_DEVICE void RiemannSolverTPS::Eval_LF(const double *state1, const doub } // TODO(kevin): need to write for multiple species and two temperature. -void RiemannSolverTPS::Eval_Roe(const Vector &state1, const Vector &state2, const Vector &nor, Vector &flux) { +void RiemannSolverTPS::Eval_Roe(const Vector& state1, const Vector& state2, const Vector& nor, Vector& flux) { const int dim = nor.Size(); assert(!axisymmetric_); // Roe doesn't support axisymmetric yet diff --git a/src/riemann_solver.hpp b/src/riemann_solver.hpp index eb465aa9..d4f6bbeb 100644 --- a/src/riemann_solver.hpp +++ b/src/riemann_solver.hpp @@ -52,29 +52,29 @@ class RiemannSolverTPS { private: const int num_equation; - GasMixture *mixture; + GasMixture* mixture; Equations eqSystem; - Fluxes *fluxClass; + Fluxes* fluxClass; bool useRoe; const bool axisymmetric_; - void Eval_Roe(const Vector &state1, const Vector &state2, const Vector &nor, Vector &flux); + void Eval_Roe(const Vector& state1, const Vector& state2, const Vector& nor, Vector& flux); public: - MFEM_HOST_DEVICE RiemannSolverTPS(int _num_equation, GasMixture *mixture, Equations _eqSystem, Fluxes *_fluxClass, + MFEM_HOST_DEVICE RiemannSolverTPS(int _num_equation, GasMixture* mixture, Equations _eqSystem, Fluxes* _fluxClass, bool _useRoe, bool axisym); - void Eval(const Vector &state1, const Vector &state2, const Vector &nor, Vector &flux, bool LF = false); - MFEM_HOST_DEVICE void Eval(const double *state1, const double *state2, const double *nor, double *flux, + void Eval(const Vector& state1, const Vector& state2, const Vector& nor, Vector& flux, bool LF = false); + MFEM_HOST_DEVICE void Eval(const double* state1, const double* state2, const double* nor, double* flux, bool LF = false); - void ComputeFluxDotN(const Vector &state, const Vector &nor, Vector &fluxN); + void ComputeFluxDotN(const Vector& state, const Vector& nor, Vector& fluxN); - MFEM_HOST_DEVICE void ComputeFluxDotN(const double *state, const double *nor, double *fluxN) const; + MFEM_HOST_DEVICE void ComputeFluxDotN(const double* state, const double* nor, double* fluxN) const; - void Eval_LF(const Vector &state1, const Vector &state2, const Vector &nor, Vector &flux); - MFEM_HOST_DEVICE void Eval_LF(const double *state1, const double *state2, const double *nor, double *flux) const; + void Eval_LF(const Vector& state1, const Vector& state2, const Vector& nor, Vector& flux); + MFEM_HOST_DEVICE void Eval_LF(const double* state1, const double* state2, const double* nor, double* flux) const; MFEM_HOST_DEVICE bool isAxisymmetric() const { return axisymmetric_; } }; diff --git a/src/solver.hpp b/src/solver.hpp index 87c0923d..09256048 100644 --- a/src/solver.hpp +++ b/src/solver.hpp @@ -80,37 +80,37 @@ class Solver { } /// Initialize the interface - virtual void initInterface(Tps2Boltzmann &interface) { + virtual void initInterface(Tps2Boltzmann& interface) { cout << "ERROR: " << __func__ << " remains unimplemented" << endl; exit(1); } /// Push solver variables to interface - virtual void push(Tps2Boltzmann &interface) { + virtual void push(Tps2Boltzmann& interface) { cout << "ERROR: " << __func__ << " remains unimplemented" << endl; exit(1); } /// Fetch solver variables from interface - virtual void fetch(Tps2Boltzmann &interface) { + virtual void fetch(Tps2Boltzmann& interface) { cout << "ERROR: " << __func__ << " remains unimplemented" << endl; exit(1); } /// Get the mesh used by this Solver - virtual mfem::ParMesh *getMesh() const { + virtual mfem::ParMesh* getMesh() const { cout << "ERROR: " << __func__ << " remains unimplemented" << endl; exit(1); return nullptr; } - virtual const mfem::FiniteElementCollection *getFEC() const { + virtual const mfem::FiniteElementCollection* getFEC() const { cout << "ERROR: " << __func__ << " remains unimplemented" << endl; exit(1); return nullptr; } - virtual mfem::ParFiniteElementSpace *getFESpace() const { + virtual mfem::ParFiniteElementSpace* getFESpace() const { cout << "ERROR: " << __func__ << " remains unimplemented" << endl; exit(1); return nullptr; @@ -123,7 +123,7 @@ class PlasmaSolver : public Solver { virtual ~PlasmaSolver() {} /// Fetch the plasma electrical conductivity grid function - virtual mfem::ParGridFunction *getPlasmaConductivityGF() { + virtual mfem::ParGridFunction* getPlasmaConductivityGF() { cout << "ERROR: " << __func__ << " remains unimplemented" << endl; exit(1); return nullptr; @@ -136,7 +136,7 @@ class PlasmaSolver : public Solver { } /// Fetch the Joule heating grid function - virtual mfem::ParGridFunction *getJouleHeatingGF() { + virtual mfem::ParGridFunction* getJouleHeatingGF() { cout << "ERROR: " << __func__ << " remains unimplemented" << endl; exit(1); return nullptr; diff --git a/src/source_term.cpp b/src/source_term.cpp index 6565dea2..ddfd77ce 100644 --- a/src/source_term.cpp +++ b/src/source_term.cpp @@ -33,12 +33,12 @@ #include -SourceTerm::SourceTerm(const int &_dim, const int &_num_equation, const int &_order, const int &_intRuleType, - IntegrationRules *_intRules, ParFiniteElementSpace *_vfes, ParGridFunction *U, - ParGridFunction *_Up, ParGridFunction *_gradUp, - const precomputedIntegrationData &gpu_precomputed_data, RunConfiguration &_config, - GasMixture *mixture, GasMixture *d_mixture, TransportProperties *transport, Chemistry *chemistry, - Radiation *radiation, ParGridFunction *pc, ParGridFunction *distance) +SourceTerm::SourceTerm(const int& _dim, const int& _num_equation, const int& _order, const int& _intRuleType, + IntegrationRules* _intRules, ParFiniteElementSpace* _vfes, ParGridFunction* U, + ParGridFunction* _Up, ParGridFunction* _gradUp, + const precomputedIntegrationData& gpu_precomputed_data, RunConfiguration& _config, + GasMixture* mixture, GasMixture* d_mixture, TransportProperties* transport, Chemistry* chemistry, + Radiation* radiation, ParGridFunction* pc, ParGridFunction* distance) : ForcingTerms(_dim, _num_equation, _order, _intRuleType, _intRules, _vfes, U, _Up, _gradUp, gpu_precomputed_data, _config.isAxisymmetric()), mixture_(mixture), @@ -59,40 +59,40 @@ SourceTerm::SourceTerm(const int &_dim, const int &_num_equation, const int &_or SourceTerm::~SourceTerm() {} -void SourceTerm::updateTerms(mfem::Vector &in) { - double *h_pc = NULL; +void SourceTerm::updateTerms(mfem::Vector& in) { + double* h_pc = NULL; #ifdef _GPU_ - const double *h_Up = Up_->Read(); - const double *h_U = U_->Read(); - const double *h_gradUp = gradUp_->Read(); - double *h_in = in.ReadWrite(); + const double* h_Up = Up_->Read(); + const double* h_U = U_->Read(); + const double* h_gradUp = gradUp_->Read(); + double* h_in = in.ReadWrite(); - GasMixture *_mixture = d_mixture_; + GasMixture* _mixture = d_mixture_; if (plasma_conductivity_ != NULL) { h_pc = plasma_conductivity_->Write(); } #else - const double *h_Up = Up_->HostRead(); - const double *h_U = U_->HostRead(); - const double *h_gradUp = gradUp_->HostRead(); - double *h_in = in.HostReadWrite(); + const double* h_Up = Up_->HostRead(); + const double* h_U = U_->HostRead(); + const double* h_gradUp = gradUp_->HostRead(); + double* h_in = in.HostReadWrite(); - GasMixture *_mixture = mixture_; + GasMixture* _mixture = mixture_; if (plasma_conductivity_ != NULL) { h_pc = plasma_conductivity_->HostWrite(); } #endif - const double *d_distance = NULL; + const double* d_distance = NULL; if (distance_ != NULL) { d_distance = distance_->Read(); } - TransportProperties *_transport = transport_; - Chemistry *_chemistry = chemistry_; - Radiation *_radiation = radiation_; + TransportProperties* _transport = transport_; + Chemistry* _chemistry = chemistry_; + Radiation* _radiation = radiation_; const bool _enableRadiation = enableRadiation_; const int nnodes = vfes->GetNDofs(); diff --git a/src/source_term.hpp b/src/source_term.hpp index eb00d69a..514338b6 100644 --- a/src/source_term.hpp +++ b/src/source_term.hpp @@ -74,24 +74,24 @@ class SourceTerm : public ForcingTerms { bool twoTemperature_; bool enableRadiation_; - GasMixture *mixture_ = NULL; - GasMixture *d_mixture_ = NULL; - TransportProperties *transport_ = NULL; - Chemistry *chemistry_ = NULL; - Radiation *radiation_ = NULL; - ParGridFunction *plasma_conductivity_; - ParGridFunction *distance_; + GasMixture* mixture_ = NULL; + GasMixture* d_mixture_ = NULL; + TransportProperties* transport_ = NULL; + Chemistry* chemistry_ = NULL; + Radiation* radiation_ = NULL; + ParGridFunction* plasma_conductivity_; + ParGridFunction* distance_; public: - SourceTerm(const int &_dim, const int &_num_equation, const int &_order, const int &_intRuleType, - IntegrationRules *_intRules, ParFiniteElementSpace *_vfes, ParGridFunction *U, ParGridFunction *_Up, - ParGridFunction *_gradUp, const precomputedIntegrationData &gpuArrays, RunConfiguration &_config, - GasMixture *mixture, GasMixture *d_mixture, TransportProperties *transport, Chemistry *chemistry, - Radiation *radiation, ParGridFunction *pc, ParGridFunction *distance); + SourceTerm(const int& _dim, const int& _num_equation, const int& _order, const int& _intRuleType, + IntegrationRules* _intRules, ParFiniteElementSpace* _vfes, ParGridFunction* U, ParGridFunction* _Up, + ParGridFunction* _gradUp, const precomputedIntegrationData& gpuArrays, RunConfiguration& _config, + GasMixture* mixture, GasMixture* d_mixture, TransportProperties* transport, Chemistry* chemistry, + Radiation* radiation, ParGridFunction* pc, ParGridFunction* distance); ~SourceTerm(); // Terms do not need updating - virtual void updateTerms(Vector &in); + virtual void updateTerms(Vector& in); }; #endif // SOURCE_TERM_HPP_ diff --git a/src/split_flow_base.cpp b/src/split_flow_base.cpp index e4673f52..49c45f27 100644 --- a/src/split_flow_base.cpp +++ b/src/split_flow_base.cpp @@ -36,7 +36,7 @@ using namespace mfem; -ZeroFlow::ZeroFlow(mfem::ParMesh *pmesh, int vorder, TPS::Tps *tps) +ZeroFlow::ZeroFlow(mfem::ParMesh* pmesh, int vorder, TPS::Tps* tps) : pmesh_(pmesh), vorder_(vorder), dim_(pmesh->Dimension()), tpsP_(tps) { // nonzero flow option tpsP_->getInput("loMach/zeroflow/nonzero-flow", nonzero_flow_, false); diff --git a/src/split_flow_base.hpp b/src/split_flow_base.hpp index 0f93f55e..a4cf22b3 100644 --- a/src/split_flow_base.hpp +++ b/src/split_flow_base.hpp @@ -50,30 +50,30 @@ struct spongeToFlow; struct extDataToFlow; struct flowToThermoChem { - const mfem::ParGridFunction *velocity = nullptr; + const mfem::ParGridFunction* velocity = nullptr; bool swirl_supported = false; - const mfem::ParGridFunction *swirl = nullptr; + const mfem::ParGridFunction* swirl = nullptr; }; struct flowToTurbModel { - const mfem::ParGridFunction *velocity = nullptr; + const mfem::ParGridFunction* velocity = nullptr; bool swirl_supported = false; - const mfem::ParGridFunction *swirl = nullptr; - const mfem::ParGridFunction *gradS = nullptr; + const mfem::ParGridFunction* swirl = nullptr; + const mfem::ParGridFunction* gradS = nullptr; - const mfem::ParGridFunction *gradU = nullptr; - const mfem::ParGridFunction *gradV = nullptr; - const mfem::ParGridFunction *gradW = nullptr; + const mfem::ParGridFunction* gradU = nullptr; + const mfem::ParGridFunction* gradV = nullptr; + const mfem::ParGridFunction* gradW = nullptr; }; class FlowBase { protected: - const thermoChemToFlow *thermo_interface_; - const turbModelToFlow *turbModel_interface_; - const spongeToFlow *sponge_interface_; - const extDataToFlow *extData_interface_; + const thermoChemToFlow* thermo_interface_; + const turbModelToFlow* turbModel_interface_; + const spongeToFlow* sponge_interface_; + const extDataToFlow* extData_interface_; public: /// Destructor @@ -83,22 +83,22 @@ class FlowBase { virtual void step() = 0; - virtual mfem::ParGridFunction *getCurrentVelocity() = 0; - virtual mfem::ParGridFunction *getCurrentVelocityGradientU() { return nullptr; } - virtual mfem::ParGridFunction *getCurrentVelocityGradientV() { return nullptr; } - virtual mfem::ParGridFunction *getCurrentVelocityGradientW() { return nullptr; } + virtual mfem::ParGridFunction* getCurrentVelocity() = 0; + virtual mfem::ParGridFunction* getCurrentVelocityGradientU() { return nullptr; } + virtual mfem::ParGridFunction* getCurrentVelocityGradientV() { return nullptr; } + virtual mfem::ParGridFunction* getCurrentVelocityGradientW() { return nullptr; } - void initializeFromThermoChem(thermoChemToFlow *thermo) { thermo_interface_ = thermo; } - void initializeFromTurbModel(turbModelToFlow *turbModel) { turbModel_interface_ = turbModel; } - void initializeFromSponge(spongeToFlow *sponge) { sponge_interface_ = sponge; } - void initializeFromExtData(extDataToFlow *extData) { extData_interface_ = extData; } + void initializeFromThermoChem(thermoChemToFlow* thermo) { thermo_interface_ = thermo; } + void initializeFromTurbModel(turbModelToFlow* turbModel) { turbModel_interface_ = turbModel; } + void initializeFromSponge(spongeToFlow* sponge) { sponge_interface_ = sponge; } + void initializeFromExtData(extDataToFlow* extData) { extData_interface_ = extData; } virtual void initializeOperators() {} - virtual void initializeIO(IODataOrganizer &io) const {} - virtual void initializeViz(mfem::ParaViewDataCollection &pvdc) const {} - virtual void initializeStats(Averaging &average, IODataOrganizer &io, bool continuation) const {} - virtual void computeDissipation(Averaging &average, const int iter) {} + virtual void initializeIO(IODataOrganizer& io) const {} + virtual void initializeViz(mfem::ParaViewDataCollection& pvdc) const {} + virtual void initializeStats(Averaging& average, IODataOrganizer& io, bool continuation) const {} + virtual void computeDissipation(Averaging& average, const int iter) {} virtual void setup() {} @@ -108,7 +108,7 @@ class FlowBase { * Provides a hook for derived classes to pass a set of header * strings that will be printed to the screen */ - virtual void screenHeader(std::vector &header) const { header.resize(0); } + virtual void screenHeader(std::vector& header) const { header.resize(0); } /** * @brief Values for screen dump @@ -116,25 +116,25 @@ class FlowBase { * Provides values that will be printed to the screen at user requested * frequency (as often as each iteration). */ - virtual void screenValues(std::vector &values) { values.resize(0); } + virtual void screenValues(std::vector& values) { values.resize(0); } /// Interface object, provides fields necessary for the thermochemistry model flowToThermoChem toThermoChem_interface_; /// Get interface provided by thermo model - const thermoChemToFlow *getThermoInterface() const { return thermo_interface_; } + const thermoChemToFlow* getThermoInterface() const { return thermo_interface_; } /// Interface object, provides fields necessary for the turbulence model flowToTurbModel toTurbModel_interface_; /// Get interface provided by thermo model - const turbModelToFlow *getTurbModelInterface() const { return turbModel_interface_; } + const turbModelToFlow* getTurbModelInterface() const { return turbModel_interface_; } /// Get interface provided by sponge - const spongeToFlow *getSpongeInterface() const { return sponge_interface_; } + const spongeToFlow* getSpongeInterface() const { return sponge_interface_; } /// Get interface provided by external data - const extDataToFlow *getExtDataInterface() const { return extData_interface_; } + const extDataToFlow* getExtDataInterface() const { return extData_interface_; } /** * @brief A hook to evaluate L2 norm of error @@ -154,21 +154,21 @@ class ZeroFlow final : public FlowBase { // Options bool nonzero_flow_; - mfem::ParMesh *pmesh_; + mfem::ParMesh* pmesh_; const int vorder_; const int dim_; // Options-related structures - TPS::Tps *tpsP_ = nullptr; + TPS::Tps* tpsP_ = nullptr; - mfem::FiniteElementCollection *fec_ = nullptr; - mfem::ParFiniteElementSpace *fes_ = nullptr; - mfem::ParGridFunction *velocity_ = nullptr; - mfem::ParGridFunction *zero_ = nullptr; + mfem::FiniteElementCollection* fec_ = nullptr; + mfem::ParFiniteElementSpace* fes_ = nullptr; + mfem::ParGridFunction* velocity_ = nullptr; + mfem::ParGridFunction* zero_ = nullptr; public: /// Constructor - ZeroFlow(mfem::ParMesh *pmesh, int vorder, TPS::Tps *tps = nullptr); + ZeroFlow(mfem::ParMesh* pmesh, int vorder, TPS::Tps* tps = nullptr); /// Destructor ~ZeroFlow() final; @@ -178,7 +178,7 @@ class ZeroFlow final : public FlowBase { /// Velocity is always zero, so nothing to do void step() {} - mfem::ParGridFunction *getCurrentVelocity() final { return velocity_; } + mfem::ParGridFunction* getCurrentVelocity() final { return velocity_; } }; #endif // SPLIT_FLOW_BASE_HPP_ diff --git a/src/sponge_base.cpp b/src/sponge_base.cpp index 34df5361..2d5bad9d 100644 --- a/src/sponge_base.cpp +++ b/src/sponge_base.cpp @@ -34,7 +34,7 @@ using namespace mfem; -UnitySponge::UnitySponge(ParMesh *pmesh, int sorder) : pmesh_(pmesh), sorder_(sorder) {} +UnitySponge::UnitySponge(ParMesh* pmesh, int sorder) : pmesh_(pmesh), sorder_(sorder) {} UnitySponge::~UnitySponge() { delete multiplier_; diff --git a/src/sponge_base.hpp b/src/sponge_base.hpp index 5603b15e..05a104cf 100644 --- a/src/sponge_base.hpp +++ b/src/sponge_base.hpp @@ -42,7 +42,7 @@ * viscousSponge to the flow. */ struct spongeToFlow { - const mfem::ParGridFunction *visc_multiplier = nullptr; + const mfem::ParGridFunction* visc_multiplier = nullptr; }; /** @@ -50,7 +50,7 @@ struct spongeToFlow { * visc sponge to the thermo chem model. */ struct spongeToThermoChem { - const mfem::ParGridFunction *diff_multiplier = nullptr; + const mfem::ParGridFunction* diff_multiplier = nullptr; }; /** @@ -58,7 +58,7 @@ struct spongeToThermoChem { * visc sponge to the turbulence model. */ struct spongeToTurbModel { - const mfem::ParGridFunction *diff_multiplier = nullptr; + const mfem::ParGridFunction* diff_multiplier = nullptr; }; /** @@ -83,7 +83,7 @@ class SpongeBase { /** * @brief Hook to let derived classes register visualization fields with ParaViewDataCollection */ - virtual void initializeViz(mfem::ParaViewDataCollection &pvdc) {} + virtual void initializeViz(mfem::ParaViewDataCollection& pvdc) {} /** * @brief Take a single time step @@ -109,13 +109,13 @@ class SpongeBase { */ class UnitySponge final : public SpongeBase { protected: - mfem::ParMesh *pmesh_; + mfem::ParMesh* pmesh_; const int sorder_; - mfem::FiniteElementCollection *fec_ = nullptr; - mfem::ParFiniteElementSpace *fes_ = nullptr; + mfem::FiniteElementCollection* fec_ = nullptr; + mfem::ParFiniteElementSpace* fes_ = nullptr; - mfem::ParGridFunction *multiplier_ = nullptr; + mfem::ParGridFunction* multiplier_ = nullptr; public: /** @@ -127,7 +127,7 @@ class UnitySponge final : public SpongeBase { * @param sorder The polynomial order for scalar fields * @param viscMult The (unity) value to use for enhancing viscosity */ - UnitySponge(mfem::ParMesh *pmesh, int sorder); + UnitySponge(mfem::ParMesh* pmesh, int sorder); /// Free the interface fields and support objects ~UnitySponge() final; diff --git a/src/static_rans.cpp b/src/static_rans.cpp index 3449b6cf..520a6f76 100644 --- a/src/static_rans.cpp +++ b/src/static_rans.cpp @@ -37,7 +37,7 @@ using namespace mfem; -StaticRans::StaticRans(ParMesh *pmesh, const Array &partitioning, int order, TPS::Tps *tps) +StaticRans::StaticRans(ParMesh* pmesh, const Array& partitioning, int order, TPS::Tps* tps) : pmesh_(pmesh), order_(order) { // tps->getInput("loMach/static-rans/visc-file", visc_file_); @@ -66,7 +66,7 @@ void StaticRans::initializeSelf() { nut_field_ = new GridFunctionCoefficient(extData_interface_->NuTdata); } -void StaticRans::initializeViz(mfem::ParaViewDataCollection &pvdc) { pvdc.RegisterField("muT", mut_); } +void StaticRans::initializeViz(mfem::ParaViewDataCollection& pvdc) { pvdc.RegisterField("muT", mut_); } void StaticRans::step() { mut_->ProjectCoefficient(*nut_field_); diff --git a/src/static_rans.hpp b/src/static_rans.hpp index a3d864e6..332c8b87 100644 --- a/src/static_rans.hpp +++ b/src/static_rans.hpp @@ -47,24 +47,24 @@ */ class StaticRans : public TurbModelBase { protected: - mfem::ParMesh *pmesh_ = nullptr; + mfem::ParMesh* pmesh_ = nullptr; int order_; int dim_; bool axisym_; - mfem::FiniteElementCollection *sfec_ = nullptr; - mfem::ParFiniteElementSpace *sfes_ = nullptr; + mfem::FiniteElementCollection* sfec_ = nullptr; + mfem::ParFiniteElementSpace* sfes_ = nullptr; - mfem::ParGridFunction *mut_ = nullptr; - mfem::GridFunctionCoefficient *nut_field_ = nullptr; + mfem::ParGridFunction* mut_ = nullptr; + mfem::GridFunctionCoefficient* nut_field_ = nullptr; - ExternalDataBase *extData_ = nullptr; + ExternalDataBase* extData_ = nullptr; public: /// Constructor // StaticRans(mfem::Mesh *smesh, mfem::ParMesh *pmesh, const mfem::Array &partitioning, int order, TPS::Tps // *tps); - StaticRans(mfem::ParMesh *pmesh, const mfem::Array &partitioning, int order, TPS::Tps *tps); + StaticRans(mfem::ParMesh* pmesh, const mfem::Array& partitioning, int order, TPS::Tps* tps); /// Destructor virtual ~StaticRans(); @@ -79,7 +79,7 @@ class StaticRans : public TurbModelBase { /** * @brief Add eddy viscosity and distance function to the visualization output */ - void initializeViz(mfem::ParaViewDataCollection &pvdc) override; + void initializeViz(mfem::ParaViewDataCollection& pvdc) override; /** * @brief Initialize the eddy viscosity. @@ -98,7 +98,7 @@ class StaticRans : public TurbModelBase { */ void setup() override {} - mfem::ParGridFunction *getCurrentEddyViscosity() override { return mut_; } + mfem::ParGridFunction* getCurrentEddyViscosity() override { return mut_; } }; #endif // STATIC_RANS_HPP_ diff --git a/src/table.cpp b/src/table.cpp index 325c68b6..f6fd1fe4 100644 --- a/src/table.cpp +++ b/src/table.cpp @@ -36,8 +36,8 @@ using namespace std; -MFEM_HOST_DEVICE TableInterpolator::TableInterpolator(const int &Ndata, const double *xdata, const double *fdata, - const bool &xLogScale, const bool &fLogScale) +MFEM_HOST_DEVICE TableInterpolator::TableInterpolator(const int& Ndata, const double* xdata, const double* fdata, + const bool& xLogScale, const bool& fLogScale) : Ndata_(Ndata), xLogScale_(xLogScale), fLogScale_(fLogScale) { assert((xdata != NULL) && (fdata != NULL)); for (int k = 0; k < Ndata_; k++) { @@ -49,7 +49,7 @@ MFEM_HOST_DEVICE TableInterpolator::TableInterpolator(const int &Ndata, const do // Find the data interval where the input value lies within. // The algorithm is a copy version of std::upper_bound, which is similar to binary search. // This has O(log_2(Ndata)) complexity. -MFEM_HOST_DEVICE int TableInterpolator::findInterval(const double &xEval) { +MFEM_HOST_DEVICE int TableInterpolator::findInterval(const double& xEval) { int count = Ndata_; int first = 0; int it, step; @@ -76,7 +76,7 @@ MFEM_HOST_DEVICE int TableInterpolator::findInterval(const double &xEval) { //////// Linear interpolation ////////////////////////////////////////////////////// -MFEM_HOST_DEVICE LinearTable::LinearTable(const TableInput &input) +MFEM_HOST_DEVICE LinearTable::LinearTable(const TableInput& input) : TableInterpolator(input.Ndata, input.xdata, input.fdata, input.xLogScale, input.fLogScale) { assert(input.order == 1); for (int k = 0; k < Ndata_ - 1; k++) { @@ -87,7 +87,7 @@ MFEM_HOST_DEVICE LinearTable::LinearTable(const TableInput &input) } } -MFEM_HOST_DEVICE double LinearTable::eval(const double &xEval) { +MFEM_HOST_DEVICE double LinearTable::eval(const double& xEval) { int index = findInterval(xEval); double xt = (xLogScale_) ? log(xEval) : xEval; double ft = a_[index] + b_[index] * xt; @@ -96,7 +96,7 @@ MFEM_HOST_DEVICE double LinearTable::eval(const double &xEval) { return ft; } -MFEM_HOST_DEVICE double LinearTable::eval_x(const double &xEval) { +MFEM_HOST_DEVICE double LinearTable::eval_x(const double& xEval) { const int index = findInterval(xEval); const double xt = (xLogScale_) ? log(xEval) : xEval; const double xt_xt = (xLogScale_) ? 1. / xEval : 1.0; @@ -174,7 +174,7 @@ GslTableInterpolator2D::GslTableInterpolator2D(std::string plato_file, int xcol, assert(fcol >= 0 && fcol < ncol); // open plato file - FILE *table_input_file; + FILE* table_input_file; table_input_file = fopen(plato_file.c_str(), "r"); if (!table_input_file) { std::cout << "Unable to open " << plato_file << std::endl; @@ -191,7 +191,7 @@ GslTableInterpolator2D::GslTableInterpolator2D(std::string plato_file, int xcol, // read data // char stmp; - double *ftmp = new double[ncol]; + double* ftmp = new double[ncol]; for (unsigned int jj = 0; jj < ny_; ++jj) { for (unsigned int ii = 0; ii < nx_; ++ii) { ierr = 0; @@ -226,8 +226,8 @@ GslTableInterpolator2D::GslTableInterpolator2D(std::string plato_file, int xcol, * Initializes data using input pointers. Allocates and initializes * all required GSL objects. */ -GslTableInterpolator2D::GslTableInterpolator2D(unsigned int nx, unsigned int ny, const double *xdata, - const double *ydata, const double *fdata) +GslTableInterpolator2D::GslTableInterpolator2D(unsigned int nx, unsigned int ny, const double* xdata, + const double* ydata, const double* fdata) : TableInterpolator2D(nx, ny), itype_(gsl_interp2d_bilinear) { for (unsigned int i = 0; i < nx_; ++i) { xdata_[i] = xdata[i]; diff --git a/src/table.hpp b/src/table.hpp index 6a9ef012..de6a41ec 100644 --- a/src/table.hpp +++ b/src/table.hpp @@ -49,12 +49,12 @@ class TableInterface { public: MFEM_HOST_DEVICE TableInterface() {} MFEM_HOST_DEVICE virtual ~TableInterface() {} - MFEM_HOST_DEVICE virtual double eval(const double &xEval) = 0; - MFEM_HOST_DEVICE virtual double eval(const double &xEval, const double &yEval) = 0; + MFEM_HOST_DEVICE virtual double eval(const double& xEval) = 0; + MFEM_HOST_DEVICE virtual double eval(const double& xEval, const double& yEval) = 0; - MFEM_HOST_DEVICE virtual double eval_x(const double &xEval) = 0; - MFEM_HOST_DEVICE virtual double eval_x(const double &xEval, const double &yEval) = 0; - MFEM_HOST_DEVICE virtual double eval_y(const double &xEval, const double &yEval) = 0; + MFEM_HOST_DEVICE virtual double eval_x(const double& xEval) = 0; + MFEM_HOST_DEVICE virtual double eval_x(const double& xEval, const double& yEval) = 0; + MFEM_HOST_DEVICE virtual double eval_y(const double& xEval, const double& yEval) = 0; }; class TableInterpolator : public TableInterface { @@ -67,12 +67,12 @@ class TableInterpolator : public TableInterface { bool fLogScale_; public: - MFEM_HOST_DEVICE TableInterpolator(const int &Ndata, const double *xdata, const double *fdata, const bool &xLogScale, - const bool &fLogScale); + MFEM_HOST_DEVICE TableInterpolator(const int& Ndata, const double* xdata, const double* fdata, const bool& xLogScale, + const bool& fLogScale); MFEM_HOST_DEVICE virtual ~TableInterpolator() {} - MFEM_HOST_DEVICE int findInterval(const double &xEval); + MFEM_HOST_DEVICE int findInterval(const double& xEval); }; ////////////////////////////////////////////////////// @@ -86,17 +86,17 @@ class LinearTable : public TableInterpolator { double b_[gpudata::MAXTABLE]; public: - MFEM_HOST_DEVICE LinearTable(const TableInput &input); + MFEM_HOST_DEVICE LinearTable(const TableInput& input); MFEM_HOST_DEVICE virtual ~LinearTable() {} - MFEM_HOST_DEVICE double eval(const double &xEval) final; - MFEM_HOST_DEVICE double eval(const double &xEval, const double &yEval) final { return eval(xEval); } + MFEM_HOST_DEVICE double eval(const double& xEval) final; + MFEM_HOST_DEVICE double eval(const double& xEval, const double& yEval) final { return eval(xEval); } - MFEM_HOST_DEVICE double eval_x(const double &xEval) final; - MFEM_HOST_DEVICE double eval_x(const double &xEval, const double &yEval) final { return eval_x(xEval); } + MFEM_HOST_DEVICE double eval_x(const double& xEval) final; + MFEM_HOST_DEVICE double eval_x(const double& xEval, const double& yEval) final { return eval_x(xEval); } - MFEM_HOST_DEVICE double eval_y(const double &xEval, const double &yEval) final { + MFEM_HOST_DEVICE double eval_y(const double& xEval, const double& yEval) final { assert(false); return nan(""); } @@ -109,9 +109,9 @@ class LinearTable : public TableInterpolator { */ class TableInterpolator2D : public TableInterface { protected: - double *xdata_; - double *ydata_; - double *fdata_; + double* xdata_; + double* ydata_; + double* fdata_; unsigned int nx_; unsigned int ny_; @@ -124,29 +124,29 @@ class TableInterpolator2D : public TableInterface { /// Reset size and re-allocate data arrays MFEM_HOST_DEVICE void resize(unsigned int nx, unsigned int ny); - MFEM_HOST_DEVICE double eval(const double &xEval) final { + MFEM_HOST_DEVICE double eval(const double& xEval) final { assert(false); return nan(""); } - MFEM_HOST_DEVICE double eval_x(const double &xEval) final { + MFEM_HOST_DEVICE double eval_x(const double& xEval) final { assert(false); return nan(""); } /// Interpolate fcn to (x,y) --- must be implemented in derived class - MFEM_HOST_DEVICE double eval(const double &x, const double &y) override { + MFEM_HOST_DEVICE double eval(const double& x, const double& y) override { printf("TableInterpolator2D not initialized!"); return -1.0; } /// Derivative of interpolant wrt x - MFEM_HOST_DEVICE double eval_x(const double &x, const double &y) override { + MFEM_HOST_DEVICE double eval_x(const double& x, const double& y) override { printf("TableInterpolator2D not initialized!"); return -1.0; } /// Derivative of interpolant wrt y - MFEM_HOST_DEVICE double eval_y(const double &x, const double &y) override { + MFEM_HOST_DEVICE double eval_y(const double& x, const double& y) override { printf("TableInterpolator2D not initialized!"); return -1.0; } @@ -164,26 +164,26 @@ class TableInterpolator2D : public TableInterface { */ class GslTableInterpolator2D : public TableInterpolator2D { protected: - const gsl_interp2d_type *itype_; - gsl_spline2d *spline_; + const gsl_interp2d_type* itype_; + gsl_spline2d* spline_; gsl_interp_accel *xacc_, *yacc_; public: GslTableInterpolator2D(std::string plato_file, int xcol, int ycol, int fcol, int ncol = 11); - GslTableInterpolator2D(unsigned int nx, unsigned int ny, const double *xdata, const double *ydata, - const double *fdata); + GslTableInterpolator2D(unsigned int nx, unsigned int ny, const double* xdata, const double* ydata, + const double* fdata); virtual ~GslTableInterpolator2D(); /// Interpolate function to (x,y) using GSL - virtual double eval(const double &x, const double &y) { return gsl_spline2d_eval(spline_, x, y, xacc_, yacc_); } + virtual double eval(const double& x, const double& y) { return gsl_spline2d_eval(spline_, x, y, xacc_, yacc_); } /// Derivative of GSL interpolant wrt x - virtual double eval_x(const double &x, const double &y) { + virtual double eval_x(const double& x, const double& y) { return gsl_spline2d_eval_deriv_x(spline_, x, y, xacc_, yacc_); } /// Derivative of GSL interpolant wrt y - virtual double eval_y(const double &x, const double &y) { + virtual double eval_y(const double& x, const double& y) { return gsl_spline2d_eval_deriv_y(spline_, x, y, xacc_, yacc_); } }; diff --git a/src/thermo_chem_base.cpp b/src/thermo_chem_base.cpp index 121a7862..2868568b 100644 --- a/src/thermo_chem_base.cpp +++ b/src/thermo_chem_base.cpp @@ -36,10 +36,10 @@ using namespace mfem; -ConstantPropertyThermoChem::ConstantPropertyThermoChem(ParMesh *pmesh, int sorder, double rho, double mu) +ConstantPropertyThermoChem::ConstantPropertyThermoChem(ParMesh* pmesh, int sorder, double rho, double mu) : pmesh_(pmesh), sorder_(sorder), rho_(rho), mu_(mu) {} -ConstantPropertyThermoChem::ConstantPropertyThermoChem(ParMesh *pmesh, int sorder, TPS::Tps *tps) +ConstantPropertyThermoChem::ConstantPropertyThermoChem(ParMesh* pmesh, int sorder, TPS::Tps* tps) : pmesh_(pmesh), sorder_(sorder) { assert(tps != nullptr); tps->getInput("loMach/constprop/rho", rho_, 1.0); diff --git a/src/thermo_chem_base.hpp b/src/thermo_chem_base.hpp index e2edbc65..1a05f33f 100644 --- a/src/thermo_chem_base.hpp +++ b/src/thermo_chem_base.hpp @@ -53,9 +53,9 @@ struct extDataToThermoChem; * thermochemistry model to the flow. */ struct thermoChemToFlow { - const mfem::ParGridFunction *density = nullptr; - const mfem::ParGridFunction *viscosity = nullptr; - const mfem::ParGridFunction *thermal_divergence = nullptr; + const mfem::ParGridFunction* density = nullptr; + const mfem::ParGridFunction* viscosity = nullptr; + const mfem::ParGridFunction* thermal_divergence = nullptr; }; /** @@ -63,8 +63,8 @@ struct thermoChemToFlow { * thermochemistry model to the flow. */ struct thermoChemToTurbModel { - const mfem::ParGridFunction *density = nullptr; - const mfem::ParGridFunction *viscosity = nullptr; + const mfem::ParGridFunction* density = nullptr; + const mfem::ParGridFunction* viscosity = nullptr; }; /** @@ -74,15 +74,15 @@ struct thermoChemToTurbModel { */ class ThermoChemModelBase { protected: - const flowToThermoChem *flow_interface_; - const turbModelToThermoChem *turbModel_interface_; - const spongeToThermoChem *sponge_interface_; - const extDataToThermoChem *extData_interface_; + const flowToThermoChem* flow_interface_; + const turbModelToThermoChem* turbModel_interface_; + const spongeToThermoChem* sponge_interface_; + const extDataToThermoChem* extData_interface_; double thermo_pressure_; - mfem::ParGridFunction *plasma_conductivity_gf_ = nullptr; - mfem::ParGridFunction *joule_heating_gf_ = nullptr; + mfem::ParGridFunction* plasma_conductivity_gf_ = nullptr; + mfem::ParGridFunction* joule_heating_gf_ = nullptr; public: /// Destructor @@ -118,17 +118,17 @@ class ThermoChemModelBase { /** * @brief Hook to let derived classes register restart fields with the IODataOrganizer. */ - virtual void initializeIO(IODataOrganizer &io) {} + virtual void initializeIO(IODataOrganizer& io) {} /** * @brief Hook to let derived classes register visualization fields with ParaViewDataCollection */ - virtual void initializeViz(mfem::ParaViewDataCollection &pvdc) {} + virtual void initializeViz(mfem::ParaViewDataCollection& pvdc) {} /** * @brief Hook to let averaging register fields and restart fields with the IODataOrganizer. */ - virtual void initializeStats(Averaging &average, IODataOrganizer &io, bool continuation) {} + virtual void initializeStats(Averaging& average, IODataOrganizer& io, bool continuation) {} /** * @brief Header strings for screen dump @@ -136,7 +136,7 @@ class ThermoChemModelBase { * Provides a hook for derived classes to pass a set of header * strings that will be printed to the screen */ - virtual void screenHeader(std::vector &header) const { header.resize(0); } + virtual void screenHeader(std::vector& header) const { header.resize(0); } /** * @brief Values for screen dump @@ -144,7 +144,7 @@ class ThermoChemModelBase { * Provides values that will be printed to the screen at user requested * frequency (as often as each iteration). */ - virtual void screenValues(std::vector &values) { values.resize(0); } + virtual void screenValues(std::vector& values) { values.resize(0); } /** * @brief Initialize data from the flow class @@ -152,10 +152,10 @@ class ThermoChemModelBase { * Initialize fields that the thermochemistry model needs from the * flow. */ - void initializeFromFlow(flowToThermoChem *flow) { flow_interface_ = flow; } + void initializeFromFlow(flowToThermoChem* flow) { flow_interface_ = flow; } /// Get interface provided by flow model - const flowToThermoChem *getFlowInterface() const { return flow_interface_; } + const flowToThermoChem* getFlowInterface() const { return flow_interface_; } /// Interface object, provides fields necessary for the flow thermoChemToFlow toFlow_interface_; @@ -166,10 +166,10 @@ class ThermoChemModelBase { * Initialize fields that the thermochemistry model needs from the * turbulence model. */ - void initializeFromTurbModel(turbModelToThermoChem *turbModel) { turbModel_interface_ = turbModel; } + void initializeFromTurbModel(turbModelToThermoChem* turbModel) { turbModel_interface_ = turbModel; } /// Get interface provided by turb model - const turbModelToThermoChem *getTurbModelInterface() const { return turbModel_interface_; } + const turbModelToThermoChem* getTurbModelInterface() const { return turbModel_interface_; } /// Interface object, provides fields necessary for the turbModel thermoChemToTurbModel toTurbModel_interface_; @@ -180,20 +180,20 @@ class ThermoChemModelBase { * Initialize fields that the thermochemistry model needs from the * sponge class. */ - void initializeFromSponge(spongeToThermoChem *sponge) { sponge_interface_ = sponge; } + void initializeFromSponge(spongeToThermoChem* sponge) { sponge_interface_ = sponge; } /// Get interface provided by flow model - const spongeToThermoChem *getSpongeInterface() const { return sponge_interface_; } + const spongeToThermoChem* getSpongeInterface() const { return sponge_interface_; } - void initializeFromExtData(extDataToThermoChem *extData) { extData_interface_ = extData; } - const extDataToThermoChem *getExtDataInterface() const { return extData_interface_; } + void initializeFromExtData(extDataToThermoChem* extData) { extData_interface_ = extData; } + const extDataToThermoChem* getExtDataInterface() const { return extData_interface_; } /// Return thermodynamic pressure for restarts double GetThermoPressure() { return thermo_pressure_; } - void SetThermoPressure(double &Po) { thermo_pressure_ = Po; } + void SetThermoPressure(double& Po) { thermo_pressure_ = Po; } - mfem::ParGridFunction *getPlasmaConductivityGF() { return plasma_conductivity_gf_; } - mfem::ParGridFunction *getJouleHeatingGF() { return joule_heating_gf_; } + mfem::ParGridFunction* getPlasmaConductivityGF() { return plasma_conductivity_gf_; } + mfem::ParGridFunction* getJouleHeatingGF() { return joule_heating_gf_; } virtual void evaluatePlasmaConductivityGF() { std::cout << "ERROR: " << __func__ << " remains unimplemented" << std::endl; exit(1); @@ -206,17 +206,17 @@ class ThermoChemModelBase { */ class ConstantPropertyThermoChem final : public ThermoChemModelBase { protected: - mfem::ParMesh *pmesh_; + mfem::ParMesh* pmesh_; const int sorder_; double rho_; double mu_; - mfem::FiniteElementCollection *fec_ = nullptr; - mfem::ParFiniteElementSpace *fes_ = nullptr; + mfem::FiniteElementCollection* fec_ = nullptr; + mfem::ParFiniteElementSpace* fes_ = nullptr; - mfem::ParGridFunction *density_ = nullptr; - mfem::ParGridFunction *viscosity_ = nullptr; - mfem::ParGridFunction *thermal_divergence_ = nullptr; + mfem::ParGridFunction* density_ = nullptr; + mfem::ParGridFunction* viscosity_ = nullptr; + mfem::ParGridFunction* thermal_divergence_ = nullptr; public: /** @@ -229,7 +229,7 @@ class ConstantPropertyThermoChem final : public ThermoChemModelBase { * @param rho The (constant) value to use for the density * @param mu The (constant) value to use for the viscosity */ - ConstantPropertyThermoChem(mfem::ParMesh *pmesh, int sorder, double rho, double mu); + ConstantPropertyThermoChem(mfem::ParMesh* pmesh, int sorder, double rho, double mu); /** * @brief Constructor @@ -238,7 +238,7 @@ class ConstantPropertyThermoChem final : public ThermoChemModelBase { * @param sorder The polynomial order for scalar fields * @param tps Pointer to Tps object so that rho and mu can be obtained from input file */ - ConstantPropertyThermoChem(mfem::ParMesh *pmesh, int sorder, TPS::Tps *tps); + ConstantPropertyThermoChem(mfem::ParMesh* pmesh, int sorder, TPS::Tps* tps); /// Free the interface fields and support objects ~ConstantPropertyThermoChem() final; diff --git a/src/tomboulides.cpp b/src/tomboulides.cpp index 607f413b..dd06440a 100644 --- a/src/tomboulides.cpp +++ b/src/tomboulides.cpp @@ -46,16 +46,16 @@ using namespace mfem; /// forward declarations -static double radius(const Vector &pos) { return pos[0]; } +static double radius(const Vector& pos) { return pos[0]; } FunctionCoefficient radius_coeff(radius); -static double negativeRadius(const Vector &pos) { return -pos[0]; } +static double negativeRadius(const Vector& pos) { return -pos[0]; } FunctionCoefficient negative_radius_coeff(negativeRadius); /** * @brief Helper function to remove mean from a vector */ -void Orthogonalize(Vector &v, const ParFiniteElementSpace *pfes) { +void Orthogonalize(Vector& v, const ParFiniteElementSpace* pfes) { double loc_sum = v.Sum(); double global_sum = 0.0; int loc_size = v.Size(); @@ -67,8 +67,8 @@ void Orthogonalize(Vector &v, const ParFiniteElementSpace *pfes) { v -= global_sum / static_cast(global_size); } -Tomboulides::Tomboulides(mfem::ParMesh *pmesh, int vorder, int porder, temporalSchemeCoefficients &coeff, - mfem::ParGridFunction *gridScale, TPS::Tps *tps) +Tomboulides::Tomboulides(mfem::ParMesh* pmesh, int vorder, int porder, temporalSchemeCoefficients& coeff, + mfem::ParGridFunction* gridScale, TPS::Tps* tps) : gll_rules(0, Quadrature1D::GaussLobatto), tpsP_(tps), pmesh_(pmesh), @@ -131,7 +131,7 @@ Tomboulides::Tomboulides(mfem::ParMesh *pmesh, int vorder, int porder, temporalS tps->getInput("loMach/tomboulides/hsolve-maxIters", hsolve_max_iter_, default_max_iter_); tps->getInput("loMach/tomboulides/msolve-maxIters", mass_inverse_max_iter_, default_max_iter_); - // artificial diffusion (SUPG) + // artificial diffusion (SUPG) full-streamwise stab is fine for RANS, but not for LES tpsP_->getInput("loMach/tomboulides/streamwise-stabilization", sw_stab_, false); tpsP_->getInput("loMach/tomboulides/Reh_factor", Reh_factor_, 0.5); tpsP_->getInput("loMach/tomboulides/Reh_offset", Reh_offset_, 1.0); @@ -568,7 +568,7 @@ void Tomboulides::initializeSelf() { int iFace = vfes_->GetMesh()->GetBdrElementFaceIndex(bel); // FaceElementTransformations *Tr = vfes_->GetMesh()->GetBdrFaceTransformations(bel); // ElementTransformation *Tr = vfes_->GetMesh()->GetBdrElementTransformation(bel); - ElementTransformation *Tr = vfes_->GetMesh()->GetFaceTransformation(iFace); + ElementTransformation* Tr = vfes_->GetMesh()->GetFaceTransformation(iFace); // changing order from 1 const IntegrationRule ir = gll_rules.Get(Tr->GetGeometryType(), 2 * vorder_ - 1); @@ -961,8 +961,8 @@ void Tomboulides::initializeOperators() { // Gauss-Lobatto quad pts correspond to the Gauss-Lobatto nodes. // For most terms this will result in an under-integration, but it // has the nice consequence that the mass matrix is diagonal. - const IntegrationRule &ir_ni_v = gll_rules.Get(vfes_->GetFE(0)->GetGeomType(), 2 * vorder_ - 1); - const IntegrationRule &ir_ni_p = gll_rules.Get(pfes_->GetFE(0)->GetGeomType(), 2 * porder_ - 1); + const IntegrationRule& ir_ni_v = gll_rules.Get(vfes_->GetFE(0)->GetGeomType(), 2 * vorder_ - 1); + const IntegrationRule& ir_ni_p = gll_rules.Get(pfes_->GetFE(0)->GetGeomType(), 2 * porder_ - 1); // Empty array, use where we want operators without BCs Array empty; @@ -978,7 +978,7 @@ void Tomboulides::initializeOperators() { // Variable coefficient Laplacian: \nabla \cdot ( (1/\rho) \nabla ) L_iorho_form_ = new ParBilinearForm(pfes_); - auto *L_iorho_blfi = new DiffusionIntegrator(*iorho_coeff_); + auto* L_iorho_blfi = new DiffusionIntegrator(*iorho_coeff_); if (numerical_integ_) { L_iorho_blfi->SetIntRule(&ir_ni_p); } @@ -1020,8 +1020,8 @@ void Tomboulides::initializeOperators() { // Forcing term in the velocity equation: du/dt + ... = ... + f forcing_form_ = new ParLinearForm(vfes_); - for (auto &force : forcing_terms_) { - auto *fdlfi = new VectorDomainLFIntegrator(*force.coeff); + for (auto& force : forcing_terms_) { + auto* fdlfi = new VectorDomainLFIntegrator(*force.coeff); if (numerical_integ_) { fdlfi->SetIntRule(&ir_ni_v); } @@ -1032,7 +1032,7 @@ void Tomboulides::initializeOperators() { // Coefficient is -1 so we can just add to rhs nlcoeff_.constant = -1.0; Nconv_form_ = new ParNonlinearForm(vfes_); - VectorConvectionNLFIntegrator *nlc_nlfi; + VectorConvectionNLFIntegrator* nlc_nlfi; if (axisym_) { nlc_nlfi = new VectorConvectionNLFIntegrator(negative_radius_coeff); } else { @@ -1053,7 +1053,7 @@ void Tomboulides::initializeOperators() { // pressure space and the Q space are the same. Need to assert this // somehow. Ms_form_ = new ParBilinearForm(pfes_); - MassIntegrator *ms_blfi; + MassIntegrator* ms_blfi; if (axisym_) { ms_blfi = new MassIntegrator(radius_coeff); } else { @@ -1070,7 +1070,7 @@ void Tomboulides::initializeOperators() { Ms_form_->FormSystemMatrix(empty, Ms_op_); Ms_rho_form_ = new ParBilinearForm(pfes_); - MassIntegrator *msr_blfi; + MassIntegrator* msr_blfi; if (axisym_) { msr_blfi = new MassIntegrator(*rad_rho_coeff_); } else { @@ -1085,7 +1085,7 @@ void Tomboulides::initializeOperators() { // Mass matrix for the velocity Mv_form_ = new ParBilinearForm(vfes_); - VectorMassIntegrator *mv_blfi; + VectorMassIntegrator* mv_blfi; if (axisym_) { mv_blfi = new VectorMassIntegrator(radius_coeff); } else { @@ -1103,7 +1103,7 @@ void Tomboulides::initializeOperators() { // Mass matrix (density weighted) for the velocity Mv_rho_form_ = new ParBilinearForm(vfes_); - VectorMassIntegrator *mvr_blfi; + VectorMassIntegrator* mvr_blfi; if (axisym_) { mvr_blfi = new VectorMassIntegrator(*rad_rho_coeff_); } else { @@ -1119,7 +1119,7 @@ void Tomboulides::initializeOperators() { // Vector mass matrix for streamwise stability of the velocity gradients if (sw_stab_) { Mv_stab_form_ = new ParBilinearForm(vfes_); - VectorMassIntegrator *mvs_blfi; + VectorMassIntegrator* mvs_blfi; mvs_blfi = new VectorMassIntegrator(*supg_coeff_); if (numerical_integ_) { mvs_blfi->SetIntRule(&ir_ni_v); @@ -1136,9 +1136,9 @@ void Tomboulides::initializeOperators() { Mv_inv_pc_ = new OperatorJacobiSmoother(diag_pa, empty); } else { Mv_inv_pc_ = new HypreSmoother(*Mv_op_.As()); - dynamic_cast(Mv_inv_pc_)->SetType(smoother_type_, smoother_passes_); - dynamic_cast(Mv_inv_pc_)->SetSOROptions(smoother_relax_weight_, smoother_relax_omega_); - dynamic_cast(Mv_inv_pc_) + dynamic_cast(Mv_inv_pc_)->SetType(smoother_type_, smoother_passes_); + dynamic_cast(Mv_inv_pc_)->SetSOROptions(smoother_relax_weight_, smoother_relax_omega_); + dynamic_cast(Mv_inv_pc_) ->SetPolyOptions(smoother_poly_order_, smoother_poly_fraction_, smoother_eig_est_); } Mv_inv_ = new CGSolver(vfes_->GetComm()); @@ -1151,9 +1151,9 @@ void Tomboulides::initializeOperators() { Mv_inv_->SetMaxIter(mass_inverse_max_iter_); Mv_rho_inv_pc_ = new HypreSmoother(*Mv_rho_op_.As()); - dynamic_cast(Mv_rho_inv_pc_)->SetType(smoother_type_, smoother_passes_); - dynamic_cast(Mv_rho_inv_pc_)->SetSOROptions(smoother_relax_weight_, smoother_relax_omega_); - dynamic_cast(Mv_rho_inv_pc_) + dynamic_cast(Mv_rho_inv_pc_)->SetType(smoother_type_, smoother_passes_); + dynamic_cast(Mv_rho_inv_pc_)->SetSOROptions(smoother_relax_weight_, smoother_relax_omega_); + dynamic_cast(Mv_rho_inv_pc_) ->SetPolyOptions(smoother_poly_order_, smoother_poly_fraction_, smoother_eig_est_); Mv_rho_inv_ = new CGSolver(vfes_->GetComm()); @@ -1167,7 +1167,7 @@ void Tomboulides::initializeOperators() { // Divergence operator D_form_ = new ParMixedBilinearForm(vfes_, pfes_); - VectorDivergenceIntegrator *vd_mblfi; + VectorDivergenceIntegrator* vd_mblfi; if (axisym_) { vd_mblfi = new VectorDivergenceIntegrator(radius_coeff); } else { @@ -1186,7 +1186,7 @@ void Tomboulides::initializeOperators() { // Gradient G_form_ = new ParMixedBilinearForm(pfes_, vfes_); // auto *g_mblfi = new GradientIntegrator(); - GradientIntegrator *g_mblfi; + GradientIntegrator* g_mblfi; if (axisym_) { g_mblfi = new GradientIntegrator(radius_coeff); } else { @@ -1204,8 +1204,8 @@ void Tomboulides::initializeOperators() { // Helmholtz Hv_form_ = new ParBilinearForm(vfes_); - VectorMassIntegrator *hmv_blfi; - VectorDiffusionIntegrator *hdv_blfi; + VectorMassIntegrator* hmv_blfi; + VectorDiffusionIntegrator* hdv_blfi; if (axisym_) { hmv_blfi = new VectorMassIntegrator(*rad_rho_over_dt_coeff_); @@ -1221,7 +1221,7 @@ void Tomboulides::initializeOperators() { Hv_form_->AddDomainIntegrator(hmv_blfi); Hv_form_->AddDomainIntegrator(hdv_blfi); - VectorDiffusionIntegrator *shdv_blfi; + VectorDiffusionIntegrator* shdv_blfi; if (sw_stab_) { // auto *shdv_blfi = new VectorDiffusionIntegrator(*supg_coeff_); shdv_blfi = new VectorDiffusionIntegrator(*supg_coeff_); @@ -1232,7 +1232,7 @@ void Tomboulides::initializeOperators() { } if (axisym_) { - auto *hfv_blfi = new VectorMassIntegrator(*visc_forcing_coeff_); + auto* hfv_blfi = new VectorMassIntegrator(*visc_forcing_coeff_); Hv_form_->AddDomainIntegrator(hfv_blfi); } Hv_form_->Assemble(); @@ -1240,9 +1240,9 @@ void Tomboulides::initializeOperators() { // Helmholtz solver Hv_inv_pc_ = new HypreSmoother(*Hv_op_.As()); - dynamic_cast(Hv_inv_pc_)->SetType(smoother_type_, smoother_passes_); - dynamic_cast(Hv_inv_pc_)->SetSOROptions(hsmoother_relax_weight_, hsmoother_relax_omega_); - dynamic_cast(Hv_inv_pc_) + dynamic_cast(Hv_inv_pc_)->SetType(smoother_type_, smoother_passes_); + dynamic_cast(Hv_inv_pc_)->SetSOROptions(hsmoother_relax_weight_, hsmoother_relax_omega_); + dynamic_cast(Hv_inv_pc_) ->SetPolyOptions(smoother_poly_order_, smoother_poly_fraction_, smoother_eig_est_); Hv_inv_ = new CGSolver(vfes_->GetComm()); @@ -1256,7 +1256,7 @@ void Tomboulides::initializeOperators() { // pp_div_bdr_form_ = new ParLinearForm(pfes_); - BoundaryNormalLFIntegrator *ppd_bnlfi; + BoundaryNormalLFIntegrator* ppd_bnlfi; if (axisym_) { rad_pp_div_coeff_ = new ScalarVectorProductCoefficient(radius_coeff, *pp_div_coeff_); ppd_bnlfi = new BoundaryNormalLFIntegrator(*rad_pp_div_coeff_); @@ -1269,8 +1269,8 @@ void Tomboulides::initializeOperators() { pp_div_bdr_form_->AddBoundaryIntegrator(ppd_bnlfi, vel_ess_attr_); u_bdr_form_ = new ParLinearForm(pfes_); - for (auto &vel_dbc : vel_dbcs_) { - BoundaryNormalLFIntegrator *ubdr_bnlfi; + for (auto& vel_dbc : vel_dbcs_) { + BoundaryNormalLFIntegrator* ubdr_bnlfi; if (axisym_) { rad_vel_coeff_.push_back(new ScalarVectorProductCoefficient(radius_coeff, *vel_dbc.coeff)); ubdr_bnlfi = new BoundaryNormalLFIntegrator(*rad_vel_coeff_[rad_vel_coeff_.size() - 1]); @@ -1284,7 +1284,7 @@ void Tomboulides::initializeOperators() { } S_poisson_form_ = new ParLinearForm(vfes_); - VectorDomainLFIntegrator *s_rhs_dlfi; + VectorDomainLFIntegrator* s_rhs_dlfi; if (axisym_) { s_rhs_dlfi = new VectorDomainLFIntegrator(*rad_S_poisson_coeff_); } else { @@ -1296,7 +1296,7 @@ void Tomboulides::initializeOperators() { S_poisson_form_->AddDomainIntegrator(s_rhs_dlfi); S_mom_form_ = new ParLinearForm(vfes_); - VectorDomainLFIntegrator *s_mom_dlfi; + VectorDomainLFIntegrator* s_mom_dlfi; if (axisym_) { s_mom_dlfi = new VectorDomainLFIntegrator(*rad_S_mom_coeff_); } else { @@ -1309,14 +1309,14 @@ void Tomboulides::initializeOperators() { if (axisym_) { Faxi_poisson_form_ = new ParLinearForm(pfes_); - auto *f_rhs_dlfi = new DomainLFIntegrator(*pp_div_rad_comp_coeff_); + auto* f_rhs_dlfi = new DomainLFIntegrator(*pp_div_rad_comp_coeff_); if (numerical_integ_) { f_rhs_dlfi->SetIntRule(&ir_ni_p); } Faxi_poisson_form_->AddDomainIntegrator(f_rhs_dlfi); ur_conv_axi_form_ = new ParLinearForm(vfes_); - auto *urca_dlfi = new VectorDomainLFIntegrator(*ur_conv_forcing_coeff_); + auto* urca_dlfi = new VectorDomainLFIntegrator(*ur_conv_forcing_coeff_); if (numerical_integ_) { urca_dlfi->SetIntRule(&ir_ni_v); } @@ -1324,11 +1324,11 @@ void Tomboulides::initializeOperators() { // Helmholtz Hs_form_ = new ParBilinearForm(pfes_); - auto *hms_blfi = new MassIntegrator(*rad_rho_over_dt_coeff_); - auto *hds_blfi = new DiffusionIntegrator(*rad_mu_coeff_); - auto *hfs_blfi = new MassIntegrator(*mu_over_rad_coeff_); + auto* hms_blfi = new MassIntegrator(*rad_rho_over_dt_coeff_); + auto* hds_blfi = new DiffusionIntegrator(*rad_mu_coeff_); + auto* hfs_blfi = new MassIntegrator(*mu_over_rad_coeff_); - DiffusionIntegrator *shds_blfi; + DiffusionIntegrator* shds_blfi; if (sw_stab_) { // auto *shds_blfi = new DiffusionIntegrator(*supg_coeff_); shds_blfi = new DiffusionIntegrator(*supg_coeff_); @@ -1343,9 +1343,9 @@ void Tomboulides::initializeOperators() { Hs_form_->FormSystemMatrix(swirl_ess_tdof_, Hs_op_); Hs_inv_pc_ = new HypreSmoother(*Hs_op_.As()); - dynamic_cast(Hs_inv_pc_)->SetType(smoother_type_, smoother_passes_); - dynamic_cast(Hs_inv_pc_)->SetSOROptions(hsmoother_relax_weight_, hsmoother_relax_omega_); - dynamic_cast(Hs_inv_pc_) + dynamic_cast(Hs_inv_pc_)->SetType(smoother_type_, smoother_passes_); + dynamic_cast(Hs_inv_pc_)->SetSOROptions(hsmoother_relax_weight_, hsmoother_relax_omega_); + dynamic_cast(Hs_inv_pc_) ->SetPolyOptions(smoother_poly_order_, smoother_poly_fraction_, smoother_eig_est_); Hs_inv_ = new CGSolver(pfes_->GetComm()); @@ -1361,18 +1361,18 @@ void Tomboulides::initializeOperators() { As_form_ = new ParBilinearForm(pfes_); // NB: -1 so that sign is correct on rhs - auto *as_blfi = new ConvectionIntegrator(*rad_rhou_coeff_, -1.0); + auto* as_blfi = new ConvectionIntegrator(*rad_rhou_coeff_, -1.0); As_form_->AddDomainIntegrator(as_blfi); As_form_->Assemble(); As_form_->FormSystemMatrix(empty, As_op_); rho_ur_ut_form_ = new ParLinearForm(pfes_); - auto *rurut_dlfi = new DomainLFIntegrator(*rho_ur_ut_coeff_); + auto* rurut_dlfi = new DomainLFIntegrator(*rho_ur_ut_coeff_); rho_ur_ut_form_->AddDomainIntegrator(rurut_dlfi); swirl_var_viscosity_form_ = new ParLinearForm(pfes_); - auto *svv_dlfi = new DomainLFIntegrator(*swirl_var_viscosity_coeff_); + auto* svv_dlfi = new DomainLFIntegrator(*swirl_var_viscosity_coeff_); swirl_var_viscosity_form_->AddDomainIntegrator(svv_dlfi); } @@ -1388,7 +1388,7 @@ void Tomboulides::initializeOperators() { evaluateVelocityGradient(); } -void Tomboulides::initializeIO(IODataOrganizer &io) const { +void Tomboulides::initializeIO(IODataOrganizer& io) const { io.registerIOFamily("Velocity", "/velocity", u_curr_gf_, true, true, vfec_); io.registerIOVar("/velocity", "x-comp", 0); if (dim_ >= 2) io.registerIOVar("/velocity", "y-comp", 1); @@ -1400,7 +1400,7 @@ void Tomboulides::initializeIO(IODataOrganizer &io) const { } } -void Tomboulides::initializeViz(mfem::ParaViewDataCollection &pvdc) const { +void Tomboulides::initializeViz(mfem::ParaViewDataCollection& pvdc) const { pvdc.RegisterField("velocity", u_curr_gf_); pvdc.RegisterField("pressure", p_gf_); if (axisym_) { @@ -1408,7 +1408,7 @@ void Tomboulides::initializeViz(mfem::ParaViewDataCollection &pvdc) const { } } -void Tomboulides::initializeStats(Averaging &average, IODataOrganizer &io, bool continuation) const { +void Tomboulides::initializeStats(Averaging& average, IODataOrganizer& io, bool continuation) const { if (average.ComputeMean()) { // fields for averaging average.registerField(std::string("velocity"), u_curr_gf_, true, 0, dim_); @@ -1451,7 +1451,7 @@ void Tomboulides::initializeStats(Averaging &average, IODataOrganizer &io, bool } } -void Tomboulides::computeDissipation(Averaging &average, const int iter) { +void Tomboulides::computeDissipation(Averaging& average, const int iter) { if (average.ComputeMean()) { int sample_interval = average.GetSamplesInterval(); int sample_start = average.GetStartMean(); @@ -1485,12 +1485,12 @@ void Tomboulides::computeDissipation(Averaging &average, const int iter) { if (dim_ == 3) gradW_gf_->SetFromTrueDofs(gradW_); // const double *dmu = (*thermo_interface_->viscosity).HostRead(); - const double *dmu = mu_total_gf_->HostRead(); - const double *drho = (*thermo_interface_->density).HostRead(); - const double *dGradU = gradU_gf_->HostRead(); - const double *dGradV = gradV_gf_->HostRead(); - const double *dGradW = gradW_gf_->HostRead(); - double *depsi = epsi_gf_->HostReadWrite(); + const double* dmu = mu_total_gf_->HostRead(); + const double* drho = (*thermo_interface_->density).HostRead(); + const double* dGradU = gradU_gf_->HostRead(); + const double* dGradV = gradV_gf_->HostRead(); + const double* dGradW = gradW_gf_->HostRead(); + double* depsi = epsi_gf_->HostReadWrite(); int Sdof = epsi_gf_->Size(); for (int dof = 0; dof < Sdof; dof++) { @@ -1632,7 +1632,7 @@ void Tomboulides::step() { // ------------------------------------------------------------------------ // Evaluate the forcing at the end of the time step - for (auto &force : forcing_terms_) { + for (auto& force : forcing_terms_) { force.coeff->SetTime(time + dt); } forcing_form_->Assemble(); @@ -1862,7 +1862,7 @@ void Tomboulides::step() { Orthogonalize(resp_vec_, pfes_); } - for (auto &pres_dbc : pres_dbcs_) { + for (auto& pres_dbc : pres_dbcs_) { p_gf_->ProjectBdrCoefficient(*pres_dbc.coeff, pres_dbc.attr); } @@ -1913,7 +1913,7 @@ void Tomboulides::step() { // rho * vstar / dt term Mv_rho_op_->AddMult(ustar_vec_, resu_vec_); - for (auto &vel_dbc : vel_dbcs_) { + for (auto& vel_dbc : vel_dbcs_) { u_next_gf_->ProjectBdrCoefficient(*vel_dbc.coeff, vel_dbc.attr); } @@ -2006,7 +2006,7 @@ void Tomboulides::step() { Ms_rho_op_->AddMult(utheta_next_vec_, resp_vec_); // Apply swirl Dirichlet BC - for (auto &swirl_dbc : swirl_dbcs_) { + for (auto& swirl_dbc : swirl_dbcs_) { utheta_next_gf_->ProjectBdrCoefficient(*swirl_dbc.coeff, swirl_dbc.attr); } @@ -2046,15 +2046,15 @@ double Tomboulides::computeL2Error() const { return err; } -void Tomboulides::meanZero(ParGridFunction &v) { +void Tomboulides::meanZero(ParGridFunction& v) { // Make sure not to recompute the inner product linear form every // application. if (mass_lform_ == nullptr) { one_coeff_.constant = 1.0; mass_lform_ = new ParLinearForm(v.ParFESpace()); - auto *dlfi = new DomainLFIntegrator(one_coeff_); + auto* dlfi = new DomainLFIntegrator(one_coeff_); if (numerical_integ_) { - const IntegrationRule &ir_ni = gll_rules.Get(vfes_->GetFE(0)->GetGeomType(), 2 * vorder_ - 1); + const IntegrationRule& ir_ni = gll_rules.Get(vfes_->GetFE(0)->GetGeomType(), 2 * vorder_ - 1); dlfi->SetIntRule(&ir_ni); } mass_lform_->AddDomainIntegrator(dlfi); @@ -2078,7 +2078,7 @@ void Tomboulides::updateTotalViscosity() { } /// Add a Dirichlet boundary condition to the velocity field -void Tomboulides::addVelDirichletBC(const Vector &u, Array &attr) { +void Tomboulides::addVelDirichletBC(const Vector& u, Array& attr) { assert(u.Size() == dim_); vel_dbcs_.emplace_back(attr, new VectorConstantCoefficient(u)); for (int i = 0; i < attr.Size(); ++i) { @@ -2089,7 +2089,7 @@ void Tomboulides::addVelDirichletBC(const Vector &u, Array &attr) { } } -void Tomboulides::addVelDirichletBC(VectorCoefficient *coeff, Array &attr) { +void Tomboulides::addVelDirichletBC(VectorCoefficient* coeff, Array& attr) { vel_dbcs_.emplace_back(attr, coeff); for (int i = 0; i < attr.Size(); ++i) { if (attr[i] == 1) { @@ -2099,16 +2099,16 @@ void Tomboulides::addVelDirichletBC(VectorCoefficient *coeff, Array &attr) } } -void Tomboulides::addVelDirichletBC(void (*f)(const Vector &, double, Vector &), Array &attr) { +void Tomboulides::addVelDirichletBC(void (*f)(const Vector&, double, Vector&), Array& attr) { addVelDirichletBC(new VectorFunctionCoefficient(dim_, f), attr); } -void Tomboulides::addVelDirichletBC(std::function f, Array &attr) { +void Tomboulides::addVelDirichletBC(std::function f, Array& attr) { addVelDirichletBC(new VectorFunctionCoefficient(dim_, f), attr); } /// Add a Dirichlet boundary condition to the pressure field. -void Tomboulides::addPresDirichletBC(double p, Array &attr) { +void Tomboulides::addPresDirichletBC(double p, Array& attr) { pres_dbcs_.emplace_back(attr, new ConstantCoefficient(p)); for (int i = 0; i < attr.Size(); ++i) { if (attr[i] == 1) { @@ -2118,7 +2118,7 @@ void Tomboulides::addPresDirichletBC(double p, Array &attr) { } } -void Tomboulides::addSwirlDirichletBC(double ut, mfem::Array &attr) { +void Tomboulides::addSwirlDirichletBC(double ut, mfem::Array& attr) { assert(axisym_); swirl_dbcs_.emplace_back(attr, new ConstantCoefficient(ut)); for (int i = 0; i < attr.Size(); ++i) { @@ -2129,7 +2129,7 @@ void Tomboulides::addSwirlDirichletBC(double ut, mfem::Array &attr) { } } -void Tomboulides::addSwirlDirichletBC(Coefficient *coeff, Array &attr) { +void Tomboulides::addSwirlDirichletBC(Coefficient* coeff, Array& attr) { swirl_dbcs_.emplace_back(attr, coeff); for (int i = 0; i < attr.Size(); ++i) { if (attr[i] == 1) { @@ -2139,7 +2139,7 @@ void Tomboulides::addSwirlDirichletBC(Coefficient *coeff, Array &attr) { } } -void Tomboulides::addSwirlDirichletBC(double (*f)(const Vector &, double), Array &attr) { +void Tomboulides::addSwirlDirichletBC(double (*f)(const Vector&, double), Array& attr) { addSwirlDirichletBC(new FunctionCoefficient(f), attr); } @@ -2151,7 +2151,7 @@ double Tomboulides::maxVelocityMagnitude() { int n_scalar_dof = u_vec_.Size() / dim_; - const double *vel = u_vec_.HostRead(); + const double* vel = u_vec_.HostRead(); for (int i = 0; i < n_scalar_dof; i++) { const double ux = vel[i]; diff --git a/src/tomboulides.hpp b/src/tomboulides.hpp index 87af56bc..a816a32c 100644 --- a/src/tomboulides.hpp +++ b/src/tomboulides.hpp @@ -54,11 +54,11 @@ struct temporalSchemeCoefficients; /// Container for forcing terms to be added to velocity equation class ForcingTerm_T { public: - ForcingTerm_T(mfem::Array attr, mfem::VectorCoefficient *coeff) : attr(attr), coeff(coeff) { + ForcingTerm_T(mfem::Array attr, mfem::VectorCoefficient* coeff) : attr(attr), coeff(coeff) { // nothing here } - ForcingTerm_T(ForcingTerm_T &&obj) { + ForcingTerm_T(ForcingTerm_T&& obj) { // Deep copy the attribute array this->attr = obj.attr; @@ -70,7 +70,7 @@ class ForcingTerm_T { ~ForcingTerm_T() { delete coeff; } mfem::Array attr; - mfem::VectorCoefficient *coeff; + mfem::VectorCoefficient* coeff; }; class Tomboulides final : public FlowBase { @@ -168,10 +168,10 @@ class Tomboulides final : public FlowBase { mfem::IntegrationRules gll_rules; // Options-related structures - TPS::Tps *tpsP_ = nullptr; + TPS::Tps* tpsP_ = nullptr; // Basic info needed to create fem spaces - mfem::ParMesh *pmesh_; + mfem::ParMesh* pmesh_; const int vorder_; const int porder_; const int dim_; @@ -180,7 +180,7 @@ class Tomboulides final : public FlowBase { // Coefficients necessary to take a time step (including dt). // Assumed to be externally managed and determined, so just get a // reference here. - const temporalSchemeCoefficients &coeff_; + const temporalSchemeCoefficients& coeff_; // streamwise-stabilization bool sw_stab_; @@ -194,8 +194,8 @@ class Tomboulides final : public FlowBase { // Object used to build forcing mfem::Vector gravity_; - mfem::VectorConstantCoefficient *gravity_vec_; - mfem::ScalarVectorProductCoefficient *rad_gravity_vec_; + mfem::VectorConstantCoefficient* gravity_vec_; + mfem::ScalarVectorProductCoefficient* rad_gravity_vec_; std::vector forcing_terms_; // initial condition holders @@ -217,128 +217,128 @@ class Tomboulides final : public FlowBase { mfem::Array swirl_ess_tdof_; /// Velocity FEM objects and fields - mfem::FiniteElementCollection *vfec_ = nullptr; - mfem::ParFiniteElementSpace *vfes_ = nullptr; - mfem::FiniteElementCollection *sfec_ = nullptr; - mfem::ParFiniteElementSpace *sfes_ = nullptr; - mfem::ParGridFunction *u_curr_gf_ = nullptr; - mfem::ParGridFunction *u_next_gf_ = nullptr; - mfem::ParGridFunction *curl_gf_ = nullptr; - mfem::ParGridFunction *curlcurl_gf_ = nullptr; - mfem::ParGridFunction *resu_gf_ = nullptr; - mfem::ParGridFunction *pp_div_gf_ = nullptr; - mfem::ParGridFunction *gradU_gf_ = nullptr; - mfem::ParGridFunction *gradV_gf_ = nullptr; - mfem::ParGridFunction *gradW_gf_ = nullptr; - mfem::ParGridFunction *gradS_gf_ = nullptr; + mfem::FiniteElementCollection* vfec_ = nullptr; + mfem::ParFiniteElementSpace* vfes_ = nullptr; + mfem::FiniteElementCollection* sfec_ = nullptr; + mfem::ParFiniteElementSpace* sfes_ = nullptr; + mfem::ParGridFunction* u_curr_gf_ = nullptr; + mfem::ParGridFunction* u_next_gf_ = nullptr; + mfem::ParGridFunction* curl_gf_ = nullptr; + mfem::ParGridFunction* curlcurl_gf_ = nullptr; + mfem::ParGridFunction* resu_gf_ = nullptr; + mfem::ParGridFunction* pp_div_gf_ = nullptr; + mfem::ParGridFunction* gradU_gf_ = nullptr; + mfem::ParGridFunction* gradV_gf_ = nullptr; + mfem::ParGridFunction* gradW_gf_ = nullptr; + mfem::ParGridFunction* gradS_gf_ = nullptr; // mfem::ParGridFunction *buffer_uInlet_ = nullptr; - mfem::VectorGridFunctionCoefficient *velocity_field_ = nullptr; - mfem::GridFunctionCoefficient *swirl_field_ = nullptr; - mfem::ParGridFunction *epsi_gf_ = nullptr; + mfem::VectorGridFunctionCoefficient* velocity_field_ = nullptr; + mfem::GridFunctionCoefficient* swirl_field_ = nullptr; + mfem::ParGridFunction* epsi_gf_ = nullptr; /// Pressure FEM objects and fields - mfem::FiniteElementCollection *pfec_ = nullptr; - mfem::ParFiniteElementSpace *pfes_ = nullptr; - mfem::ParGridFunction *p_gf_ = nullptr; - mfem::ParGridFunction *iorho_gf_ = nullptr; - mfem::ParGridFunction *resp_gf_ = nullptr; - mfem::ParGridFunction *pp_div_rad_comp_gf_ = nullptr; + mfem::FiniteElementCollection* pfec_ = nullptr; + mfem::ParFiniteElementSpace* pfes_ = nullptr; + mfem::ParGridFunction* p_gf_ = nullptr; + mfem::ParGridFunction* iorho_gf_ = nullptr; + mfem::ParGridFunction* resp_gf_ = nullptr; + mfem::ParGridFunction* pp_div_rad_comp_gf_ = nullptr; - mfem::ParGridFunction *gridScale_gf_ = nullptr; + mfem::ParGridFunction* gridScale_gf_ = nullptr; /// Swirl - mfem::ParGridFunction *utheta_gf_ = nullptr; - mfem::ParGridFunction *utheta_next_gf_ = nullptr; - mfem::ParGridFunction *u_next_rad_comp_gf_ = nullptr; + mfem::ParGridFunction* utheta_gf_ = nullptr; + mfem::ParGridFunction* utheta_next_gf_ = nullptr; + mfem::ParGridFunction* u_next_rad_comp_gf_ = nullptr; /// "total" viscosity, including fluid, turbulence, sponge - mfem::ParGridFunction *mu_total_gf_ = nullptr; + mfem::ParGridFunction* mu_total_gf_ = nullptr; /// mfem::Coefficients used in forming necessary operators - mfem::GridFunctionCoefficient *rho_coeff_ = nullptr; + mfem::GridFunctionCoefficient* rho_coeff_ = nullptr; // mfem::RatioCoefficient *iorho_coeff_ = nullptr; // mfem::GridFunctionCoefficient *iorho_coeff_ = nullptr; - mfem::Coefficient *iorho_coeff_ = nullptr; + mfem::Coefficient* iorho_coeff_ = nullptr; mfem::ConstantCoefficient nlcoeff_; mfem::ConstantCoefficient one_coeff_; mfem::ConstantCoefficient Hv_bdfcoeff_; - mfem::ProductCoefficient *rho_over_dt_coeff_ = nullptr; - mfem::GridFunctionCoefficient *mu_coeff_ = nullptr; - mfem::VectorGridFunctionCoefficient *pp_div_coeff_ = nullptr; - - mfem::GradientGridFunctionCoefficient *grad_mu_coeff_ = nullptr; - mfem::GradientVectorGridFunctionCoefficient *grad_u_next_coeff_ = nullptr; - mfem::TransposeMatrixCoefficient *grad_u_next_transp_coeff_ = nullptr; - mfem::MatrixVectorProductCoefficient *gradu_gradmu_coeff_ = nullptr; - mfem::MatrixVectorProductCoefficient *graduT_gradmu_coeff_ = nullptr; - mfem::VectorSumCoefficient *twoS_gradmu_coeff_ = nullptr; - mfem::GridFunctionCoefficient *Qt_coeff_ = nullptr; - mfem::ScalarVectorProductCoefficient *gradmu_Qt_coeff_ = nullptr; - mfem::VectorSumCoefficient *S_poisson_coeff_ = nullptr; - mfem::VectorSumCoefficient *S_mom_coeff_ = nullptr; - - mfem::ProductCoefficient *rad_rho_coeff_ = nullptr; - mfem::ProductCoefficient *rad_rho_over_dt_coeff_ = nullptr; - mfem::ProductCoefficient *rad_mu_coeff_ = nullptr; - mfem::ScalarVectorProductCoefficient *rad_S_poisson_coeff_ = nullptr; - mfem::ScalarVectorProductCoefficient *rad_S_mom_coeff_ = nullptr; - mfem::RatioCoefficient *mu_over_rad_coeff_ = nullptr; - mfem::VectorArrayCoefficient *visc_forcing_coeff_ = nullptr; - mfem::GridFunctionCoefficient *pp_div_rad_comp_coeff_ = nullptr; - - mfem::ScalarVectorProductCoefficient *rad_pp_div_coeff_ = nullptr; - std::vector rad_vel_coeff_; - - mfem::GridFunctionCoefficient *utheta_coeff_ = nullptr; - mfem::ProductCoefficient *utheta2_coeff_ = nullptr; - mfem::VectorArrayCoefficient *ur_conv_forcing_coeff_ = nullptr; - mfem::VectorGridFunctionCoefficient *u_next_coeff_ = nullptr; - mfem::ScalarVectorProductCoefficient *rad_rhou_coeff_ = nullptr; - mfem::GridFunctionCoefficient *u_next_rad_coeff_ = nullptr; - mfem::ProductCoefficient *ur_ut_coeff_ = nullptr; - mfem::ProductCoefficient *rho_ur_ut_coeff_ = nullptr; - mfem::VectorArrayCoefficient *utheta_vec_coeff_ = nullptr; - mfem::InnerProductCoefficient *swirl_var_viscosity_coeff_ = nullptr; - - mfem::VectorMagnitudeCoefficient *umag_coeff_ = nullptr; - mfem::GridFunctionCoefficient *gscale_coeff_ = nullptr; - mfem::PowerCoefficient *visc_inv_coeff_ = nullptr; - mfem::ProductCoefficient *reh1_coeff_ = nullptr; - mfem::ProductCoefficient *reh2_coeff_ = nullptr; - mfem::ProductCoefficient *Reh_coeff_ = nullptr; - mfem::ExtTransformedCoefficient *csupg_coeff_ = nullptr; - mfem::ProductCoefficient *uw1_coeff_ = nullptr; - mfem::ProductCoefficient *uw2_coeff_ = nullptr; - mfem::ProductCoefficient *upwind_coeff_ = nullptr; - mfem::TransformedMatrixVectorCoefficient *swdiff_coeff_ = nullptr; - mfem::ScalarMatrixProductCoefficient *supg_coeff_ = nullptr; - mfem::GridFunctionCoefficient *visc_coeff_ = nullptr; + mfem::ProductCoefficient* rho_over_dt_coeff_ = nullptr; + mfem::GridFunctionCoefficient* mu_coeff_ = nullptr; + mfem::VectorGridFunctionCoefficient* pp_div_coeff_ = nullptr; + + mfem::GradientGridFunctionCoefficient* grad_mu_coeff_ = nullptr; + mfem::GradientVectorGridFunctionCoefficient* grad_u_next_coeff_ = nullptr; + mfem::TransposeMatrixCoefficient* grad_u_next_transp_coeff_ = nullptr; + mfem::MatrixVectorProductCoefficient* gradu_gradmu_coeff_ = nullptr; + mfem::MatrixVectorProductCoefficient* graduT_gradmu_coeff_ = nullptr; + mfem::VectorSumCoefficient* twoS_gradmu_coeff_ = nullptr; + mfem::GridFunctionCoefficient* Qt_coeff_ = nullptr; + mfem::ScalarVectorProductCoefficient* gradmu_Qt_coeff_ = nullptr; + mfem::VectorSumCoefficient* S_poisson_coeff_ = nullptr; + mfem::VectorSumCoefficient* S_mom_coeff_ = nullptr; + + mfem::ProductCoefficient* rad_rho_coeff_ = nullptr; + mfem::ProductCoefficient* rad_rho_over_dt_coeff_ = nullptr; + mfem::ProductCoefficient* rad_mu_coeff_ = nullptr; + mfem::ScalarVectorProductCoefficient* rad_S_poisson_coeff_ = nullptr; + mfem::ScalarVectorProductCoefficient* rad_S_mom_coeff_ = nullptr; + mfem::RatioCoefficient* mu_over_rad_coeff_ = nullptr; + mfem::VectorArrayCoefficient* visc_forcing_coeff_ = nullptr; + mfem::GridFunctionCoefficient* pp_div_rad_comp_coeff_ = nullptr; + + mfem::ScalarVectorProductCoefficient* rad_pp_div_coeff_ = nullptr; + std::vector rad_vel_coeff_; + + mfem::GridFunctionCoefficient* utheta_coeff_ = nullptr; + mfem::ProductCoefficient* utheta2_coeff_ = nullptr; + mfem::VectorArrayCoefficient* ur_conv_forcing_coeff_ = nullptr; + mfem::VectorGridFunctionCoefficient* u_next_coeff_ = nullptr; + mfem::ScalarVectorProductCoefficient* rad_rhou_coeff_ = nullptr; + mfem::GridFunctionCoefficient* u_next_rad_coeff_ = nullptr; + mfem::ProductCoefficient* ur_ut_coeff_ = nullptr; + mfem::ProductCoefficient* rho_ur_ut_coeff_ = nullptr; + mfem::VectorArrayCoefficient* utheta_vec_coeff_ = nullptr; + mfem::InnerProductCoefficient* swirl_var_viscosity_coeff_ = nullptr; + + mfem::VectorMagnitudeCoefficient* umag_coeff_ = nullptr; + mfem::GridFunctionCoefficient* gscale_coeff_ = nullptr; + mfem::PowerCoefficient* visc_inv_coeff_ = nullptr; + mfem::ProductCoefficient* reh1_coeff_ = nullptr; + mfem::ProductCoefficient* reh2_coeff_ = nullptr; + mfem::ProductCoefficient* Reh_coeff_ = nullptr; + mfem::ExtTransformedCoefficient* csupg_coeff_ = nullptr; + mfem::ProductCoefficient* uw1_coeff_ = nullptr; + mfem::ProductCoefficient* uw2_coeff_ = nullptr; + mfem::ProductCoefficient* upwind_coeff_ = nullptr; + mfem::TransformedMatrixVectorCoefficient* swdiff_coeff_ = nullptr; + mfem::ScalarMatrixProductCoefficient* supg_coeff_ = nullptr; + mfem::GridFunctionCoefficient* visc_coeff_ = nullptr; // mfem "form" objects used to create operators - mfem::ParBilinearForm *L_iorho_form_ = nullptr; // \int (1/\rho) \nabla \phi_i \cdot \nabla \phi_j - mfem::ParLinearForm *forcing_form_ = nullptr; // \int \phi_i f - mfem::ParNonlinearForm *Nconv_form_ = nullptr; // \int \vphi_i \cdot [(u \cdot \nabla) u] - mfem::ParBilinearForm *Ms_form_ = nullptr; // mass matrix = \int \vphi_i \cdot \vphi_j - mfem::ParBilinearForm *Mv_form_ = nullptr; // mass matrix = \int \vphi_i \cdot \vphi_j - mfem::ParMixedBilinearForm *D_form_ = nullptr; // divergence = \int \phi_i \nabla \cdot \vphi_j - mfem::ParMixedBilinearForm *G_form_ = nullptr; // gradient = \int \vphi_i \cdot \nabla \phi_j - mfem::ParBilinearForm *Mv_rho_form_ = nullptr; // mass matrix (density weighted) = \int \rho \vphi_i \cdot \vphi_j - mfem::ParBilinearForm *Hv_form_ = nullptr; - mfem::ParLinearForm *pp_div_bdr_form_ = nullptr; - mfem::ParLinearForm *u_bdr_form_ = nullptr; - mfem::ParLinearForm *S_poisson_form_ = nullptr; - mfem::ParLinearForm *S_mom_form_ = nullptr; - mfem::ParLinearForm *Faxi_poisson_form_ = nullptr; - mfem::ParLinearForm *ur_conv_axi_form_ = nullptr; - - mfem::ParBilinearForm *Ms_rho_form_ = nullptr; - mfem::ParBilinearForm *Hs_form_ = nullptr; - mfem::ParBilinearForm *As_form_ = nullptr; - mfem::ParLinearForm *rho_ur_ut_form_ = nullptr; - mfem::ParLinearForm *swirl_var_viscosity_form_ = nullptr; + mfem::ParBilinearForm* L_iorho_form_ = nullptr; // \int (1/\rho) \nabla \phi_i \cdot \nabla \phi_j + mfem::ParLinearForm* forcing_form_ = nullptr; // \int \phi_i f + mfem::ParNonlinearForm* Nconv_form_ = nullptr; // \int \vphi_i \cdot [(u \cdot \nabla) u] + mfem::ParBilinearForm* Ms_form_ = nullptr; // mass matrix = \int \vphi_i \cdot \vphi_j + mfem::ParBilinearForm* Mv_form_ = nullptr; // mass matrix = \int \vphi_i \cdot \vphi_j + mfem::ParMixedBilinearForm* D_form_ = nullptr; // divergence = \int \phi_i \nabla \cdot \vphi_j + mfem::ParMixedBilinearForm* G_form_ = nullptr; // gradient = \int \vphi_i \cdot \nabla \phi_j + mfem::ParBilinearForm* Mv_rho_form_ = nullptr; // mass matrix (density weighted) = \int \rho \vphi_i \cdot \vphi_j + mfem::ParBilinearForm* Hv_form_ = nullptr; + mfem::ParLinearForm* pp_div_bdr_form_ = nullptr; + mfem::ParLinearForm* u_bdr_form_ = nullptr; + mfem::ParLinearForm* S_poisson_form_ = nullptr; + mfem::ParLinearForm* S_mom_form_ = nullptr; + mfem::ParLinearForm* Faxi_poisson_form_ = nullptr; + mfem::ParLinearForm* ur_conv_axi_form_ = nullptr; + + mfem::ParBilinearForm* Ms_rho_form_ = nullptr; + mfem::ParBilinearForm* Hs_form_ = nullptr; + mfem::ParBilinearForm* As_form_ = nullptr; + mfem::ParLinearForm* rho_ur_ut_form_ = nullptr; + mfem::ParLinearForm* swirl_var_viscosity_form_ = nullptr; // streamwise stability - mfem::ParBilinearForm *Mv_stab_form_ = nullptr; + mfem::ParBilinearForm* Mv_stab_form_ = nullptr; // mfem operator objects mfem::OperatorHandle L_iorho_op_; @@ -356,22 +356,22 @@ class Tomboulides final : public FlowBase { mfem::OperatorHandle Mv_stab_op_; // solver objects - mfem::ParLORDiscretization *L_iorho_lor_ = nullptr; - mfem::HypreBoomerAMG *L_iorho_inv_pc_ = nullptr; - mfem::OrthoSolver *L_iorho_inv_ortho_pc_ = nullptr; - mfem::CGSolver *L_iorho_inv_ = nullptr; + mfem::ParLORDiscretization* L_iorho_lor_ = nullptr; + mfem::HypreBoomerAMG* L_iorho_inv_pc_ = nullptr; + mfem::OrthoSolver* L_iorho_inv_ortho_pc_ = nullptr; + mfem::CGSolver* L_iorho_inv_ = nullptr; - mfem::Solver *Mv_inv_pc_ = nullptr; - mfem::CGSolver *Mv_inv_ = nullptr; + mfem::Solver* Mv_inv_pc_ = nullptr; + mfem::CGSolver* Mv_inv_ = nullptr; - mfem::Solver *Mv_rho_inv_pc_ = nullptr; - mfem::CGSolver *Mv_rho_inv_ = nullptr; + mfem::Solver* Mv_rho_inv_pc_ = nullptr; + mfem::CGSolver* Mv_rho_inv_ = nullptr; - mfem::Solver *Hv_inv_pc_ = nullptr; - mfem::CGSolver *Hv_inv_ = nullptr; + mfem::Solver* Hv_inv_pc_ = nullptr; + mfem::CGSolver* Hv_inv_ = nullptr; - mfem::Solver *Hs_inv_pc_ = nullptr; - mfem::CGSolver *Hs_inv_ = nullptr; + mfem::Solver* Hs_inv_pc_ = nullptr; + mfem::CGSolver* Hs_inv_ = nullptr; // Vectors mfem::Vector forcing_vec_; @@ -414,14 +414,14 @@ class Tomboulides final : public FlowBase { // miscellaneous double volume_; - mfem::ParLinearForm *mass_lform_ = nullptr; + mfem::ParLinearForm* mass_lform_ = nullptr; // helper functions /** * @brief Zero the mean of the input function */ - void meanZero(mfem::ParGridFunction &v); + void meanZero(mfem::ParGridFunction& v); /** * @brief Update total viscosity using latest inputs @@ -430,8 +430,8 @@ class Tomboulides final : public FlowBase { public: /// Constructor - Tomboulides(mfem::ParMesh *pmesh, int vorder, int porder, temporalSchemeCoefficients &coeff, - mfem::ParGridFunction *gridScale = nullptr, TPS::Tps *tps = nullptr); + Tomboulides(mfem::ParMesh* pmesh, int vorder, int porder, temporalSchemeCoefficients& coeff, + mfem::ParGridFunction* gridScale = nullptr, TPS::Tps* tps = nullptr); /// Destructor ~Tomboulides() final; @@ -455,41 +455,41 @@ class Tomboulides final : public FlowBase { * Register the state with the IODataOrganizer object so that it can * be read/written. Must be called after initializeSelf(). */ - void initializeIO(IODataOrganizer &io) const final; + void initializeIO(IODataOrganizer& io) const final; /** * @brief Initialize Paraview outputs * * Register fields to be written to paraview visualization files. */ - void initializeViz(mfem::ParaViewDataCollection &pvdc) const final; + void initializeViz(mfem::ParaViewDataCollection& pvdc) const final; /** * @brief Initialize statistics outputs */ - void initializeStats(Averaging &average, IODataOrganizer &io, bool continuation) const final; + void initializeStats(Averaging& average, IODataOrganizer& io, bool continuation) const final; /** * @brief Compute turbulent dissipation using average u */ - void computeDissipation(Averaging &average, const int iter); + void computeDissipation(Averaging& average, const int iter); /// Advance void step() final; - void screenHeader(std::vector &header) const final { + void screenHeader(std::vector& header) const final { int nprint = 1; header.resize(nprint); header[0] = std::string("Max vel."); } - void screenValues(std::vector &values) final { + void screenValues(std::vector& values) final { int nprint = 1; values.resize(nprint); values[0] = maxVelocityMagnitude(); } - mfem::ParGridFunction *getCurrentVelocity() final { return u_curr_gf_; } + mfem::ParGridFunction* getCurrentVelocity() final { return u_curr_gf_; } /// Evaluate error (only when exact solution is known) double computeL2Error() const final; @@ -499,18 +499,18 @@ class Tomboulides final : public FlowBase { double getHelmholtzSolveTimer() { return sw_helm_.RealTime(); } /// Add a Dirichlet boundary condition to the velocity field - void addVelDirichletBC(const mfem::Vector &u, mfem::Array &attr); - void addVelDirichletBC(mfem::VectorCoefficient *coeff, mfem::Array &attr); - void addVelDirichletBC(void (*f)(const Vector &, double, Vector &), mfem::Array &attr); - void addVelDirichletBC(std::function f, mfem::Array &attr); + void addVelDirichletBC(const mfem::Vector& u, mfem::Array& attr); + void addVelDirichletBC(mfem::VectorCoefficient* coeff, mfem::Array& attr); + void addVelDirichletBC(void (*f)(const Vector&, double, Vector&), mfem::Array& attr); + void addVelDirichletBC(std::function f, mfem::Array& attr); /// Add a Dirichlet boundary condition to the pressure field. - void addPresDirichletBC(double p, mfem::Array &attr); + void addPresDirichletBC(double p, mfem::Array& attr); /// Add swirl DBCs - void addSwirlDirichletBC(double ut, mfem::Array &attr); - void addSwirlDirichletBC(mfem::Coefficient *coeff, mfem::Array &attr); - void addSwirlDirichletBC(double (*f)(const Vector &, double), Array &attr); + void addSwirlDirichletBC(double ut, mfem::Array& attr); + void addSwirlDirichletBC(mfem::Coefficient* coeff, mfem::Array& attr); + void addSwirlDirichletBC(double (*f)(const Vector&, double), Array& attr); /// Compute maximum velocity magnitude anywhere in the domain double maxVelocityMagnitude(); diff --git a/src/tps.cpp b/src/tps.cpp index ab95c001..0f0b14e7 100644 --- a/src/tps.cpp +++ b/src/tps.cpp @@ -125,12 +125,12 @@ void Tps::printHeader() { } /// Register and parse supported command line arguments and runtime inputs -void Tps::parseCommandLineArgs(int argc, char *argv[]) { +void Tps::parseCommandLineArgs(int argc, char* argv[]) { mfem::OptionsParser args(argc, argv); bool showVersion = false; bool debugMode = false; bool visualMode = false; - const char *astring = iFile_.c_str(); + const char* astring = iFile_.c_str(); if (isRank0_) { grvy_printf(GRVY_DEBUG, "# of command-line arguments = %i\n", argc); @@ -187,8 +187,8 @@ void Tps::parseCommandLineArgs(int argc, char *argv[]) { * It is intended for use with Python interface. */ void Tps::parseArgs(std::vector argv) { - std::vector argv_char; - for (auto &s : argv) argv_char.push_back(&s.front()); + std::vector argv_char; + for (auto& s : argv) argv_char.push_back(&s.front()); parseCommandLineArgs(argv_char.size(), argv_char.data()); } @@ -248,22 +248,28 @@ void Tps::chooseSolver() { if (input_solver_type_ == "flow") { isFlowOnlyMode_ = true; solver_ = new M2ulPhyS(iFile_, this); + if (isRank0_) std::cout << "Using compressible DG solver" << endl; } else if (input_solver_type_ == "em") { isEMOnlyMode_ = true; ElectromagneticOptions em_opt; solver_ = new QuasiMagnetostaticSolver3D(em_opt, this); + if (isRank0_) std::cout << "Using quasi-magnetostatic solver" << endl; } else if (input_solver_type_ == "loMach") { solver_ = new LoMachSolver(this); + if (isRank0_) std::cout << "Using low-Mach solver" << endl; } else if (input_solver_type_ == "em-axi") { isEMOnlyMode_ = true; ElectromagneticOptions em_opt; solver_ = new QuasiMagnetostaticSolverAxiSym(em_opt, this); + if (isRank0_) std::cout << "Using axisymmetric quasi-magnetostatic solver" << endl; } else if (input_solver_type_ == "independent-coupled") { isFlowEMCoupledMode_ = true; solver_ = new IndependentCoupling(iFile_, this); + if (isRank0_) std::cout << "Using independent-coupled solver" << endl; } else if (input_solver_type_ == "cycle-avg-joule-coupled") { isFlowEMCoupledMode_ = true; solver_ = new CycleAvgJouleCoupling(iFile_, this); + if (isRank0_) std::cout << "Using cycle-averaged joule-coupled solver" << endl; } else if (input_solver_type_ == "coupled") { isFlowEMCoupledMode_ = true; grvy_printf(GRVY_ERROR, "\nSlow your roll. Solid high-five for whoever implements this coupled solver mode!\n"); @@ -347,7 +353,7 @@ void Tps::parseInput() { * keyword not present. Supported types are T={int,double,bool,std::string} */ template -void Tps::getInput(const char *name, T &var, T varDefault) { +void Tps::getInput(const char* name, T& var, T varDefault) { if (!iparse_.Read_Var(name, &var, varDefault)) { std::cout << "ERROR: Unable to read input variable -> " << name << std::endl; exit(ERROR); @@ -358,7 +364,7 @@ void Tps::getInput(const char *name, T &var, T varDefault) { /** Read an input vector for keyword [name] and store in var - use vdef if * keyword not present. Only mfem::Vector supported. */ -void Tps::getVec(const char *name, Vector &vec, size_t numElems, const Vector &vdef) { +void Tps::getVec(const char* name, Vector& vec, size_t numElems, const Vector& vdef) { if ((size_t)vdef.Size() < numElems) exit(ERROR); if ((size_t)vec.Size() < numElems) vec.SetSize(numElems); @@ -370,8 +376,8 @@ void Tps::getVec(const char *name, Vector &vec, size_t numElems, const Vector &v if (!iparse_.Read_Var_Vec(name, vec.HostWrite(), numElems)) { grvy_log_setlevel(grvy_log_level); if (isRank0_) grvy_printf(GRVY_INFO, "Setting input vector %s to default.\n", name); - double *hv = vec.HostWrite(); - const double *hd = vdef.HostRead(); + double* hv = vec.HostWrite(); + const double* hd = vdef.HostRead(); for (size_t i = 0; i < numElems; i++) { hv[i] = hd[i]; } @@ -384,7 +390,7 @@ void Tps::getVec(const char *name, Vector &vec, size_t numElems, const Vector &v * are T={int,double,bool,std::string} */ template -void Tps::getRequiredInput(const char *name, T &var) { +void Tps::getRequiredInput(const char* name, T& var) { if (!iparse_.Read_Var(name, &var)) { std::cout << "ERROR: Unable to read required input variable -> " << name << std::endl; exit(ERROR); @@ -397,7 +403,7 @@ void Tps::getRequiredInput(const char *name, T &var) { * @param[out] var vector variable to set (resized if necessary) * @param[in] numElems length of vector */ -void Tps::getRequiredVec(const char *name, std::vector &vec, size_t numElems) { +void Tps::getRequiredVec(const char* name, std::vector& vec, size_t numElems) { if (vec.size() < numElems) vec.reserve(numElems); if (!iparse_.Read_Var_Vec(name, vec.data(), numElems)) { std::cout << "ERROR: Unable to read input vector -> " << name << std::endl; @@ -406,7 +412,7 @@ void Tps::getRequiredVec(const char *name, std::vector &vec, size_t numE } /// @copydoc Tps::getRequiredVec(const char *,std::vector &,size_t) -void Tps::getRequiredVec(const char *name, Vector &vec, size_t numElems) { +void Tps::getRequiredVec(const char* name, Vector& vec, size_t numElems) { if ((size_t)vec.Size() < numElems) vec.SetSize(numElems); if (!iparse_.Read_Var_Vec(name, vec.HostWrite(), numElems)) { std::cout << "ERROR: Unable to read input vector -> " << name << std::endl; @@ -415,7 +421,7 @@ void Tps::getRequiredVec(const char *name, Vector &vec, size_t numElems) { } /// @copydoc Tps::getRequiredVec(const char *,Vector &,size_t) -void Tps::getRequiredVec(const char *name, mfem::Array &vec, size_t numElems) { +void Tps::getRequiredVec(const char* name, mfem::Array& vec, size_t numElems) { if ((size_t)vec.Size() < numElems) vec.SetSize(numElems); if (!iparse_.Read_Var_Vec(name, vec.HostWrite(), numElems)) { std::cout << "ERROR: Unable to read input vector -> " << name << std::endl; @@ -429,7 +435,7 @@ void Tps::getRequiredVec(const char *name, mfem::Array &vec, size_t numE * @param[inout] var vector variable to set * @param[in] ithElem index of element to set */ -void Tps::getRequiredVecElem(const char *name, double &value, int ithElem) { +void Tps::getRequiredVecElem(const char* name, double& value, int ithElem) { #if 1 if (!iparse_.Read_Var_iVec(name, &value, ithElem)) { grvy_printf(GRVY_ERROR, "Unable to read %ith element from input vector -> %s\n", ithElem, name); @@ -438,7 +444,7 @@ void Tps::getRequiredVecElem(const char *name, double &value, int ithElem) { #endif } -void Tps::getRequiredPairs(const char *name, std::vector> &var) { +void Tps::getRequiredPairs(const char* name, std::vector>& var) { std::string inputString; if (!iparse_.Read_Var(name, &inputString)) { std::cout << "ERROR: Unable to read required input variable -> " << name << std::endl; @@ -470,28 +476,28 @@ void Tps::getRequiredPairs(const char *name, std::vector(const char *name, int &var, int varDefault); -template void Tps::getInput(const char *name, double &var, double varDefault); -template void Tps::getInput(const char *name, std::string &var, std::string varDefault); -template void Tps::getInput(const char *name, bool &var, bool varDefault); +template void Tps::getInput(const char* name, int& var, int varDefault); +template void Tps::getInput(const char* name, double& var, double varDefault); +template void Tps::getInput(const char* name, std::string& var, std::string varDefault); +template void Tps::getInput(const char* name, bool& var, bool varDefault); // supported templates for getRequiredInput() -template void Tps::getRequiredInput(const char *name, int &var); -template void Tps::getRequiredInput(const char *name, double &var); -template void Tps::getRequiredInput(const char *name, std::string &var); +template void Tps::getRequiredInput(const char* name, int& var); +template void Tps::getRequiredInput(const char* name, double& var); +template void Tps::getRequiredInput(const char* name, std::string& var); } // end namespace TPS @@ -505,7 +511,7 @@ namespace py = pybind11; namespace tps_wrappers { -void tps(py::module &m) { +void tps(py::module& m) { #ifdef HAVE_MPI4PY // initialize mpi4py's C-API if (import_mpi4py() < 0) { @@ -531,10 +537,10 @@ void tps(py::module &m) { .def("parseCommandLineArgs", &TPS::Tps::parseArgs) .def("parseInput", &TPS::Tps::parseInput) .def("getRequiredInput", - static_cast(&TPS::Tps::getRequiredInput)) - .def("getRequiredInput", static_cast(&TPS::Tps::getRequiredInput)) - .def("getInput", static_cast(&TPS::Tps::getInput)) - .def("getInput", static_cast(&TPS::Tps::getInput)) + static_cast(&TPS::Tps::getRequiredInput)) + .def("getRequiredInput", static_cast(&TPS::Tps::getRequiredInput)) + .def("getInput", static_cast(&TPS::Tps::getInput)) + .def("getInput", static_cast(&TPS::Tps::getInput)) .def("solve", &TPS::Tps::solve) .def("solveBegin", &TPS::Tps::solveBegin) .def("solveStep", &TPS::Tps::solveStep) diff --git a/src/tps.hpp b/src/tps.hpp index 9b40ff6a..6c0c1382 100644 --- a/src/tps.hpp +++ b/src/tps.hpp @@ -96,7 +96,7 @@ class Tps { std::string meshFile_; // pointer to solver implementation chosen at runtime - TPS::Solver *solver_ = NULL; + TPS::Solver* solver_ = NULL; // post-process visualization mode bool isVisualizationMode_; @@ -115,39 +115,39 @@ class Tps { /// Input parsing support (variants with default value supplied) template - void getInput(const char *name, T &var, T varDefault); + void getInput(const char* name, T& var, T varDefault); /// Read optional mfem::Vector input (set to vdef if absent in input file) - void getVec(const char *name, Vector &vec, size_t numElems, const Vector &vdef); + void getVec(const char* name, Vector& vec, size_t numElems, const Vector& vdef); /// Parsing support for required (scalar) inputs template - void getRequiredInput(const char *name, T &var); + void getRequiredInput(const char* name, T& var); template - T getRequiredInput(const std::string &name) { + T getRequiredInput(const std::string& name) { T var; this->getRequiredInput(name.c_str(), var); return var; } template - T getInput(const std::string &name, T varDefault) { + T getInput(const std::string& name, T varDefault) { T var; this->getInput(name.c_str(), var, varDefault); return var; } /// Parsing support for required (vector) inputs - void getRequiredVec(const char *name, std::vector &var, size_t numElems); - void getRequiredVec(const char *name, Vector &var, size_t numElems); - void getRequiredVec(const char *name, Array &var, size_t numElems); + void getRequiredVec(const char* name, std::vector& var, size_t numElems); + void getRequiredVec(const char* name, Vector& var, size_t numElems); + void getRequiredVec(const char* name, Array& var, size_t numElems); /// Parsing support for required (single element of vector) inputs - void getRequiredVecElem(const char *name, double &var, int ithElem); + void getRequiredVecElem(const char* name, double& var, int ithElem); /// Read string-string pairs for keyword [name] and store in var. - void getRequiredPairs(const char *name, std::vector> &var); + void getRequiredPairs(const char* name, std::vector>& var); /// Get solver status int getStatus() { return solver_->getStatus(); } @@ -189,16 +189,16 @@ class Tps { } /// Initialize the interface - void initInterface(Tps2Boltzmann &interface) { solver_->initInterface(interface); } + void initInterface(Tps2Boltzmann& interface) { solver_->initInterface(interface); } /// Push solver variables to interface - void push(Tps2Boltzmann &interface) { solver_->push(interface); } + void push(Tps2Boltzmann& interface) { solver_->push(interface); } /// Fetch solver variables from interface - void fetch(Tps2Boltzmann &interface) { solver_->fetch(interface); } + void fetch(Tps2Boltzmann& interface) { solver_->fetch(interface); } void printHeader(); - void parseCommandLineArgs(int argc, char *argv[]); // variant used in C++ interface + void parseCommandLineArgs(int argc, char* argv[]); // variant used in C++ interface void parseArgs(std::vector argv); // variant used in python interface void parseInput(); @@ -209,15 +209,15 @@ class Tps { MPI_Comm getTPSCommWorld() { return TPSCommWorld_; } - std::string &getInputFilename() { return iFile_; } + std::string& getInputFilename() { return iFile_; } bool isFlowEMCoupled() const { return isFlowEMCoupledMode_; } bool isVisualizationMode() const { return isVisualizationMode_; } - const std::string &getSolverType() { return input_solver_type_; } + const std::string& getSolverType() { return input_solver_type_; } }; -std::string ltrim(const std::string &s); -std::string rtrim(const std::string &s); -std::string trim(const std::string &s); +std::string ltrim(const std::string& s); +std::string rtrim(const std::string& s); +std::string trim(const std::string& s); } // end namespace TPS diff --git a/src/tps2Boltzmann.cpp b/src/tps2Boltzmann.cpp index 689fded0..b0f5bbd3 100644 --- a/src/tps2Boltzmann.cpp +++ b/src/tps2Boltzmann.cpp @@ -50,35 +50,35 @@ namespace TPS { class CPUDataRead { public: - CPUDataRead(const mfem::Vector &v) : data_(v.HostRead()), size_(v.Size()), stride_(1) {} - double *data() const { return const_cast(data_); } + CPUDataRead(const mfem::Vector& v) : data_(v.HostRead()), size_(v.Size()), stride_(1) {} + double* data() const { return const_cast(data_); } size_t size() const { return size_; } size_t stride() const { return stride_; } private: - const double *data_; + const double* data_; size_t size_; size_t stride_; }; class CPUData { public: - CPUData(mfem::Vector &v, bool rw) : data_(rw ? v.HostReadWrite() : v.HostWrite()), size_(v.Size()), stride_(1) {} - double *data() { return data_; } + CPUData(mfem::Vector& v, bool rw) : data_(rw ? v.HostReadWrite() : v.HostWrite()), size_(v.Size()), stride_(1) {} + double* data() { return data_; } size_t size() const { return size_; } size_t stride() const { return stride_; } private: - double *data_; + double* data_; size_t size_; size_t stride_; }; -void idenity_fun(const Vector &x, Vector &out) { +void idenity_fun(const Vector& x, Vector& out) { for (int i(0); i < x.Size(); ++i) out[i] = x[i]; } -Tps2Boltzmann::Tps2Boltzmann(Tps *tps) +Tps2Boltzmann::Tps2Boltzmann(Tps* tps) : NIndexes(7), tps_(tps), all_fes_(nullptr), save_to_paraview_dc(false), paraview_dc(nullptr) { // Assert we have a couple solver; assert(tps->isFlowEMCoupled()); @@ -116,9 +116,9 @@ int Tps2Boltzmann::_countBTEReactions() { return bte_reactions; } -void Tps2Boltzmann::init(TPS::PlasmaSolver *flowSolver) { +void Tps2Boltzmann::init(TPS::PlasmaSolver* flowSolver) { std::cout << "Tps2Boltzmann::init is called" << std::endl; - mfem::ParMesh *pmesh(flowSolver->getMesh()); + mfem::ParMesh* pmesh(flowSolver->getMesh()); fec_ = new mfem::L2_FECollection(order_, pmesh->Dimension(), basis_type_); switch (pmesh->Dimension()) { case 2: @@ -139,7 +139,7 @@ void Tps2Boltzmann::init(TPS::PlasmaSolver *flowSolver) { scalar_fes_ = new mfem::ParFiniteElementSpace(pmesh, fec_); reaction_rates_fes_ = new mfem::ParFiniteElementSpace(pmesh, fec_, nreactions_, mfem::Ordering::byNODES); - list_fes_ = new mfem::ParFiniteElementSpace *[NIndexes + 1]; + list_fes_ = new mfem::ParFiniteElementSpace*[NIndexes + 1]; list_fes_[Index::ElectricField] = efield_fes_; ncomps[Index::ElectricField] = nEfieldComps_; list_fes_[Index::SpeciesDensities] = species_densities_fes_; @@ -157,8 +157,8 @@ void Tps2Boltzmann::init(TPS::PlasmaSolver *flowSolver) { list_fes_[Index::All] = all_fes_; ncomps[Index::All] = nfields_; - mfem::ParGridFunction *all = new mfem::ParGridFunction(all_fes_); - fields_ = new mfem::ParGridFunction *[NIndexes + 1]; + mfem::ParGridFunction* all = new mfem::ParGridFunction(all_fes_); + fields_ = new mfem::ParGridFunction*[NIndexes + 1]; offsets[0] = 0; for (std::size_t index(0); index < NIndexes; ++index) { fields_[index] = new mfem::ParGridFunction(list_fes_[index], *all, offsets[index]); @@ -167,14 +167,14 @@ void Tps2Boltzmann::init(TPS::PlasmaSolver *flowSolver) { fields_[Index::All] = all; // Native spaces - const mfem::FiniteElementCollection *fec_native(flowSolver->getFEC()); + const mfem::FiniteElementCollection* fec_native(flowSolver->getFEC()); species_densities_native_fes_ = new mfem::ParFiniteElementSpace(pmesh, fec_native, nspecies_, mfem::Ordering::byNODES); efield_native_fes_ = new mfem::ParFiniteElementSpace(pmesh, fec_native, nEfieldComps_, mfem::Ordering::byNODES); scalar_native_fes_ = new mfem::ParFiniteElementSpace(pmesh, fec_native); reaction_rates_native_fes_ = new mfem::ParFiniteElementSpace(pmesh, fec_native, nreactions_, mfem::Ordering::byNODES); - list_native_fes_ = new mfem::ParFiniteElementSpace *[NIndexes + 1]; + list_native_fes_ = new mfem::ParFiniteElementSpace*[NIndexes + 1]; list_native_fes_[Index::ElectricField] = efield_native_fes_; list_native_fes_[Index::SpeciesDensities] = species_densities_native_fes_; list_native_fes_[Index::HeavyTemperature] = scalar_native_fes_; @@ -199,7 +199,7 @@ void Tps2Boltzmann::init(TPS::PlasmaSolver *flowSolver) { spatial_coord_fes_ = new mfem::ParFiniteElementSpace(pmesh, fec_, pmesh->Dimension(), mfem::Ordering::byNODES); spatial_coordinates_ = new mfem::ParGridFunction(spatial_coord_fes_); mfem::VectorFunctionCoefficient coord_fun(pmesh->Dimension(), - std::function(idenity_fun)); + std::function(idenity_fun)); spatial_coordinates_->ProjectCoefficient(coord_fun); if (save_to_paraview_dc) { @@ -214,14 +214,14 @@ void Tps2Boltzmann::init(TPS::PlasmaSolver *flowSolver) { } } -void Tps2Boltzmann::interpolateFromNativeFES(const ParGridFunction &input, Tps2Boltzmann::Index index) { +void Tps2Boltzmann::interpolateFromNativeFES(const ParGridFunction& input, Tps2Boltzmann::Index index) { if (ncomps[index] == 1) { scalar_interpolator_->Mult(input, *(fields_[index])); } else { const int loc_size_native = list_native_fes_[index]->GetNDofs(); const int loc_size = list_fes_[index]->GetNDofs(); for (int icomp(0); icomp < ncomps[index]; ++icomp) { - const mfem::Vector view_input(const_cast(input), icomp * loc_size_native, + const mfem::Vector view_input(const_cast(input), icomp * loc_size_native, loc_size_native); mfem::Vector view_field(*(fields_[index]), icomp * loc_size, loc_size); scalar_interpolator_->Mult(view_input, view_field); @@ -229,7 +229,7 @@ void Tps2Boltzmann::interpolateFromNativeFES(const ParGridFunction &input, Tps2B } } -void Tps2Boltzmann::interpolateToNativeFES(ParGridFunction &output, Index index) { +void Tps2Boltzmann::interpolateToNativeFES(ParGridFunction& output, Index index) { if (ncomps[index] == 1) { scalar_interpolator_to_nativeFES_->Mult(*(fields_[index]), output); } else { @@ -291,10 +291,10 @@ Tps2Boltzmann::~Tps2Boltzmann() { namespace py = pybind11; namespace tps_wrappers { -void tps2bolzmann(py::module &m) { +void tps2bolzmann(py::module& m) { // Can by read in numpy as np.array(data_instance, copy = False) py::class_(m, "CPUDataRead", py::buffer_protocol()) - .def_buffer([](TPS::CPUDataRead &d) -> py::buffer_info { + .def_buffer([](TPS::CPUDataRead& d) -> py::buffer_info { return py::buffer_info(d.data(), /*pointer to buffer*/ sizeof(double), /*size of one element*/ py::format_descriptor::format(), /*python struct-style format descriptor*/ @@ -304,7 +304,7 @@ void tps2bolzmann(py::module &m) { true /*read only*/); }); - py::class_(m, "CPUData", py::buffer_protocol()).def_buffer([](TPS::CPUData &d) -> py::buffer_info { + py::class_(m, "CPUData", py::buffer_protocol()).def_buffer([](TPS::CPUData& d) -> py::buffer_info { return py::buffer_info(d.data(), /*pointer to buffer*/ sizeof(double), /*size of one element*/ py::format_descriptor::format(), /*python struct-style format descriptor*/ @@ -324,21 +324,21 @@ void tps2bolzmann(py::module &m) { .value("ReactionRates", TPS::Tps2Boltzmann::Index::ReactionRates); py::class_(m, "Tps2Boltzmann") - .def(py::init()) + .def(py::init()) .def("HostReadSpatialCoordinates", - [](const TPS::Tps2Boltzmann &interface) { + [](const TPS::Tps2Boltzmann& interface) { return std::unique_ptr(new TPS::CPUDataRead(interface.SpatialCoordinates())); }) .def("HostRead", - [](const TPS::Tps2Boltzmann &interface, TPS::Tps2Boltzmann::Index index) { + [](const TPS::Tps2Boltzmann& interface, TPS::Tps2Boltzmann::Index index) { return std::unique_ptr(new TPS::CPUDataRead(interface.Field(index))); }) .def("HostWrite", - [](TPS::Tps2Boltzmann &interface, TPS::Tps2Boltzmann::Index index) { + [](TPS::Tps2Boltzmann& interface, TPS::Tps2Boltzmann::Index index) { return std::unique_ptr(new TPS::CPUData(interface.Field(index), false)); }) .def("HostReadWrite", - [](TPS::Tps2Boltzmann &interface, TPS::Tps2Boltzmann::Index index) { + [](TPS::Tps2Boltzmann& interface, TPS::Tps2Boltzmann::Index index) { return std::unique_ptr(new TPS::CPUData(interface.Field(index), true)); }) .def("EfieldAngularFreq", &TPS::Tps2Boltzmann::EfieldAngularFreq) diff --git a/src/tps2Boltzmann.hpp b/src/tps2Boltzmann.hpp index 5dc39adb..5cf4aa19 100644 --- a/src/tps2Boltzmann.hpp +++ b/src/tps2Boltzmann.hpp @@ -89,24 +89,24 @@ class Tps2Boltzmann { //! Total number of fields const std::size_t NIndexes; - Tps2Boltzmann(Tps *tps); - void init(TPS::PlasmaSolver *flowSolver); + Tps2Boltzmann(Tps* tps); + void init(TPS::PlasmaSolver* flowSolver); bool IsInitialized() const { return all_fes_ != nullptr; } - const mfem::ParFiniteElementSpace &Fes(Index index) const { return *(list_fes_[index]); } - mfem::ParFiniteElementSpace &Fes(Index index) { return *(list_fes_[index]); } + const mfem::ParFiniteElementSpace& Fes(Index index) const { return *(list_fes_[index]); } + mfem::ParFiniteElementSpace& Fes(Index index) { return *(list_fes_[index]); } - const mfem::ParFiniteElementSpace &NativeFes(Index index) const { return *(list_native_fes_[index]); } - mfem::ParFiniteElementSpace &NativeFes(Index index) { return *(list_native_fes_[index]); } + const mfem::ParFiniteElementSpace& NativeFes(Index index) const { return *(list_native_fes_[index]); } + mfem::ParFiniteElementSpace& NativeFes(Index index) { return *(list_native_fes_[index]); } - const mfem::ParGridFunction &SpatialCoordinates() const { return *spatial_coordinates_; } - mfem::ParGridFunction &SpatialCoordinates() { return *spatial_coordinates_; } + const mfem::ParGridFunction& SpatialCoordinates() const { return *spatial_coordinates_; } + mfem::ParGridFunction& SpatialCoordinates() { return *spatial_coordinates_; } - const mfem::ParGridFunction &Field(Index index) const { return *(fields_[index]); } - mfem::ParGridFunction &Field(Index index) { return *(fields_[index]); } + const mfem::ParGridFunction& Field(Index index) const { return *(fields_[index]); } + mfem::ParGridFunction& Field(Index index) { return *(fields_[index]); } - void interpolateFromNativeFES(const ParGridFunction &input, Index index); - void interpolateToNativeFES(ParGridFunction &output, Index index); + void interpolateFromNativeFES(const ParGridFunction& input, Index index); + void interpolateToNativeFES(ParGridFunction& output, Index index); //! Get the angular Frequency \omega of the electrical field: //! E(t) = Er*cos(\omega t) + Ei*sin(\omega t) @@ -128,7 +128,7 @@ class Tps2Boltzmann { private: int _countBTEReactions(); - Tps *tps_; + Tps* tps_; int nspecies_; int nEfieldComps_; @@ -139,39 +139,39 @@ class Tps2Boltzmann { mfem::Array offsets; mfem::Array ncomps; - mfem::FiniteElementCollection *fec_; + mfem::FiniteElementCollection* fec_; //! Function spaces in the Boltzmann interface - mfem::ParFiniteElementSpace *all_fes_; - mfem::ParFiniteElementSpace *species_densities_fes_; - mfem::ParFiniteElementSpace *efield_fes_; - mfem::ParFiniteElementSpace *scalar_fes_; - mfem::ParFiniteElementSpace *reaction_rates_fes_; - mfem::ParFiniteElementSpace **list_fes_; + mfem::ParFiniteElementSpace* all_fes_; + mfem::ParFiniteElementSpace* species_densities_fes_; + mfem::ParFiniteElementSpace* efield_fes_; + mfem::ParFiniteElementSpace* scalar_fes_; + mfem::ParFiniteElementSpace* reaction_rates_fes_; + mfem::ParFiniteElementSpace** list_fes_; - mfem::ParFiniteElementSpace *spatial_coord_fes_; + mfem::ParFiniteElementSpace* spatial_coord_fes_; //! Function spaces using the native TPS fec - mfem::ParFiniteElementSpace *species_densities_native_fes_; - mfem::ParFiniteElementSpace *efield_native_fes_; - mfem::ParFiniteElementSpace *scalar_native_fes_; - mfem::ParFiniteElementSpace *reaction_rates_native_fes_; - mfem::ParFiniteElementSpace **list_native_fes_; + mfem::ParFiniteElementSpace* species_densities_native_fes_; + mfem::ParFiniteElementSpace* efield_native_fes_; + mfem::ParFiniteElementSpace* scalar_native_fes_; + mfem::ParFiniteElementSpace* reaction_rates_native_fes_; + mfem::ParFiniteElementSpace** list_native_fes_; //! Linear interpolator between native TPS fec to Interface fec - mfem::ParDiscreteLinearOperator *scalar_interpolator_; - mfem::ParDiscreteLinearOperator *scalar_interpolator_to_nativeFES_; + mfem::ParDiscreteLinearOperator* scalar_interpolator_; + mfem::ParDiscreteLinearOperator* scalar_interpolator_to_nativeFES_; //! array of fields see *Index for how to address this - mfem::ParGridFunction **fields_; - mfem::ParGridFunction *spatial_coordinates_; + mfem::ParGridFunction** fields_; + mfem::ParGridFunction* spatial_coordinates_; double EfieldAngularFreq_; double timestep_; double currentTime_; bool save_to_paraview_dc; - mfem::ParaViewDataCollection *paraview_dc; + mfem::ParaViewDataCollection* paraview_dc; std::vector reaction_eqs_; }; } // namespace TPS diff --git a/src/transport_properties.cpp b/src/transport_properties.cpp index bdc4ce99..cde165f7 100644 --- a/src/transport_properties.cpp +++ b/src/transport_properties.cpp @@ -32,7 +32,7 @@ #include "transport_properties.hpp" -MFEM_HOST_DEVICE TransportProperties::TransportProperties(GasMixture *_mixture) : mixture(_mixture) { +MFEM_HOST_DEVICE TransportProperties::TransportProperties(GasMixture* _mixture) : mixture(_mixture) { numSpecies = mixture->GetNumSpecies(); dim = mixture->GetDimension(); nvel_ = mixture->GetNumVels(); @@ -42,7 +42,7 @@ MFEM_HOST_DEVICE TransportProperties::TransportProperties(GasMixture *_mixture) num_equation = mixture->GetNumEquations(); } -void TransportProperties::correctMassDiffusionFlux(const Vector &Y_sp, DenseMatrix &diffusionVelocity) { +void TransportProperties::correctMassDiffusionFlux(const Vector& Y_sp, DenseMatrix& diffusionVelocity) { correctMassDiffusionFlux(&Y_sp[0], diffusionVelocity.Write()); // // Correction Velocity // Vector Vc(nvel_); @@ -56,7 +56,7 @@ void TransportProperties::correctMassDiffusionFlux(const Vector &Y_sp, DenseMatr // } } -MFEM_HOST_DEVICE void TransportProperties::correctMassDiffusionFlux(const double *Y_sp, double *diffusionVelocity) { +MFEM_HOST_DEVICE void TransportProperties::correctMassDiffusionFlux(const double* Y_sp, double* diffusionVelocity) { // Correction Velocity double Vc[gpudata::MAXDIM]; for (int v = 0; v < nvel_; v++) Vc[v] = 0.0; @@ -69,7 +69,7 @@ MFEM_HOST_DEVICE void TransportProperties::correctMassDiffusionFlux(const double } } -double TransportProperties::computeMixtureElectricConductivity(const Vector &mobility, const Vector &n_sp) { +double TransportProperties::computeMixtureElectricConductivity(const Vector& mobility, const Vector& n_sp) { return computeMixtureElectricConductivity(&mobility[0], &n_sp[0]); // double mho = 0.0; // electric conductivity. // @@ -80,8 +80,8 @@ double TransportProperties::computeMixtureElectricConductivity(const Vector &mob // return mho; } -MFEM_HOST_DEVICE double TransportProperties::computeMixtureElectricConductivity(const double *mobility, - const double *n_sp) { +MFEM_HOST_DEVICE double TransportProperties::computeMixtureElectricConductivity(const double* mobility, + const double* n_sp) { double mho = 0.0; // electric conductivity. for (int sp = 0; sp < numSpecies; sp++) { @@ -91,8 +91,8 @@ MFEM_HOST_DEVICE double TransportProperties::computeMixtureElectricConductivity( return mho; } -void TransportProperties::addAmbipolarEfield(const Vector &mobility, const Vector &n_sp, - DenseMatrix &diffusionVelocity) { +void TransportProperties::addAmbipolarEfield(const Vector& mobility, const Vector& n_sp, + DenseMatrix& diffusionVelocity) { addAmbipolarEfield(&mobility[0], &n_sp[0], diffusionVelocity.Write()); // double mho = computeMixtureElectricConductivity(mobility, n_sp); // @@ -112,8 +112,8 @@ void TransportProperties::addAmbipolarEfield(const Vector &mobility, const Vecto // } } -MFEM_HOST_DEVICE void TransportProperties::addAmbipolarEfield(const double *mobility, const double *n_sp, - double *diffusionVelocity) { +MFEM_HOST_DEVICE void TransportProperties::addAmbipolarEfield(const double* mobility, const double* n_sp, + double* diffusionVelocity) { double mho = computeMixtureElectricConductivity(mobility, n_sp); double ambE[gpudata::MAXDIM]; @@ -133,8 +133,8 @@ MFEM_HOST_DEVICE void TransportProperties::addAmbipolarEfield(const double *mobi } } -void TransportProperties::addMixtureDrift(const Vector &mobility, const Vector &n_sp, const Vector &Efield, - DenseMatrix &diffusionVelocity) { +void TransportProperties::addMixtureDrift(const Vector& mobility, const Vector& n_sp, const Vector& Efield, + DenseMatrix& diffusionVelocity) { addMixtureDrift(&mobility[0], &n_sp[0], &Efield[0], diffusionVelocity.Write()); // for (int sp = 0; sp < numSpecies; sp++) { // if (mixture->GetGasParams(sp, GasParams::SPECIES_CHARGES) == 0.0) continue; @@ -143,8 +143,8 @@ void TransportProperties::addMixtureDrift(const Vector &mobility, const Vector & // } } -MFEM_HOST_DEVICE void TransportProperties::addMixtureDrift(const double *mobility, const double *n_sp, - const double *Efield, double *diffusionVelocity) { +MFEM_HOST_DEVICE void TransportProperties::addMixtureDrift(const double* mobility, const double* n_sp, + const double* Efield, double* diffusionVelocity) { for (int sp = 0; sp < numSpecies; sp++) { if (mixture->GetGasParams(sp, GasParams::SPECIES_CHARGES) == 0.0) continue; @@ -152,7 +152,7 @@ MFEM_HOST_DEVICE void TransportProperties::addMixtureDrift(const double *mobilit } } -double TransportProperties::linearAverage(const Vector &X_sp, const Vector &speciesTransport) { +double TransportProperties::linearAverage(const Vector& X_sp, const Vector& speciesTransport) { return linearAverage(&X_sp[0], &speciesTransport[0]); // double average = 0.0; // @@ -161,7 +161,7 @@ double TransportProperties::linearAverage(const Vector &X_sp, const Vector &spec // return average; } -MFEM_HOST_DEVICE double TransportProperties::linearAverage(const double *X_sp, const double *speciesTransport) { +MFEM_HOST_DEVICE double TransportProperties::linearAverage(const double* X_sp, const double* speciesTransport) { double average = 0.0; for (int sp = 0; sp < numSpecies; sp++) average += X_sp[sp] * speciesTransport[sp]; @@ -169,8 +169,8 @@ MFEM_HOST_DEVICE double TransportProperties::linearAverage(const double *X_sp, c return average; } -void TransportProperties::CurtissHirschfelder(const Vector &X_sp, const Vector &Y_sp, const DenseMatrix &binaryDiff, - Vector &avgDiff) { +void TransportProperties::CurtissHirschfelder(const Vector& X_sp, const Vector& Y_sp, const DenseMatrix& binaryDiff, + Vector& avgDiff) { CurtissHirschfelder(&X_sp[0], &Y_sp[0], binaryDiff.Read(), &avgDiff[0]); // avgDiff.SetSize(numSpecies); // avgDiff = 0.0; @@ -185,8 +185,8 @@ void TransportProperties::CurtissHirschfelder(const Vector &X_sp, const Vector & // } } -MFEM_HOST_DEVICE void TransportProperties::CurtissHirschfelder(const double *X_sp, const double *Y_sp, - const double *binaryDiff, double *avgDiff) { +MFEM_HOST_DEVICE void TransportProperties::CurtissHirschfelder(const double* X_sp, const double* Y_sp, + const double* binaryDiff, double* avgDiff) { for (int sp = 0; sp < numSpecies; sp++) avgDiff[sp] = 0.0; for (int spI = 0; spI < numSpecies; spI++) { @@ -202,11 +202,11 @@ MFEM_HOST_DEVICE void TransportProperties::CurtissHirschfelder(const double *X_s //////// Dry Air mixture ////////////////////////////////////////////////////// -DryAirTransport::DryAirTransport(GasMixture *_mixture, RunConfiguration &_runfile) +DryAirTransport::DryAirTransport(GasMixture* _mixture, RunConfiguration& _runfile) : DryAirTransport(_mixture, _runfile.GetViscMult(), _runfile.GetBulkViscMult(), _runfile.sutherland_.C1, _runfile.sutherland_.S0, _runfile.sutherland_.Pr) {} -MFEM_HOST_DEVICE DryAirTransport::DryAirTransport(GasMixture *_mixture, const double viscosity_multiplier, +MFEM_HOST_DEVICE DryAirTransport::DryAirTransport(GasMixture* _mixture, const double viscosity_multiplier, const double bulk_viscosity, const double C1, const double S, const double Pr) : MolecularTransport(_mixture), @@ -221,9 +221,9 @@ MFEM_HOST_DEVICE DryAirTransport::DryAirTransport(GasMixture *_mixture, const do cp_div_pr = specific_heat_ratio * gas_constant / (Pr_ * (specific_heat_ratio - 1.)); } -MFEM_HOST_DEVICE void DryAirTransport::ComputeFluxMolecularTransport(const double *state, const double *gradUp, - const double *Efield, double *transportBuffer, - double *diffusionVelocity) { +MFEM_HOST_DEVICE void DryAirTransport::ComputeFluxMolecularTransport(const double* state, const double* gradUp, + const double* Efield, double* transportBuffer, + double* diffusionVelocity) { double p = mixture->ComputePressure(state); double temp = p / gas_constant / state[0]; @@ -269,7 +269,7 @@ MFEM_HOST_DEVICE void DryAirTransport::ComputeFluxMolecularTransport(const doubl //////// Constant transport ////////////////////////////////////////////////////// -ConstantTransport::ConstantTransport(GasMixture *_mixture, RunConfiguration &_runfile) +ConstantTransport::ConstantTransport(GasMixture* _mixture, RunConfiguration& _runfile) : ConstantTransport(_mixture, _runfile.constantTransport) {} // ConstantTransport::ConstantTransport(GasMixture *_mixture, RunConfiguration &_runfile) : // TransportProperties(_mixture) { @@ -300,7 +300,7 @@ ConstantTransport::ConstantTransport(GasMixture *_mixture, RunConfiguration &_ru // } // } -MFEM_HOST_DEVICE ConstantTransport::ConstantTransport(GasMixture *_mixture, const constantTransportData &inputs) +MFEM_HOST_DEVICE ConstantTransport::ConstantTransport(GasMixture* _mixture, const constantTransportData& inputs) : MolecularTransport(_mixture) { viscosity_ = inputs.viscosity; bulkViscosity_ = inputs.bulkViscosity; @@ -331,9 +331,9 @@ MFEM_HOST_DEVICE ConstantTransport::ConstantTransport(GasMixture *_mixture, cons } } -MFEM_HOST_DEVICE void ConstantTransport::ComputeFluxMolecularTransport(const double *state, const double *gradUp, - const double *Efield, double *transportBuffer, - double *diffusionVelocity) { +MFEM_HOST_DEVICE void ConstantTransport::ComputeFluxMolecularTransport(const double* state, const double* gradUp, + const double* Efield, double* transportBuffer, + double* diffusionVelocity) { transportBuffer[FluxTrns::VISCOSITY] = viscosity_; transportBuffer[FluxTrns::BULK_VISCOSITY] = bulkViscosity_; transportBuffer[FluxTrns::HEAVY_THERMAL_CONDUCTIVITY] = thermalConductivity_; @@ -386,11 +386,11 @@ MFEM_HOST_DEVICE void ConstantTransport::ComputeFluxMolecularTransport(const dou } } -MFEM_HOST_DEVICE void ConstantTransport::ComputeSourceMolecularTransport(const double *state, const double *Up, - const double *gradUp, const double *Efield, - double *globalTransport, - double *speciesTransport, - double *diffusionVelocity, double *n_sp) { +MFEM_HOST_DEVICE void ConstantTransport::ComputeSourceMolecularTransport(const double* state, const double* Up, + const double* gradUp, const double* Efield, + double* globalTransport, + double* speciesTransport, + double* diffusionVelocity, double* n_sp) { for (int i = 0; i < SrcTrns::NUM_SRC_TRANS; i++) globalTransport[i] = 0.0; for (int c = 0; c < SpeciesTrns::NUM_SPECIES_COEFFS; c++) for (int sp = 0; sp < numSpecies; sp++) speciesTransport[sp + c * numSpecies] = 0.0; diff --git a/src/transport_properties.hpp b/src/transport_properties.hpp index f44845b9..78b44b4a 100644 --- a/src/transport_properties.hpp +++ b/src/transport_properties.hpp @@ -59,7 +59,7 @@ class TransportProperties { bool ambipolar; bool twoTemperature_; - GasMixture *mixture; + GasMixture* mixture; // Array isComputed; // SpeciesPrimitiveType speciesPrimitiveType; @@ -69,7 +69,7 @@ class TransportProperties { public: // TransportProperties(GasMixture *_mixture); - MFEM_HOST_DEVICE TransportProperties(GasMixture *_mixture); + MFEM_HOST_DEVICE TransportProperties(GasMixture* _mixture); // virtual ~TransportProperties() {} MFEM_HOST_DEVICE virtual ~TransportProperties() {} @@ -85,25 +85,25 @@ class TransportProperties { // but do not return it as output. // TODO(kevin): need to discuss whether to reuse computed primitive variables in flux evaluation, // or in general evaluation of primitive variables. - virtual void ComputeFluxTransportProperties(const Vector &state, const DenseMatrix &gradUp, const Vector &Efield, - double radius, double distance, Vector &transportBuffer, - DenseMatrix &diffusionVelocity) = 0; - MFEM_HOST_DEVICE virtual void ComputeFluxTransportProperties(const double *state, const double *gradUp, - const double *Efield, double radius, double distance, - double *transportBuffer, double *diffusionVelocity) = 0; + virtual void ComputeFluxTransportProperties(const Vector& state, const DenseMatrix& gradUp, const Vector& Efield, + double radius, double distance, Vector& transportBuffer, + DenseMatrix& diffusionVelocity) = 0; + MFEM_HOST_DEVICE virtual void ComputeFluxTransportProperties(const double* state, const double* gradUp, + const double* Efield, double radius, double distance, + double* transportBuffer, double* diffusionVelocity) = 0; // Source term will be constructed using ForcingTerms, which have pointers to primitive variables. // So we can use them in evaluating transport properties. // If this routine evaluate additional primitive variables, can return them just as the routine above. - virtual void ComputeSourceTransportProperties(const Vector &state, const Vector &Up, const DenseMatrix &gradUp, - const Vector &Efield, double distance, Vector &globalTransport, - DenseMatrix &speciesTransport, DenseMatrix &diffusionVelocity, - Vector &n_sp) = 0; - MFEM_HOST_DEVICE virtual void ComputeSourceTransportProperties(const double *state, const double *Up, - const double *gradUp, const double *Efield, - double distance, double *globalTransport, - double *speciesTransport, double *diffusionVelocity, - double *n_sp) = 0; + virtual void ComputeSourceTransportProperties(const Vector& state, const Vector& Up, const DenseMatrix& gradUp, + const Vector& Efield, double distance, Vector& globalTransport, + DenseMatrix& speciesTransport, DenseMatrix& diffusionVelocity, + Vector& n_sp) = 0; + MFEM_HOST_DEVICE virtual void ComputeSourceTransportProperties(const double* state, const double* Up, + const double* gradUp, const double* Efield, + double distance, double* globalTransport, + double* speciesTransport, double* diffusionVelocity, + double* n_sp) = 0; /** @brief Evaluate viscosity and bulk viscosity * @@ -116,7 +116,7 @@ class TransportProperties { * @param primitive Pointer to primitive state vector * @param visc Pointer to viscosities (visc[0] = dynamic viscosity, visc[1] = bulk viscosity) */ - MFEM_HOST_DEVICE virtual void GetViscosities(const double *conserved, const double *primitive, double *visc) = 0; + MFEM_HOST_DEVICE virtual void GetViscosities(const double* conserved, const double* primitive, double* visc) = 0; /** @brief Evaluate viscosity and bulk viscosity * @@ -133,67 +133,67 @@ class TransportProperties { * @param distance Distance to the nearest no-slip wall * @param visc Pointer to viscosities (visc[0] = dynamic viscosity, visc[1] = bulk viscosity) */ - MFEM_HOST_DEVICE virtual void GetViscosities(const double *conserved, const double *primitive, const double *gradUp, - double radius, double distance, double *visc) = 0; + MFEM_HOST_DEVICE virtual void GetViscosities(const double* conserved, const double* primitive, const double* gradUp, + double radius, double distance, double* visc) = 0; // For mixture-averaged diffusion, correct for mass conservation. - void correctMassDiffusionFlux(const Vector &Y_sp, DenseMatrix &diffusionVelocity); - MFEM_HOST_DEVICE void correctMassDiffusionFlux(const double *Y_sp, double *diffusionVelocity); + void correctMassDiffusionFlux(const Vector& Y_sp, DenseMatrix& diffusionVelocity); + MFEM_HOST_DEVICE void correctMassDiffusionFlux(const double* Y_sp, double* diffusionVelocity); // compute electric conductivity for mixture-averaged diffusions. // NOTE: in unit of ELECTRONCHARGE * AVOGADRONUMBER. - double computeMixtureElectricConductivity(const Vector &mobility, const Vector &n_sp); - MFEM_HOST_DEVICE double computeMixtureElectricConductivity(const double *mobility, const double *n_sp); + double computeMixtureElectricConductivity(const Vector& mobility, const Vector& n_sp); + MFEM_HOST_DEVICE double computeMixtureElectricConductivity(const double* mobility, const double* n_sp); // These are only for mixture-averaged diffusivity models. - void addAmbipolarEfield(const Vector &mobility, const Vector &n_sp, DenseMatrix &diffusionVelocity); - MFEM_HOST_DEVICE void addAmbipolarEfield(const double *mobility, const double *n_sp, double *diffusionVelocity); - void addMixtureDrift(const Vector &mobility, const Vector &n_sp, const Vector &Efield, - DenseMatrix &diffusionVelocity); - MFEM_HOST_DEVICE void addMixtureDrift(const double *mobility, const double *n_sp, const double *Efield, - double *diffusionVelocity); - double linearAverage(const Vector &X_sp, const Vector &speciesTransport); - MFEM_HOST_DEVICE double linearAverage(const double *X_sp, const double *speciesTransport); + void addAmbipolarEfield(const Vector& mobility, const Vector& n_sp, DenseMatrix& diffusionVelocity); + MFEM_HOST_DEVICE void addAmbipolarEfield(const double* mobility, const double* n_sp, double* diffusionVelocity); + void addMixtureDrift(const Vector& mobility, const Vector& n_sp, const Vector& Efield, + DenseMatrix& diffusionVelocity); + MFEM_HOST_DEVICE void addMixtureDrift(const double* mobility, const double* n_sp, const double* Efield, + double* diffusionVelocity); + double linearAverage(const Vector& X_sp, const Vector& speciesTransport); + MFEM_HOST_DEVICE double linearAverage(const double* X_sp, const double* speciesTransport); // Curtiss-Hirschfelder approximation of diffusivity. - void CurtissHirschfelder(const Vector &X_sp, const Vector &Y_sp, const DenseMatrix &binaryDiff, Vector &avgDiff); - MFEM_HOST_DEVICE void CurtissHirschfelder(const double *X_sp, const double *Y_sp, const double *binaryDiff, - double *avgDiff); + void CurtissHirschfelder(const Vector& X_sp, const Vector& Y_sp, const DenseMatrix& binaryDiff, Vector& avgDiff); + MFEM_HOST_DEVICE void CurtissHirschfelder(const double* X_sp, const double* Y_sp, const double* binaryDiff, + double* avgDiff); }; /** Class for molecular transport (as opposed to turbulent transport) */ class MolecularTransport : public TransportProperties { public: - MFEM_HOST_DEVICE MolecularTransport(GasMixture *_mixture) : TransportProperties(_mixture) {} + MFEM_HOST_DEVICE MolecularTransport(GasMixture* _mixture) : TransportProperties(_mixture) {} MFEM_HOST_DEVICE virtual ~MolecularTransport() {} - MFEM_HOST_DEVICE virtual void ComputeFluxMolecularTransport(const double *state, const double *gradUp, - const double *Efield, double *transportBuffer, - double *diffusionVelocity) = 0; + MFEM_HOST_DEVICE virtual void ComputeFluxMolecularTransport(const double* state, const double* gradUp, + const double* Efield, double* transportBuffer, + double* diffusionVelocity) = 0; - void ComputeFluxTransportProperties(const Vector &state, const DenseMatrix &gradUp, const Vector &Efield, - double radius, double distance, Vector &transportBuffer, - DenseMatrix &diffusionVelocity) final { + void ComputeFluxTransportProperties(const Vector& state, const DenseMatrix& gradUp, const Vector& Efield, + double radius, double distance, Vector& transportBuffer, + DenseMatrix& diffusionVelocity) final { transportBuffer.SetSize(FluxTrns::NUM_FLUX_TRANS); diffusionVelocity.SetSize(numSpecies, nvel_); ComputeFluxTransportProperties(&state[0], gradUp.Read(), &Efield[0], radius, distance, &transportBuffer[0], diffusionVelocity.Write()); } - MFEM_HOST_DEVICE void ComputeFluxTransportProperties(const double *state, const double *gradUp, const double *Efield, - double radius, double distance, double *transportBuffer, - double *diffusionVelocity) final { + MFEM_HOST_DEVICE void ComputeFluxTransportProperties(const double* state, const double* gradUp, const double* Efield, + double radius, double distance, double* transportBuffer, + double* diffusionVelocity) final { ComputeFluxMolecularTransport(state, gradUp, Efield, transportBuffer, diffusionVelocity); } - MFEM_HOST_DEVICE virtual void ComputeSourceMolecularTransport(const double *state, const double *Up, - const double *gradUp, const double *Efield, - double *globalTransport, double *speciesTransport, - double *diffusionVelocity, double *n_sp) = 0; + MFEM_HOST_DEVICE virtual void ComputeSourceMolecularTransport(const double* state, const double* Up, + const double* gradUp, const double* Efield, + double* globalTransport, double* speciesTransport, + double* diffusionVelocity, double* n_sp) = 0; - void ComputeSourceTransportProperties(const Vector &state, const Vector &Up, const DenseMatrix &gradUp, - const Vector &Efield, double distance, Vector &globalTransport, - DenseMatrix &speciesTransport, DenseMatrix &diffusionVelocity, - Vector &n_sp) final { + void ComputeSourceTransportProperties(const Vector& state, const Vector& Up, const DenseMatrix& gradUp, + const Vector& Efield, double distance, Vector& globalTransport, + DenseMatrix& speciesTransport, DenseMatrix& diffusionVelocity, + Vector& n_sp) final { globalTransport.SetSize(SrcTrns::NUM_SRC_TRANS); speciesTransport.SetSize(numSpecies, SpeciesTrns::NUM_SPECIES_COEFFS); n_sp.SetSize(numSpecies); @@ -202,20 +202,20 @@ class MolecularTransport : public TransportProperties { speciesTransport.Write(), diffusionVelocity.Write(), &n_sp[0]); } - MFEM_HOST_DEVICE void ComputeSourceTransportProperties(const double *state, const double *Up, const double *gradUp, - const double *Efield, double distance, double *globalTransport, - double *speciesTransport, double *diffusionVelocity, - double *n_sp) final { + MFEM_HOST_DEVICE void ComputeSourceTransportProperties(const double* state, const double* Up, const double* gradUp, + const double* Efield, double distance, double* globalTransport, + double* speciesTransport, double* diffusionVelocity, + double* n_sp) final { ComputeSourceMolecularTransport(state, Up, gradUp, Efield, globalTransport, speciesTransport, diffusionVelocity, n_sp); } - MFEM_HOST_DEVICE void GetViscosities(const double *conserved, const double *primitive, double *visc) override { + MFEM_HOST_DEVICE void GetViscosities(const double* conserved, const double* primitive, double* visc) override { printf("MolecularTransport::GetViscosities is not implemented!\n"); } - MFEM_HOST_DEVICE void GetViscosities(const double *conserved, const double *primitive, const double *gradUp, - double radius, double distance, double *visc) final { + MFEM_HOST_DEVICE void GetViscosities(const double* conserved, const double* primitive, const double* gradUp, + double radius, double distance, double* visc) final { GetViscosities(conserved, primitive, visc); } }; @@ -243,26 +243,26 @@ class DryAirTransport : public MolecularTransport { double Sc; // Schmidt number public: - DryAirTransport(GasMixture *_mixture, RunConfiguration &_runfile); - MFEM_HOST_DEVICE DryAirTransport(GasMixture *_mixture, const double viscosity_multiplier, const double bulk_viscosity, + DryAirTransport(GasMixture* _mixture, RunConfiguration& _runfile); + MFEM_HOST_DEVICE DryAirTransport(GasMixture* _mixture, const double viscosity_multiplier, const double bulk_viscosity, const double C1 = 1.458e-6, const double S = 110.4, const double Pr = 0.71); MFEM_HOST_DEVICE virtual ~DryAirTransport() {} - MFEM_HOST_DEVICE void ComputeFluxMolecularTransport(const double *state, const double *gradUp, const double *Efield, - double *transportBuffer, double *diffusionVelocity) final; + MFEM_HOST_DEVICE void ComputeFluxMolecularTransport(const double* state, const double* gradUp, const double* Efield, + double* transportBuffer, double* diffusionVelocity) final; - MFEM_HOST_DEVICE void ComputeSourceMolecularTransport(const double *state, const double *Up, const double *gradUp, - const double *Efield, double *globalTransport, - double *speciesTransport, double *diffusionVelocity, - double *n_sp) final {} + MFEM_HOST_DEVICE void ComputeSourceMolecularTransport(const double* state, const double* Up, const double* gradUp, + const double* Efield, double* globalTransport, + double* speciesTransport, double* diffusionVelocity, + double* n_sp) final {} using MolecularTransport::GetViscosities; - MFEM_HOST_DEVICE void GetViscosities(const double *conserved, const double *primitive, double *visc) final; + MFEM_HOST_DEVICE void GetViscosities(const double* conserved, const double* primitive, double* visc) final; }; -MFEM_HOST_DEVICE inline void DryAirTransport::GetViscosities(const double *conserved, const double *primitive, - double *visc) { +MFEM_HOST_DEVICE inline void DryAirTransport::GetViscosities(const double* conserved, const double* primitive, + double* visc) { const double temp = primitive[1 + nvel_]; visc[0] = (C1_ * visc_mult * pow(temp, 1.5) / (temp + S0_)); visc[1] = bulk_visc_mult * visc[0]; @@ -285,25 +285,25 @@ class ConstantTransport : public MolecularTransport { const double qeOverkB_ = ELECTRONCHARGE / BOLTZMANNCONSTANT; public: - ConstantTransport(GasMixture *_mixture, RunConfiguration &_runfile); - MFEM_HOST_DEVICE ConstantTransport(GasMixture *_mixture, const constantTransportData &inputs); + ConstantTransport(GasMixture* _mixture, RunConfiguration& _runfile); + MFEM_HOST_DEVICE ConstantTransport(GasMixture* _mixture, const constantTransportData& inputs); MFEM_HOST_DEVICE virtual ~ConstantTransport() {} - MFEM_HOST_DEVICE void ComputeFluxMolecularTransport(const double *state, const double *gradUp, const double *Efield, - double *transportBuffer, double *diffusionVelocity) final; + MFEM_HOST_DEVICE void ComputeFluxMolecularTransport(const double* state, const double* gradUp, const double* Efield, + double* transportBuffer, double* diffusionVelocity) final; - MFEM_HOST_DEVICE void ComputeSourceMolecularTransport(const double *state, const double *Up, const double *gradUp, - const double *Efield, double *globalTransport, - double *speciesTransport, double *diffusionVelocity, - double *n_sp) final; + MFEM_HOST_DEVICE void ComputeSourceMolecularTransport(const double* state, const double* Up, const double* gradUp, + const double* Efield, double* globalTransport, + double* speciesTransport, double* diffusionVelocity, + double* n_sp) final; using MolecularTransport::GetViscosities; - MFEM_HOST_DEVICE void GetViscosities(const double *conserved, const double *primitive, double *visc) final; + MFEM_HOST_DEVICE void GetViscosities(const double* conserved, const double* primitive, double* visc) final; }; -MFEM_HOST_DEVICE inline void ConstantTransport::GetViscosities(const double *conserved, const double *primitive, - double *visc) { +MFEM_HOST_DEVICE inline void ConstantTransport::GetViscosities(const double* conserved, const double* primitive, + double* visc) { visc[0] = viscosity_; visc[1] = bulkViscosity_; } diff --git a/src/turb_model_base.cpp b/src/turb_model_base.cpp index f9d9b3a6..52f8103c 100644 --- a/src/turb_model_base.cpp +++ b/src/turb_model_base.cpp @@ -34,7 +34,7 @@ using namespace mfem; -ZeroTurbModel::ZeroTurbModel(ParMesh *pmesh, int sorder) : pmesh_(pmesh), sorder_(sorder) {} +ZeroTurbModel::ZeroTurbModel(ParMesh* pmesh, int sorder) : pmesh_(pmesh), sorder_(sorder) {} ZeroTurbModel::~ZeroTurbModel() { delete eddy_viscosity_; diff --git a/src/turb_model_base.hpp b/src/turb_model_base.hpp index dee1df35..19891067 100644 --- a/src/turb_model_base.hpp +++ b/src/turb_model_base.hpp @@ -47,7 +47,7 @@ struct spongeToTurbModel; * turbulence model to the flow. */ struct turbModelToFlow { - const mfem::ParGridFunction *eddy_viscosity = nullptr; + const mfem::ParGridFunction* eddy_viscosity = nullptr; }; /** @@ -55,7 +55,7 @@ struct turbModelToFlow { * turbulence model to the thermo chem model. */ struct turbModelToThermoChem { - const mfem::ParGridFunction *eddy_viscosity = nullptr; + const mfem::ParGridFunction* eddy_viscosity = nullptr; }; struct extDataToTurbModel; @@ -73,10 +73,10 @@ struct turbModelToExtData {}; */ class TurbModelBase { protected: - const flowToTurbModel *flow_interface_; - const thermoChemToTurbModel *thermoChem_interface_; - const extDataToTurbModel *extData_interface_; - const spongeToTurbModel *sponge_interface_; + const flowToTurbModel* flow_interface_; + const thermoChemToTurbModel* thermoChem_interface_; + const extDataToTurbModel* extData_interface_; + const spongeToTurbModel* sponge_interface_; public: /// Destructor @@ -97,9 +97,9 @@ class TurbModelBase { /** * @brief Hook to let derived classes register visualization fields with ParaViewDataCollection */ - virtual void initializeViz(mfem::ParaViewDataCollection &pvdc) {} + virtual void initializeViz(mfem::ParaViewDataCollection& pvdc) {} - virtual void initializeIO(IODataOrganizer &io) {} + virtual void initializeIO(IODataOrganizer& io) {} /** * @brief Initialize model operators @@ -127,10 +127,10 @@ class TurbModelBase { * Initialize fields that the turbulence model needs from the * visc mult. */ - void initializeFromSponge(spongeToTurbModel *sponge) { sponge_interface_ = sponge; } + void initializeFromSponge(spongeToTurbModel* sponge) { sponge_interface_ = sponge; } /// Get interface provided by flow model - const spongeToTurbModel *getSpongeInterface() const { return sponge_interface_; } + const spongeToTurbModel* getSpongeInterface() const { return sponge_interface_; } /** * @brief Initialize data from the flow class @@ -138,10 +138,10 @@ class TurbModelBase { * Initialize fields that the turbulence model needs from the * flow. */ - void initializeFromFlow(flowToTurbModel *flow) { flow_interface_ = flow; } + void initializeFromFlow(flowToTurbModel* flow) { flow_interface_ = flow; } /// Get interface provided by flow model - const flowToTurbModel *getFlowInterface() const { return flow_interface_; } + const flowToTurbModel* getFlowInterface() const { return flow_interface_; } /// Interface object, provides fields necessary for the flow turbModelToFlow toFlow_interface_; @@ -152,10 +152,10 @@ class TurbModelBase { * Initialize fields that the turbulence model needs from the * thermochem model. */ - void initializeFromThermoChem(thermoChemToTurbModel *thermoChem) { thermoChem_interface_ = thermoChem; } + void initializeFromThermoChem(thermoChemToTurbModel* thermoChem) { thermoChem_interface_ = thermoChem; } /// Get interface provided by thermoChem model - const thermoChemToTurbModel *getThermoChemInterface() const { return thermoChem_interface_; } + const thermoChemToTurbModel* getThermoChemInterface() const { return thermoChem_interface_; } /// Interface object, provides fields necessary for the turbModel turbModelToThermoChem toThermoChem_interface_; @@ -166,16 +166,16 @@ class TurbModelBase { * Initialize fields that the turbulence model needs from the * external data. */ - void initializeFromExtData(extDataToTurbModel *extData) { extData_interface_ = extData; } + void initializeFromExtData(extDataToTurbModel* extData) { extData_interface_ = extData; } /// Get interface provided by external data - const extDataToTurbModel *getExtDataInterface() const { return extData_interface_; } + const extDataToTurbModel* getExtDataInterface() const { return extData_interface_; } /// Interface object, provides fields necessary for the turbModel turbModelToExtData toExtData_interface_; - virtual mfem::ParGridFunction *getCurrentEddyViscosity() { return nullptr; } - virtual mfem::ParGridFunction *getGridScale() { return nullptr; } + virtual mfem::ParGridFunction* getCurrentEddyViscosity() { return nullptr; } + virtual mfem::ParGridFunction* getGridScale() { return nullptr; } }; /** @@ -184,13 +184,13 @@ class TurbModelBase { */ class ZeroTurbModel final : public TurbModelBase { protected: - mfem::ParMesh *pmesh_; + mfem::ParMesh* pmesh_; const int sorder_; - mfem::FiniteElementCollection *fec_ = nullptr; - mfem::ParFiniteElementSpace *fes_ = nullptr; + mfem::FiniteElementCollection* fec_ = nullptr; + mfem::ParFiniteElementSpace* fes_ = nullptr; - mfem::ParGridFunction *eddy_viscosity_ = nullptr; + mfem::ParGridFunction* eddy_viscosity_ = nullptr; public: /** @@ -202,7 +202,7 @@ class ZeroTurbModel final : public TurbModelBase { * @param sorder The polynomial order for scalar fields * @param nuT The (zero) value to use for the eddy viscosity */ - ZeroTurbModel(mfem::ParMesh *pmesh, int sorder); + ZeroTurbModel(mfem::ParMesh* pmesh, int sorder); /// Free the interface fields and support objects ~ZeroTurbModel() final; diff --git a/src/utils.cpp b/src/utils.cpp index 3d7bbb68..0f9ac6fa 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -69,7 +69,7 @@ bool slurm_job_almost_done_mpi(MPI_Comm comm, int threshold); bool slurm_job_almost_done_mpi(MPI_Comm comm, int threshold) { int rank; MPI_Comm_rank(comm, &rank); - char *SLURM_JOB_ID = getenv("SLURM_JOB_ID"); + char* SLURM_JOB_ID = getenv("SLURM_JOB_ID"); if (SLURM_JOB_ID == NULL) { printf("[ERROR]: SLURM_JOB_ID env variable not set. Unable to query how much time remaining\n"); return false; @@ -157,7 +157,7 @@ bool M2ulPhyS::Check_ExitEarly(int iter) { } // check if file exists -bool file_exists(const std::string &name) { return (access(name.c_str(), F_OK) != -1); } +bool file_exists(const std::string& name) { return (access(name.c_str(), F_OK) != -1); } // Look for existence of output.pvd files in vis output directory and // keep a sequentially numbered copy. Useful when doing restart, @@ -188,7 +188,7 @@ void M2ulPhyS::Cache_Paraview_Timesteps() { } // Run system command and capture output -std::string systemCmd(const char *cmd) { +std::string systemCmd(const char* cmd) { std::array buffer; std::string result; std::unique_ptr pipe(popen(cmd, "r"), pclose); @@ -201,12 +201,12 @@ std::string systemCmd(const char *cmd) { return result; } -void LocalProjectDiscCoefficient(GridFunction &gf, VectorCoefficient &coeff, Array &dof_attr) { +void LocalProjectDiscCoefficient(GridFunction& gf, VectorCoefficient& coeff, Array& dof_attr) { Array vdofs; Vector vals; gf.HostWrite(); - FiniteElementSpace *fes = gf.FESpace(); + FiniteElementSpace* fes = gf.FESpace(); // maximal element attribute for each dof dof_attr.SetSize(fes->GetVSize()); @@ -246,7 +246,7 @@ void LocalProjectDiscCoefficient(GridFunction &gf, VectorCoefficient &coeff, Arr } } -void GlobalProjectDiscCoefficient(ParGridFunction &gf, VectorCoefficient &coeff) { +void GlobalProjectDiscCoefficient(ParGridFunction& gf, VectorCoefficient& coeff) { // local maximal element attribute for each dof Array ldof_attr; @@ -257,9 +257,9 @@ void GlobalProjectDiscCoefficient(ParGridFunction &gf, VectorCoefficient &coeff) Array gdof_attr; ldof_attr.Copy(gdof_attr); - ParFiniteElementSpace *pfes = gf.ParFESpace(); + ParFiniteElementSpace* pfes = gf.ParFESpace(); - GroupCommunicator &gcomm = pfes->GroupComm(); + GroupCommunicator& gcomm = pfes->GroupComm(); gcomm.Reduce(gdof_attr, GroupCommunicator::Max); gcomm.Bcast(gdof_attr); @@ -275,11 +275,11 @@ void GlobalProjectDiscCoefficient(ParGridFunction &gf, VectorCoefficient &coeff) } // parallel averaging plus interpolation to determine final values - HypreParVector *tv = pfes->NewTrueDofVector(); + HypreParVector* tv = pfes->NewTrueDofVector(); gcomm.Reduce(gdof_attr, GroupCommunicator::Sum); gcomm.Bcast(gdof_attr); - FiniteElementSpace *fes = gf.FESpace(); + FiniteElementSpace* fes = gf.FESpace(); for (int i = 0; i < fes->GetVSize(); i++) { gf(i) /= gdof_attr[i]; } @@ -288,8 +288,8 @@ void GlobalProjectDiscCoefficient(ParGridFunction &gf, VectorCoefficient &coeff) delete tv; } -bool h5ReadTable(const std::string &fileName, const std::string &datasetName, mfem::DenseMatrix &output, - mfem::Array &shape) { +bool h5ReadTable(const std::string& fileName, const std::string& datasetName, mfem::DenseMatrix& output, + mfem::Array& shape) { bool success = false; hid_t file = -1; if (file_exists(fileName)) { @@ -330,8 +330,8 @@ bool h5ReadTable(const std::string &fileName, const std::string &datasetName, mf return success; } -bool h5ReadBcastMultiColumnTable(const std::string &fileName, const std::string &datasetName, MPI_Comm TPSCommWorld, - mfem::DenseMatrix &output, std::vector &tables) { +bool h5ReadBcastMultiColumnTable(const std::string& fileName, const std::string& datasetName, MPI_Comm TPSCommWorld, + mfem::DenseMatrix& output, std::vector& tables) { int myrank; MPI_Comm_rank(TPSCommWorld, &myrank); const bool rank0 = (myrank == 0); @@ -357,7 +357,7 @@ bool h5ReadBcastMultiColumnTable(const std::string &fileName, const std::string assert(ncol == (int)tables.size() + 1); if (!rank0) output.SetSize(nrow, ncol); - double *h_table = output.HostReadWrite(); + double* h_table = output.HostReadWrite(); MPI_Bcast(h_table, nrow * ncol, MPI_DOUBLE, 0, TPSCommWorld); for (size_t icol = 0; icol < tables.size(); icol++) { @@ -368,8 +368,8 @@ bool h5ReadBcastMultiColumnTable(const std::string &fileName, const std::string return success; } -void evaluateDistanceSerial(mfem::Mesh &mesh, const mfem::Array &wall_patches, const mfem::GridFunction &coords, - mfem::GridFunction &distance) { +void evaluateDistanceSerial(mfem::Mesh& mesh, const mfem::Array& wall_patches, const mfem::GridFunction& coords, + mfem::GridFunction& distance) { distance = -1.0; // Initialize with invalid data // Tolerance for solve @@ -422,7 +422,7 @@ void evaluateDistanceSerial(mfem::Mesh &mesh, const mfem::Array &wall_patch // the wall distance is updated. // Get information about the current face - FaceElementTransformations *Tr = mesh.GetBdrFaceTransformations(bel); + FaceElementTransformations* Tr = mesh.GetBdrFaceTransformations(bel); const Geometry::Type gt = Tr->GetGeometryType(); const int rdim = Tr->GetDimension(); // dim of reference space (should be dim-1) assert(rdim == dim - 1); @@ -513,71 +513,71 @@ void evaluateDistanceSerial(mfem::Mesh &mesh, const mfem::Array &wall_patch } // end loop over points in GridFunction for distance } -void multConstScalar(double A, Vector B, Vector *C) { +void multConstScalar(double A, Vector B, Vector* C) { { - double *dataB = B.HostReadWrite(); - double *dataC = C->HostReadWrite(); + double* dataB = B.HostReadWrite(); + double* dataC = C->HostReadWrite(); MFEM_FORALL(i, B.Size(), { dataC[i] = A * dataB[i]; }); } } -void multConstScalarInv(double A, Vector B, Vector *C) { +void multConstScalarInv(double A, Vector B, Vector* C) { { - double *dataB = B.HostReadWrite(); - double *dataC = C->HostReadWrite(); + double* dataB = B.HostReadWrite(); + double* dataC = C->HostReadWrite(); MFEM_FORALL(i, B.Size(), { dataC[i] = A / dataB[i]; }); } } -void multConstVector(double A, Vector B, Vector *C) { +void multConstVector(double A, Vector B, Vector* C) { { - double *dataB = B.HostReadWrite(); - double *dataC = C->HostReadWrite(); + double* dataB = B.HostReadWrite(); + double* dataC = C->HostReadWrite(); MFEM_FORALL(i, B.Size(), { dataC[i] = A * dataB[i]; }); } } -void multConstScalarIP(double A, Vector *C) { +void multConstScalarIP(double A, Vector* C) { { - double *dataC = C->HostReadWrite(); + double* dataC = C->HostReadWrite(); MFEM_FORALL(i, C->Size(), { dataC[i] = A * dataC[i]; }); } } -void multConstScalarInvIP(double A, Vector *C) { +void multConstScalarInvIP(double A, Vector* C) { { - double *dataC = C->HostReadWrite(); + double* dataC = C->HostReadWrite(); MFEM_FORALL(i, C->Size(), { dataC[i] = A / dataC[i]; }); } } // not necessary -void multConstVectorIP(double A, Vector *C) { +void multConstVectorIP(double A, Vector* C) { { - double *dataC = C->HostReadWrite(); + double* dataC = C->HostReadWrite(); MFEM_FORALL(i, C->Size(), { dataC[i] = A * dataC[i]; }); } } -void multScalarScalar(Vector A, Vector B, Vector *C) { - double *dataA = A.HostReadWrite(); - double *dataB = B.HostReadWrite(); - double *dataC = C->HostReadWrite(); +void multScalarScalar(Vector A, Vector B, Vector* C) { + double* dataA = A.HostReadWrite(); + double* dataB = B.HostReadWrite(); + double* dataC = C->HostReadWrite(); MFEM_FORALL(i, A.Size(), { dataC[i] = dataA[i] * dataB[i]; }); } -void multScalarScalarInv(Vector A, Vector B, Vector *C) { - double *dataA = A.HostReadWrite(); - double *dataB = B.HostReadWrite(); - double *dataC = C->HostReadWrite(); +void multScalarScalarInv(Vector A, Vector B, Vector* C) { + double* dataA = A.HostReadWrite(); + double* dataB = B.HostReadWrite(); + double* dataC = C->HostReadWrite(); MFEM_FORALL(i, A.Size(), { dataC[i] = dataA[i] / dataB[i]; }); } -void multScalarVector(Vector A, Vector B, Vector *C, int dim) { +void multScalarVector(Vector A, Vector B, Vector* C, int dim) { int Ndof = A.Size(); - double *dataA = A.HostReadWrite(); - double *dataB = B.HostReadWrite(); - double *dataC = C->HostReadWrite(); + double* dataA = A.HostReadWrite(); + double* dataB = B.HostReadWrite(); + double* dataC = C->HostReadWrite(); for (int eq = 0; eq < dim; eq++) { for (int i = 0; i < Ndof; i++) { dataC[i + eq * Ndof] = dataA[i] * dataB[i + eq * Ndof]; @@ -585,11 +585,11 @@ void multScalarVector(Vector A, Vector B, Vector *C, int dim) { } } -void multScalarInvVector(Vector A, Vector B, Vector *C, int dim) { +void multScalarInvVector(Vector A, Vector B, Vector* C, int dim) { int Ndof = A.Size(); - double *dataA = A.HostReadWrite(); - double *dataB = B.HostReadWrite(); - double *dataC = C->HostReadWrite(); + double* dataA = A.HostReadWrite(); + double* dataB = B.HostReadWrite(); + double* dataC = C->HostReadWrite(); for (int eq = 0; eq < dim; eq++) { for (int i = 0; i < Ndof; i++) { dataC[i + eq * Ndof] = (1.0 / dataA[i]) * dataB[i + eq * Ndof]; @@ -597,10 +597,10 @@ void multScalarInvVector(Vector A, Vector B, Vector *C, int dim) { } } -void multScalarInvVectorIP(Vector A, Vector *C, int dim) { +void multScalarInvVectorIP(Vector A, Vector* C, int dim) { int Ndof = A.Size(); - double *dataA = A.HostReadWrite(); - double *dataC = C->HostReadWrite(); + double* dataA = A.HostReadWrite(); + double* dataC = C->HostReadWrite(); for (int eq = 0; eq < dim; eq++) { for (int i = 0; i < Ndof; i++) { dataC[i + eq * Ndof] = (1.0 / dataA[i]) * dataC[i + eq * Ndof]; @@ -608,12 +608,12 @@ void multScalarInvVectorIP(Vector A, Vector *C, int dim) { } } -void multVectorVector(Vector A, Vector B, Vector *C1, Vector *C2, Vector *C3, int dim) { +void multVectorVector(Vector A, Vector B, Vector* C1, Vector* C2, Vector* C3, int dim) { { int Ndof = A.Size() / dim; - double *dataA = A.HostReadWrite(); - double *dataB = B.HostReadWrite(); - double *dataC = C1->HostReadWrite(); + double* dataA = A.HostReadWrite(); + double* dataB = B.HostReadWrite(); + double* dataC = C1->HostReadWrite(); for (int eq = 0; eq < dim; eq++) { for (int i = 0; i < Ndof; i++) { dataC[i + eq * Ndof] = dataA[i + 0 * Ndof] * dataB[i + eq * Ndof]; @@ -623,9 +623,9 @@ void multVectorVector(Vector A, Vector B, Vector *C1, Vector *C2, Vector *C3, in { int Ndof = A.Size() / dim; - double *dataA = A.HostReadWrite(); - double *dataB = B.HostReadWrite(); - double *dataC = C2->HostReadWrite(); + double* dataA = A.HostReadWrite(); + double* dataB = B.HostReadWrite(); + double* dataC = C2->HostReadWrite(); for (int eq = 0; eq < dim; eq++) { for (int i = 0; i < Ndof; i++) { dataC[i + eq * Ndof] = dataA[i + 1 * Ndof] * dataB[i + eq * Ndof]; @@ -635,9 +635,9 @@ void multVectorVector(Vector A, Vector B, Vector *C1, Vector *C2, Vector *C3, in { int Ndof = A.Size() / dim; - double *dataA = A.HostReadWrite(); - double *dataB = B.HostReadWrite(); - double *dataC = C3->HostReadWrite(); + double* dataA = A.HostReadWrite(); + double* dataB = B.HostReadWrite(); + double* dataC = C3->HostReadWrite(); for (int eq = 0; eq < dim; eq++) { for (int i = 0; i < Ndof; i++) { dataC[i + eq * Ndof] = dataA[i + 2 * Ndof] * dataB[i + eq * Ndof]; @@ -646,11 +646,11 @@ void multVectorVector(Vector A, Vector B, Vector *C1, Vector *C2, Vector *C3, in } } -void dotVector(Vector A, Vector B, Vector *C, int dim) { +void dotVector(Vector A, Vector B, Vector* C, int dim) { int Ndof = A.Size() / dim; - double *dataA = A.HostReadWrite(); - double *dataB = B.HostReadWrite(); - double *data = C->HostReadWrite(); + double* dataA = A.HostReadWrite(); + double* dataB = B.HostReadWrite(); + double* data = C->HostReadWrite(); for (int i = 0; i < Ndof; i++) { data[i] = 0.0; } @@ -661,22 +661,22 @@ void dotVector(Vector A, Vector B, Vector *C, int dim) { } } -void multScalarScalarIP(Vector A, Vector *C) { - double *dataA = A.HostReadWrite(); - double *dataB = C->HostReadWrite(); +void multScalarScalarIP(Vector A, Vector* C) { + double* dataA = A.HostReadWrite(); + double* dataB = C->HostReadWrite(); MFEM_FORALL(i, A.Size(), { dataB[i] = dataA[i] * dataB[i]; }); } -void multScalarInvScalarIP(Vector A, Vector *C) { - double *dataA = A.HostReadWrite(); - double *dataB = C->HostReadWrite(); +void multScalarInvScalarIP(Vector A, Vector* C) { + double* dataA = A.HostReadWrite(); + double* dataB = C->HostReadWrite(); MFEM_FORALL(i, A.Size(), { dataB[i] = 1.0 / dataA[i] * dataB[i]; }); } -void multScalarVectorIP(Vector A, Vector *C, int dim) { +void multScalarVectorIP(Vector A, Vector* C, int dim) { int Ndof = A.Size(); - double *dataA = A.HostReadWrite(); - double *dataB = C->HostReadWrite(); + double* dataA = A.HostReadWrite(); + double* dataB = C->HostReadWrite(); for (int eq = 0; eq < dim; eq++) { for (int i = 0; i < Ndof; i++) { dataB[i + eq * Ndof] = dataA[i] * dataB[i + eq * Ndof]; @@ -684,22 +684,22 @@ void multScalarVectorIP(Vector A, Vector *C, int dim) { } } -void setScalarFromVector(Vector A, int ind, Vector *C) { +void setScalarFromVector(Vector A, int ind, Vector* C) { int Ndof = C->Size(); - const double *dataA = A.Read(); - double *data = C->Write(); + const double* dataA = A.Read(); + double* data = C->Write(); MFEM_FORALL(i, Ndof, { data[i] = dataA[i + ind * Ndof]; }); } -void setVectorFromScalar(Vector A, int ind, Vector *C) { +void setVectorFromScalar(Vector A, int ind, Vector* C) { int Ndof = A.Size(); - const double *dataA = A.Read(); - double *data = C->Write(); + const double* dataA = A.Read(); + double* data = C->Write(); MFEM_FORALL(i, Ndof, { data[i + ind * Ndof] = dataA[i]; }); } -void ComputeCurl3D(const ParGridFunction &u, ParGridFunction &cu) { - const FiniteElementSpace *fes = u.FESpace(); +void ComputeCurl3D(const ParGridFunction& u, ParGridFunction& cu) { + const FiniteElementSpace* fes = u.FESpace(); // AccumulateAndCountZones. Array zones_per_vdof; @@ -728,15 +728,15 @@ void ComputeCurl3D(const ParGridFunction &u, ParGridFunction &cu) { fes->GetElementVDofs(e, vdofs); u.GetSubVector(vdofs, loc_data); vals.SetSize(vdofs.Size()); - ElementTransformation *tr = fes->GetElementTransformation(e); - const FiniteElement *el = fes->GetFE(e); + ElementTransformation* tr = fes->GetElementTransformation(e); + const FiniteElement* el = fes->GetFE(e); elndofs = el->GetDof(); int dim = el->GetDim(); dshape.SetSize(elndofs, dim); for (int dof = 0; dof < elndofs; ++dof) { // Project. - const IntegrationPoint &ip = el->GetNodes().IntPoint(dof); + const IntegrationPoint& ip = el->GetNodes().IntPoint(dof); tr->SetIntPoint(&ip); // Eval and GetVectorGradientHat. @@ -745,7 +745,7 @@ void ComputeCurl3D(const ParGridFunction &u, ParGridFunction &cu) { DenseMatrix loc_data_mat(loc_data.GetData(), elndofs, vdim); MultAtB(loc_data_mat, dshape, grad_hat); - const DenseMatrix &Jinv = tr->InverseJacobian(); + const DenseMatrix& Jinv = tr->InverseJacobian(); grad.SetSize(grad_hat.Height(), Jinv.Width()); Mult(grad_hat, Jinv, grad); @@ -770,7 +770,7 @@ void ComputeCurl3D(const ParGridFunction &u, ParGridFunction &cu) { // Communication // Count the zones globally. - GroupCommunicator &gcomm = u.ParFESpace()->GroupComm(); + GroupCommunicator& gcomm = u.ParFESpace()->GroupComm(); gcomm.Reduce(zones_per_vdof, GroupCommunicator::Sum); gcomm.Bcast(zones_per_vdof); @@ -787,15 +787,15 @@ void ComputeCurl3D(const ParGridFunction &u, ParGridFunction &cu) { } } -void vectorGrad3D(ParGridFunction &uSub, ParGridFunction &u, ParGridFunction &gu, ParGridFunction &gv, - ParGridFunction &gw) { +void vectorGrad3D(ParGridFunction& uSub, ParGridFunction& u, ParGridFunction& gu, ParGridFunction& gv, + ParGridFunction& gw) { // FiniteElementSpace *sfes = uSub.FESpace(); int dim = 3; int nSize = uSub.Size(); { - double *dataSub = uSub.HostReadWrite(); - double *data = u.HostReadWrite(); + double* dataSub = uSub.HostReadWrite(); + double* data = u.HostReadWrite(); for (int i = 0; i < nSize; i++) { dataSub[i] = data[i + 0 * nSize]; } @@ -803,8 +803,8 @@ void vectorGrad3D(ParGridFunction &uSub, ParGridFunction &u, ParGridFunction &gu scalarGrad3D(uSub, gu); { - double *dataSub = uSub.HostReadWrite(); - double *data = u.HostReadWrite(); + double* dataSub = uSub.HostReadWrite(); + double* data = u.HostReadWrite(); for (int i = 0; i < nSize; i++) { dataSub[i] = data[i + 1 * nSize]; } @@ -812,8 +812,8 @@ void vectorGrad3D(ParGridFunction &uSub, ParGridFunction &u, ParGridFunction &gu scalarGrad3D(uSub, gv); if (dim == 3) { - double *dataSub = uSub.HostReadWrite(); - double *data = u.HostReadWrite(); + double* dataSub = uSub.HostReadWrite(); + double* data = u.HostReadWrite(); for (int i = 0; i < nSize; i++) { dataSub[i] = data[i + 2 * nSize]; } @@ -821,9 +821,9 @@ void vectorGrad3D(ParGridFunction &uSub, ParGridFunction &u, ParGridFunction &gu } } -void scalarGrad3D(ParGridFunction &u, ParGridFunction &gu) { - FiniteElementSpace *fes = u.FESpace(); - GroupCommunicator &gcomm = u.ParFESpace()->GroupComm(); +void scalarGrad3D(ParGridFunction& u, ParGridFunction& gu) { + FiniteElementSpace* fes = u.FESpace(); + GroupCommunicator& gcomm = u.ParFESpace()->GroupComm(); int dim = 3; // spatial dimension int vdim = fes->GetVDim(); // vector dimension (or u) @@ -851,8 +851,8 @@ void scalarGrad3D(ParGridFunction &u, ParGridFunction &gu) { vals1.SetSize(vdofs.Size()); vals2.SetSize(vdofs.Size()); vals3.SetSize(vdofs.Size()); - ElementTransformation *tr = fes->GetElementTransformation(e); - const FiniteElement *el = fes->GetFE(e); + ElementTransformation* tr = fes->GetElementTransformation(e); + const FiniteElement* el = fes->GetFE(e); elndofs = el->GetDof(); int dim = el->GetDim(); dshape.SetSize(elndofs, dim); @@ -860,7 +860,7 @@ void scalarGrad3D(ParGridFunction &u, ParGridFunction &gu) { // element dof for (int dof = 0; dof < elndofs; ++dof) { // Project. - const IntegrationPoint &ip = el->GetNodes().IntPoint(dof); + const IntegrationPoint& ip = el->GetNodes().IntPoint(dof); tr->SetIntPoint(&ip); // Eval and GetVectorGradientHat. @@ -870,7 +870,7 @@ void scalarGrad3D(ParGridFunction &u, ParGridFunction &gu) { DenseMatrix loc_data_mat(loc_data.GetData(), elndofs, vdim); MultAtB(loc_data_mat, dshape, grad_hat); - const DenseMatrix &Jinv = tr->InverseJacobian(); + const DenseMatrix& Jinv = tr->InverseJacobian(); grad.SetSize(grad_hat.Height(), Jinv.Width()); Mult(grad_hat, Jinv, grad); @@ -906,7 +906,7 @@ void scalarGrad3D(ParGridFunction &u, ParGridFunction &gu) { gcomm.Bcast(zones_per_vdof); // Accumulate for all vdofs. - GroupCommunicator &gcomm_g = gu.ParFESpace()->GroupComm(); + GroupCommunicator& gcomm_g = gu.ParFESpace()->GroupComm(); gcomm_g.Reduce(gu.GetData(), GroupCommunicator::Sum); gcomm_g.Bcast(gu.GetData()); @@ -919,8 +919,8 @@ void scalarGrad3D(ParGridFunction &u, ParGridFunction &gu) { } } -void ComputeCurl2D(const ParGridFunction &u, ParGridFunction &cu, bool assume_scalar) { - const FiniteElementSpace *fes = u.FESpace(); +void ComputeCurl2D(const ParGridFunction& u, ParGridFunction& cu, bool assume_scalar) { + const FiniteElementSpace* fes = u.FESpace(); // AccumulateAndCountZones. Array zones_per_vdof; @@ -949,15 +949,15 @@ void ComputeCurl2D(const ParGridFunction &u, ParGridFunction &cu, bool assume_sc fes->GetElementVDofs(e, vdofs); u.GetSubVector(vdofs, loc_data); vals.SetSize(vdofs.Size()); - ElementTransformation *tr = fes->GetElementTransformation(e); - const FiniteElement *el = fes->GetFE(e); + ElementTransformation* tr = fes->GetElementTransformation(e); + const FiniteElement* el = fes->GetFE(e); elndofs = el->GetDof(); int dim = el->GetDim(); dshape.SetSize(elndofs, dim); for (int dof = 0; dof < elndofs; ++dof) { // Project. - const IntegrationPoint &ip = el->GetNodes().IntPoint(dof); + const IntegrationPoint& ip = el->GetNodes().IntPoint(dof); tr->SetIntPoint(&ip); // Eval and GetVectorGradientHat. @@ -966,7 +966,7 @@ void ComputeCurl2D(const ParGridFunction &u, ParGridFunction &cu, bool assume_sc DenseMatrix loc_data_mat(loc_data.GetData(), elndofs, vdim); MultAtB(loc_data_mat, dshape, grad_hat); - const DenseMatrix &Jinv = tr->InverseJacobian(); + const DenseMatrix& Jinv = tr->InverseJacobian(); grad.SetSize(grad_hat.Height(), Jinv.Width()); Mult(grad_hat, Jinv, grad); @@ -996,7 +996,7 @@ void ComputeCurl2D(const ParGridFunction &u, ParGridFunction &cu, bool assume_sc // Communication. // Count the zones globally. - GroupCommunicator &gcomm = u.ParFESpace()->GroupComm(); + GroupCommunicator& gcomm = u.ParFESpace()->GroupComm(); gcomm.Reduce(zones_per_vdof, GroupCommunicator::Sum); gcomm.Bcast(zones_per_vdof); @@ -1013,9 +1013,9 @@ void ComputeCurl2D(const ParGridFunction &u, ParGridFunction &cu, bool assume_sc } } -void ComputeCurlAxi(const ParGridFunction &u, ParGridFunction &cu, bool assume_scalar) { - const FiniteElementSpace *fes = u.FESpace(); - const FiniteElementSpace *cfes = cu.FESpace(); +void ComputeCurlAxi(const ParGridFunction& u, ParGridFunction& cu, bool assume_scalar) { + const FiniteElementSpace* fes = u.FESpace(); + const FiniteElementSpace* cfes = cu.FESpace(); // AccumulateAndCountZones. Array zones_per_vdof; @@ -1048,15 +1048,15 @@ void ComputeCurlAxi(const ParGridFunction &u, ParGridFunction &cu, bool assume_s u.GetSubVector(vdofs, loc_data); vals.SetSize(cvdofs.Size()); - ElementTransformation *tr = fes->GetElementTransformation(e); - const FiniteElement *el = fes->GetFE(e); + ElementTransformation* tr = fes->GetElementTransformation(e); + const FiniteElement* el = fes->GetFE(e); elndofs = el->GetDof(); int dim = el->GetDim(); dshape.SetSize(elndofs, dim); for (int dof = 0; dof < elndofs; ++dof) { // Project. - const IntegrationPoint &ip = el->GetNodes().IntPoint(dof); + const IntegrationPoint& ip = el->GetNodes().IntPoint(dof); tr->SetIntPoint(&ip); tr->Transform(ip, spatial_location); @@ -1068,7 +1068,7 @@ void ComputeCurlAxi(const ParGridFunction &u, ParGridFunction &cu, bool assume_s DenseMatrix loc_data_mat(loc_data.GetData(), elndofs, vdim); MultAtB(loc_data_mat, dshape, grad_hat); - const DenseMatrix &Jinv = tr->InverseJacobian(); + const DenseMatrix& Jinv = tr->InverseJacobian(); grad.SetSize(grad_hat.Height(), Jinv.Width()); Mult(grad_hat, Jinv, grad); @@ -1104,7 +1104,7 @@ void ComputeCurlAxi(const ParGridFunction &u, ParGridFunction &cu, bool assume_s // Communication. // Count the zones globally. - GroupCommunicator &gcomm = u.ParFESpace()->GroupComm(); + GroupCommunicator& gcomm = u.ParFESpace()->GroupComm(); gcomm.Reduce(zones_per_vdof, GroupCommunicator::Sum); gcomm.Bcast(zones_per_vdof); @@ -1121,7 +1121,7 @@ void ComputeCurlAxi(const ParGridFunction &u, ParGridFunction &cu, bool assume_s } } -void scalarGrad3DV(FiniteElementSpace *fes, FiniteElementSpace *vfes, Vector u, Vector *gu) { +void scalarGrad3DV(FiniteElementSpace* fes, FiniteElementSpace* vfes, Vector u, Vector* gu) { ParGridFunction R0_gf; R0_gf.SetSpace(fes); @@ -1133,7 +1133,7 @@ void scalarGrad3DV(FiniteElementSpace *fes, FiniteElementSpace *vfes, Vector u, R1_gf.GetTrueDofs(*gu); } -void streamwiseTensor(const Vector &vel, DenseMatrix &swMgbl) { +void streamwiseTensor(const Vector& vel, DenseMatrix& swMgbl) { int dim = vel.Size(); swMgbl.SetSize(dim, dim); @@ -1157,11 +1157,11 @@ void streamwiseTensor(const Vector &vel, DenseMatrix &swMgbl) { double csupgFactor(double Reh, double Reh_factor, double Reh_offset) { return Reh_factor * (tanh(Reh) + Reh_offset); } -void EliminateRHS(Operator &A, ConstrainedOperator &constrainedA, const Array &ess_tdof_list, Vector &x, Vector &b, - Vector &X, Vector &B, int copy_interior) { - const Operator *Po = A.GetOutputProlongation(); - const Operator *Pi = A.GetProlongation(); - const Operator *Ri = A.GetRestriction(); +void EliminateRHS(Operator& A, ConstrainedOperator& constrainedA, const Array& ess_tdof_list, Vector& x, Vector& b, + Vector& X, Vector& B, int copy_interior) { + const Operator* Po = A.GetOutputProlongation(); + const Operator* Pi = A.GetProlongation(); + const Operator* Ri = A.GetRestriction(); A.InitTVectors(Po, Ri, Pi, x, b, X, B); if (!copy_interior) { X.SetSubVectorComplement(ess_tdof_list, 0.0); @@ -1169,7 +1169,7 @@ void EliminateRHS(Operator &A, ConstrainedOperator &constrainedA, const Array(global_size); } -bool copyFile(const char *SRC, const char *DEST) { +bool copyFile(const char* SRC, const char* DEST) { std::ifstream src(SRC, std::ios::binary); std::ofstream dest(DEST, std::ios::binary); dest << src.rdbuf(); return src && dest; } -void makeContinuous(ParGridFunction &u) { - FiniteElementSpace *fes = u.FESpace(); +void makeContinuous(ParGridFunction& u) { + FiniteElementSpace* fes = u.FESpace(); ParGridFunction au; au.SetSpace(fes); @@ -1208,7 +1208,7 @@ void makeContinuous(ParGridFunction &u) { fes->GetElementVDofs(e, vdofs); u.GetSubVector(vdofs, loc_data); vals.SetSize(vdofs.Size()); - const FiniteElement *el = fes->GetFE(e); + const FiniteElement* el = fes->GetFE(e); elndofs = el->GetDof(); for (int dof = 0; dof < elndofs; ++dof) { vals(dof) = loc_data(dof); @@ -1225,7 +1225,7 @@ void makeContinuous(ParGridFunction &u) { // Communication // Count the zones globally. - GroupCommunicator &gcomm = u.ParFESpace()->GroupComm(); + GroupCommunicator& gcomm = u.ParFESpace()->GroupComm(); gcomm.Reduce(zones_per_vdof, GroupCommunicator::Sum); gcomm.Bcast(zones_per_vdof); @@ -1246,7 +1246,7 @@ void makeContinuous(ParGridFunction &u) { } void readTable(MPI_Comm TPSCommWorld, std::string filename, bool xLogScale, bool fLogScale, int order, - std::list &tableHost, TableInput &result) { + std::list& tableHost, TableInput& result) { int myrank; MPI_Comm_rank(TPSCommWorld, &myrank); const bool rank0 = (myrank == 0); @@ -1269,7 +1269,7 @@ void readTable(MPI_Comm TPSCommWorld, std::string filename, bool xLogScale, bool success = (suc_int != 0); if (!success) exit(ERROR); - int *d_dims = dims.GetData(); + int* d_dims = dims.GetData(); MPI_Bcast(&Ndata, 1, MPI_INT, 0, TPSCommWorld); MPI_Bcast(d_dims, 2, MPI_INT, 0, TPSCommWorld); assert(dims[0] > 0); @@ -1277,7 +1277,7 @@ void readTable(MPI_Comm TPSCommWorld, std::string filename, bool xLogScale, bool // all not 0 ranks have not had matrix size set as in h5ReadTable if (!rank0) tableHost.back().SetSize(dims[0], dims[1]); - double *d_table = tableHost.back().HostReadWrite(); + double* d_table = tableHost.back().HostReadWrite(); MPI_Bcast(d_table, dims[0] * dims[1], MPI_DOUBLE, 0, TPSCommWorld); result.Ndata = Ndata; @@ -1288,19 +1288,19 @@ void readTable(MPI_Comm TPSCommWorld, std::string filename, bool xLogScale, bool } namespace mfem { -GradientVectorGridFunctionCoefficient::GradientVectorGridFunctionCoefficient(const GridFunction *gf) +GradientVectorGridFunctionCoefficient::GradientVectorGridFunctionCoefficient(const GridFunction* gf) : MatrixCoefficient((gf) ? gf->VectorDim() : 0) { GridFunc = gf; } -void GradientVectorGridFunctionCoefficient::SetGridFunction(const GridFunction *gf) { +void GradientVectorGridFunctionCoefficient::SetGridFunction(const GridFunction* gf) { GridFunc = gf; const int dim = (gf) ? gf->VectorDim() : 0; height = width = dim; } -void GradientVectorGridFunctionCoefficient::Eval(DenseMatrix &G, ElementTransformation &T, const IntegrationPoint &ip) { - Mesh *gf_mesh = GridFunc->FESpace()->GetMesh(); +void GradientVectorGridFunctionCoefficient::Eval(DenseMatrix& G, ElementTransformation& T, const IntegrationPoint& ip) { + Mesh* gf_mesh = GridFunc->FESpace()->GetMesh(); if (T.mesh->GetNE() == gf_mesh->GetNE()) { GridFunc->GetVectorGradient(T, G); } else { @@ -1312,23 +1312,23 @@ void GradientVectorGridFunctionCoefficient::Eval(DenseMatrix &G, ElementTransfor #if MFEM_VERSION >= 40700 // mfem 4.7 and later - const Mesh &fine_mesh = *T.mesh; + const Mesh& fine_mesh = *T.mesh; #else // older versions - Mesh &fine_mesh = *T.mesh; + Mesh& fine_mesh = *T.mesh; #endif // Get the element transformation of the coarse element containing the // fine element. int fine_element = T.ElementNo; - const CoarseFineTransformations &cf = fine_mesh.GetRefinementTransforms(); + const CoarseFineTransformations& cf = fine_mesh.GetRefinementTransforms(); int coarse_element = cf.embeddings[fine_element].parent; - ElementTransformation *coarse_T = gf_mesh->GetElementTransformation(coarse_element); + ElementTransformation* coarse_T = gf_mesh->GetElementTransformation(coarse_element); // Transform the integration point from fine element coordinates to coarse // element coordinates. Geometry::Type geom = T.GetGeometryType(); IntegrationPointTransformation fine_to_coarse; - IsoparametricTransformation &emb_tr = fine_to_coarse.Transf; + IsoparametricTransformation& emb_tr = fine_to_coarse.Transf; emb_tr.SetIdentityTransformation(geom); emb_tr.SetPointMat(cf.point_matrices[geom](cf.embeddings[fine_element].matrix)); fine_to_coarse.Transform(ip, coarse_ip); @@ -1338,7 +1338,7 @@ void GradientVectorGridFunctionCoefficient::Eval(DenseMatrix &G, ElementTransfor } } -VectorMagnitudeCoefficient::VectorMagnitudeCoefficient(VectorCoefficient &A) : a(&A), va(A.GetVDim()) {} +VectorMagnitudeCoefficient::VectorMagnitudeCoefficient(VectorCoefficient& A) : a(&A), va(A.GetVDim()) {} void VectorMagnitudeCoefficient::SetTime(double t) { if (a) { @@ -1347,7 +1347,7 @@ void VectorMagnitudeCoefficient::SetTime(double t) { this->Coefficient::SetTime(t); } -double VectorMagnitudeCoefficient::Eval(ElementTransformation &T, const IntegrationPoint &ip) { +double VectorMagnitudeCoefficient::Eval(ElementTransformation& T, const IntegrationPoint& ip) { a->Eval(va, T, ip); return std::max(std::sqrt(va * va), 1.0e-18); } @@ -1357,7 +1357,7 @@ void TransformedMatrixVectorCoefficient::SetTime(double t) { this->MatrixCoefficient::SetTime(t); } -void TransformedMatrixVectorCoefficient::Eval(DenseMatrix &G, ElementTransformation &T, const IntegrationPoint &ip) { +void TransformedMatrixVectorCoefficient::Eval(DenseMatrix& G, ElementTransformation& T, const IntegrationPoint& ip) { Vector buf; buf.SetSize(Q1->GetVDim()); Q1->Eval(buf, T, ip); @@ -1374,7 +1374,7 @@ void ExtTransformedCoefficient::SetTime(double t) { this->Coefficient::SetTime(t); } -double ExtTransformedCoefficient::Eval(ElementTransformation &T, const IntegrationPoint &ip) { +double ExtTransformedCoefficient::Eval(ElementTransformation& T, const IntegrationPoint& ip) { if (Q2) { return Transform2(Q1->Eval(T, ip, GetTime()), Q2->Eval(T, ip, GetTime())); } else { diff --git a/src/utils.hpp b/src/utils.hpp index a8e05c35..b8f84d8c 100644 --- a/src/utils.hpp +++ b/src/utils.hpp @@ -55,8 +55,8 @@ enum ExitCodes { NORMAL = 0, ERROR = 1, JOB_RESTART = 10, EARLY_EXIT = 11 }; // Misc. utilities -bool file_exists(const std::string &name); -std::string systemCmd(const char *cmd); +bool file_exists(const std::string& name); +std::string systemCmd(const char* cmd); // HDF5 convenience utilities inline hid_t h5_getType(int) { return (H5T_NATIVE_INT); } @@ -77,7 +77,7 @@ void h5_save_attribute(hid_t dest, std::string attribute, T value) { } template -void h5_read_attribute(hid_t source, std::string attribute, T &value) { +void h5_read_attribute(hid_t source, std::string attribute, T& value) { herr_t status; hid_t attr; hid_t attrType = h5_getType(value); @@ -91,8 +91,8 @@ void h5_read_attribute(hid_t source, std::string attribute, T &value) { // A simple HDF5 routine to read two-dimensional array into DenseMatrix. // Return result as boolean. -bool h5ReadTable(const std::string &fileName, const std::string &datasetName, mfem::DenseMatrix &output, - mfem::Array &shape); +bool h5ReadTable(const std::string& fileName, const std::string& datasetName, mfem::DenseMatrix& output, + mfem::Array& shape); /** Read multi-column table * @@ -101,11 +101,11 @@ bool h5ReadTable(const std::string &fileName, const std::string &datasetName, mf * are broadcast to all ranks. The length of the input std::vector of * TableInput must match the number of columsn read. */ -bool h5ReadBcastMultiColumnTable(const std::string &fileName, const std::string &datasetName, MPI_Comm TPSCommWorld, - mfem::DenseMatrix &output, std::vector &tables); +bool h5ReadBcastMultiColumnTable(const std::string& fileName, const std::string& datasetName, MPI_Comm TPSCommWorld, + mfem::DenseMatrix& output, std::vector& tables); void readTable(MPI_Comm TPSCommWorld, std::string filename, bool xLogScale, bool fLogScale, int order, - std::list &tableHost, TableInput &result); + std::list& tableHost, TableInput& result); // MFEM extensions @@ -120,7 +120,7 @@ void readTable(MPI_Comm TPSCommWorld, std::string filename, bool xLogScale, bool * mfem::GridFunction::ProjectDiscCoefficient but has fixes s.t. it * will work with Nedelec elements. */ -void LocalProjectDiscCoefficient(mfem::GridFunction &gf, mfem::VectorCoefficient &coeff, mfem::Array &dof_attr); +void LocalProjectDiscCoefficient(mfem::GridFunction& gf, mfem::VectorCoefficient& coeff, mfem::Array& dof_attr); /** Project discontinous function onto FE space * @@ -132,7 +132,7 @@ void LocalProjectDiscCoefficient(mfem::GridFunction &gf, mfem::VectorCoefficient * mfem::ParGridFunction::ProjectDiscCoefficient but calls * LocalProjectDiscCoefficient. */ -void GlobalProjectDiscCoefficient(mfem::ParGridFunction &gf, mfem::VectorCoefficient &coeff); +void GlobalProjectDiscCoefficient(mfem::ParGridFunction& gf, mfem::VectorCoefficient& coeff); /** @brief Evaluate the distance function * @@ -149,62 +149,62 @@ void GlobalProjectDiscCoefficient(mfem::ParGridFunction &gf, mfem::VectorCoeffic * This function is not guarenteed to work for nonlinear elements. * See comments in source about why. */ -void evaluateDistanceSerial(mfem::Mesh &mesh, const mfem::Array &wall_patches, const mfem::GridFunction &coords, - mfem::GridFunction &distance); - -void multConstScalar(double A, Vector B, Vector *C); -void multConstScalarInv(double A, Vector B, Vector *C); -void multConstVector(double A, Vector B, Vector *C); -void multConstScalarIP(double A, Vector *C); -void multConstScalarInvIP(double A, Vector *C); -void multConstVectorIP(double A, Vector *C); -void multScalarScalar(Vector A, Vector B, Vector *C); -void multScalarScalarInv(Vector A, Vector B, Vector *C); -void multScalarVector(Vector A, Vector B, Vector *C, int dim = 3); -void multScalarInvVector(Vector A, Vector B, Vector *C, int dim = 3); -void multScalarInvVectorIP(Vector A, Vector *C, int dim = 3); -void multVectorVector(Vector A, Vector B, Vector *C1, Vector *C2, Vector *C3, int dim = 3); -void dotVector(Vector A, Vector B, Vector *C, int dim = 3); -void multScalarScalarIP(Vector A, Vector *C); -void multScalarInvScalarIP(Vector A, Vector *C); -void multScalarVectorIP(Vector A, Vector *C, int dim = 3); -void setScalarFromVector(Vector A, int ind, Vector *C); -void setVectorFromScalar(Vector A, int ind, Vector *C); +void evaluateDistanceSerial(mfem::Mesh& mesh, const mfem::Array& wall_patches, const mfem::GridFunction& coords, + mfem::GridFunction& distance); + +void multConstScalar(double A, Vector B, Vector* C); +void multConstScalarInv(double A, Vector B, Vector* C); +void multConstVector(double A, Vector B, Vector* C); +void multConstScalarIP(double A, Vector* C); +void multConstScalarInvIP(double A, Vector* C); +void multConstVectorIP(double A, Vector* C); +void multScalarScalar(Vector A, Vector B, Vector* C); +void multScalarScalarInv(Vector A, Vector B, Vector* C); +void multScalarVector(Vector A, Vector B, Vector* C, int dim = 3); +void multScalarInvVector(Vector A, Vector B, Vector* C, int dim = 3); +void multScalarInvVectorIP(Vector A, Vector* C, int dim = 3); +void multVectorVector(Vector A, Vector B, Vector* C1, Vector* C2, Vector* C3, int dim = 3); +void dotVector(Vector A, Vector B, Vector* C, int dim = 3); +void multScalarScalarIP(Vector A, Vector* C); +void multScalarInvScalarIP(Vector A, Vector* C); +void multScalarVectorIP(Vector A, Vector* C, int dim = 3); +void setScalarFromVector(Vector A, int ind, Vector* C); +void setVectorFromScalar(Vector A, int ind, Vector* C); /// Compute \f$\nabla \times \nabla \times u\f$ for \f$u \in (H^1)^2\f$. -void ComputeCurl2D(const ParGridFunction &u, ParGridFunction &cu, bool assume_scalar = false); +void ComputeCurl2D(const ParGridFunction& u, ParGridFunction& cu, bool assume_scalar = false); -void ComputeCurlAxi(const ParGridFunction &u, ParGridFunction &cu, bool assume_scalar = false); +void ComputeCurlAxi(const ParGridFunction& u, ParGridFunction& cu, bool assume_scalar = false); /// Compute \f$\nabla \times \nabla \times u\f$ for \f$u \in (H^1)^3\f$. -void ComputeCurl3D(const ParGridFunction &u, ParGridFunction &cu); +void ComputeCurl3D(const ParGridFunction& u, ParGridFunction& cu); -void vectorGrad3D(ParGridFunction &uSub, ParGridFunction &u, ParGridFunction &gu, ParGridFunction &gv, - ParGridFunction &gw); -void scalarGrad3D(ParGridFunction &u, ParGridFunction &gu); +void vectorGrad3D(ParGridFunction& uSub, ParGridFunction& u, ParGridFunction& gu, ParGridFunction& gv, + ParGridFunction& gw); +void scalarGrad3D(ParGridFunction& u, ParGridFunction& gu); // void vectorGrad3DV(FiniteElementSpace *fes, Vector u, Vector *gu, Vector *gv, Vector *gw); -void scalarGrad3DV(FiniteElementSpace *fes, FiniteElementSpace *vfes, Vector u, Vector *gu); -void makeContinuous(ParGridFunction &u); +void scalarGrad3DV(FiniteElementSpace* fes, FiniteElementSpace* vfes, Vector u, Vector* gu); +void makeContinuous(ParGridFunction& u); -bool copyFile(const char *SRC, const char *DEST); +bool copyFile(const char* SRC, const char* DEST); /// upwind diffusion support: evaluate u * u^T / ||u||^2 -void streamwiseTensor(const Vector &vel, DenseMatrix &swMgbl); +void streamwiseTensor(const Vector& vel, DenseMatrix& swMgbl); /// upwind diffusion support: evaluate supg constant double csupgFactor(double Reh, double Reh_factor, double Reh_offset); /// Eliminate essential BCs in an Operator and apply to RHS. /// rename this to something sensible "ApplyEssentialBC" or something -void EliminateRHS(Operator &A, ConstrainedOperator &constrainedA, const Array &ess_tdof_list, Vector &x, Vector &b, - Vector &X, Vector &B, int copy_interior = 0); +void EliminateRHS(Operator& A, ConstrainedOperator& constrainedA, const Array& ess_tdof_list, Vector& x, Vector& b, + Vector& X, Vector& B, int copy_interior = 0); /// Remove mean from a Vector. /** * Modify the Vector @a v by subtracting its mean using * \f$v = v - \frac{\sum_i^N v_i}{N} \f$ */ -void Orthogonalize(Vector &v, MPI_Comm comm); +void Orthogonalize(Vector& v, MPI_Comm comm); // Adding to the mfem namespace namespace mfem { @@ -212,21 +212,21 @@ namespace mfem { /// Matrix coefficient defined as the Gradient of a Vector GridFunction class GradientVectorGridFunctionCoefficient : public MatrixCoefficient { protected: - const GridFunction *GridFunc; + const GridFunction* GridFunc; public: /** @brief Construct the coefficient with a scalar grid function @a gf. The grid function is not owned by the coefficient. */ - GradientVectorGridFunctionCoefficient(const GridFunction *gf); + GradientVectorGridFunctionCoefficient(const GridFunction* gf); /// Set the scalar grid function. - void SetGridFunction(const GridFunction *gf); + void SetGridFunction(const GridFunction* gf); /// Get the scalar grid function. - const GridFunction *GetGridFunction() const { return GridFunc; } + const GridFunction* GetGridFunction() const { return GridFunc; } /// Evaluate the gradient vector coefficient at @a ip. - virtual void Eval(DenseMatrix &G, ElementTransformation &T, const IntegrationPoint &ip); + virtual void Eval(DenseMatrix& G, ElementTransformation& T, const IntegrationPoint& ip); virtual ~GradientVectorGridFunctionCoefficient() {} }; @@ -234,41 +234,41 @@ class GradientVectorGridFunctionCoefficient : public MatrixCoefficient { /// Scalar coefficient defined as the magnitude of a vector coefficient class VectorMagnitudeCoefficient : public Coefficient { private: - VectorCoefficient *a; + VectorCoefficient* a; mutable Vector va; public: /// Construct with the vector coefficient. Result is \sqrt{(\f$ A \cdot a \f$}. - VectorMagnitudeCoefficient(VectorCoefficient &A); + VectorMagnitudeCoefficient(VectorCoefficient& A); /// Set the time for internally stored coefficients void SetTime(double t); /// Reset the vector - void SetACoef(VectorCoefficient &A) { a = &A; } + void SetACoef(VectorCoefficient& A) { a = &A; } /// Return the vector coefficient - VectorCoefficient *GetACoef() const { return a; } + VectorCoefficient* GetACoef() const { return a; } /// Evaluate the coefficient at @a ip. - virtual double Eval(ElementTransformation &T, const IntegrationPoint &ip); + virtual double Eval(ElementTransformation& T, const IntegrationPoint& ip); }; /// Matrix coefficient computed from a function F(v(x)) of a dim-sized vector coefficient, v(x) class TransformedMatrixVectorCoefficient : public MatrixCoefficient { protected: - VectorCoefficient *Q1; - std::function Function; + VectorCoefficient* Q1; + std::function Function; public: - TransformedMatrixVectorCoefficient(VectorCoefficient *vc, std::function F) + TransformedMatrixVectorCoefficient(VectorCoefficient* vc, std::function F) : MatrixCoefficient(vc->GetVDim()), Q1(vc), Function(std::move(F)) {} /// Set the time for internally stored coefficients void SetTime(double t); // using MatrixCoefficient::Eval; - virtual void Eval(DenseMatrix &G, ElementTransformation &T, const IntegrationPoint &ip); + virtual void Eval(DenseMatrix& G, ElementTransformation& T, const IntegrationPoint& ip); virtual ~TransformedMatrixVectorCoefficient() {} }; @@ -277,22 +277,22 @@ class TransformedMatrixVectorCoefficient : public MatrixCoefficient { /// easier to implement wrapped functions with fixed arguments class ExtTransformedCoefficient : public Coefficient { protected: - Coefficient *Q1; - Coefficient *Q2; + Coefficient* Q1; + Coefficient* Q2; std::function Transform1; std::function Transform2; public: /// Define a time-independent coefficient from a std function /** \param F time-independent std::function */ - ExtTransformedCoefficient(Coefficient *q, std::function F) : Q1(q), Transform1(std::move(F)) { + ExtTransformedCoefficient(Coefficient* q, std::function F) : Q1(q), Transform1(std::move(F)) { Q2 = 0; Transform2 = 0; } /// Define a time-dependent coefficient from a std function /** \param TDF time-dependent function */ - ExtTransformedCoefficient(Coefficient *q1, Coefficient *q2, std::function F) + ExtTransformedCoefficient(Coefficient* q1, Coefficient* q2, std::function F) : Q1(q1), Q2(q2), Transform2(std::move(F)) { Transform1 = 0; } @@ -301,7 +301,7 @@ class ExtTransformedCoefficient : public Coefficient { void SetTime(double t); /// Evaluate the coefficient at @a ip. - virtual double Eval(ElementTransformation &T, const IntegrationPoint &ip); + virtual double Eval(ElementTransformation& T, const IntegrationPoint& ip); virtual ~ExtTransformedCoefficient() {} }; diff --git a/src/wallBC.cpp b/src/wallBC.cpp index d51e7a1d..3d30f031 100644 --- a/src/wallBC.cpp +++ b/src/wallBC.cpp @@ -34,10 +34,10 @@ #include "riemann_solver.hpp" -WallBC::WallBC(RiemannSolverTPS *_rsolver, GasMixture *_mixture, GasMixture *d_mixture, Equations _eqSystem, - Fluxes *_fluxClass, ParFiniteElementSpace *_vfes, IntegrationRules *_intRules, double &_dt, +WallBC::WallBC(RiemannSolverTPS* _rsolver, GasMixture* _mixture, GasMixture* d_mixture, Equations _eqSystem, + Fluxes* _fluxClass, ParFiniteElementSpace* _vfes, IntegrationRules* _intRules, double& _dt, const int _dim, const int _num_equation, int _patchNumber, WallType _bcType, const WallData _inputData, - const boundaryFaceIntegrationData &boundary_face_data, const int &_maxIntPoints, bool axisym, + const boundaryFaceIntegrationData& boundary_face_data, const int& _maxIntPoints, bool axisym, bool useBCinGrad) : BoundaryCondition(_rsolver, _mixture, _eqSystem, _vfes, _intRules, _dt, _dim, _num_equation, _patchNumber, 1, axisym), // so far walls do not require ref. length. Left at 1 @@ -202,8 +202,8 @@ void WallBC::buildWallElemsArray() { wallElems.ReadWrite(); } -void WallBC::computeBdrFlux(Vector &normal, Vector &stateIn, DenseMatrix &gradState, Vector transip, double delta, - double time, double distance, Vector &bdrFlux) { +void WallBC::computeBdrFlux(Vector& normal, Vector& stateIn, DenseMatrix& gradState, Vector transip, double delta, + double time, double distance, Vector& bdrFlux) { switch (wallType_) { /* case INV: @@ -238,7 +238,7 @@ void WallBC::computeBdrFlux(Vector &normal, Vector &stateIn, DenseMatrix &gradSt } } -void WallBC::computeBdrPrimitiveStateForGradient(const Vector &primIn, Vector &primBC) const { +void WallBC::computeBdrPrimitiveStateForGradient(const Vector& primIn, Vector& primBC) const { primBC = primIn; switch (wallType_) { @@ -265,17 +265,17 @@ void WallBC::computeBdrPrimitiveStateForGradient(const Vector &primIn, Vector &p } } -void WallBC::integrationBC(Vector &y, const Vector &x, const elementIndexingData &elem_index_data, ParGridFunction *Up, - ParGridFunction *gradUp, const boundaryFaceIntegrationData &boundary_face_data, - const int &maxIntPoints, const int &maxDofs) { +void WallBC::integrationBC(Vector& y, const Vector& x, const elementIndexingData& elem_index_data, ParGridFunction* Up, + ParGridFunction* gradUp, const boundaryFaceIntegrationData& boundary_face_data, + const int& maxIntPoints, const int& maxDofs) { interpWalls_gpu(x, elem_index_data, Up, gradUp, boundary_face_data, maxDofs); integrateWalls_gpu(y, // output x, elem_index_data, boundary_face_data, maxDofs); } -void WallBC::computeINVwallFlux(Vector &normal, Vector &stateIn, DenseMatrix &gradState, Vector transip, double delta, - double distance, Vector &bdrFlux) { +void WallBC::computeINVwallFlux(Vector& normal, Vector& stateIn, DenseMatrix& gradState, Vector transip, double delta, + double distance, Vector& bdrFlux) { Vector vel(nvel_); for (int d = 0; d < nvel_; d++) vel[d] = stateIn[1 + d] / stateIn[0]; @@ -323,8 +323,8 @@ void WallBC::computeINVwallFlux(Vector &normal, Vector &stateIn, DenseMatrix &gr Inviscid slip boundary condition. Finds interior velocity in wall-coordinates, flips normal component (mirror state), transforms back to global, send to riemann */ -void WallBC::computeSlipWallFlux(Vector &normal, Vector &stateIn, DenseMatrix &gradState, Vector transip, double delta, - Vector &bdrFlux) { +void WallBC::computeSlipWallFlux(Vector& normal, Vector& stateIn, DenseMatrix& gradState, Vector transip, double delta, + Vector& bdrFlux) { Vector prim(num_equation_); mixture->GetPrimitivesFromConservatives(stateIn, prim); @@ -427,8 +427,8 @@ void WallBC::computeSlipWallFlux(Vector &normal, Vector &stateIn, DenseMatrix &g rsolver->Eval(stateIn, state2, normal, bdrFlux); } -void WallBC::computeAdiabaticWallFlux(Vector &normal, Vector &stateIn, DenseMatrix &gradState, Vector transip, - double delta, Vector &bdrFlux) { +void WallBC::computeAdiabaticWallFlux(Vector& normal, Vector& stateIn, DenseMatrix& gradState, Vector transip, + double delta, Vector& bdrFlux) { Vector wallState(num_equation_); mixture->computeStagnationState(stateIn, wallState); @@ -468,8 +468,8 @@ void WallBC::computeAdiabaticWallFlux(Vector &normal, Vector &stateIn, DenseMatr } } -void WallBC::computeIsothermalWallFlux(Vector &normal, Vector &stateIn, DenseMatrix &gradState, Vector transip, - double delta, Vector &bdrFlux) { +void WallBC::computeIsothermalWallFlux(Vector& normal, Vector& stateIn, DenseMatrix& gradState, Vector transip, + double delta, Vector& bdrFlux) { Vector wallState(num_equation_); wallState = stateIn; @@ -509,8 +509,8 @@ void WallBC::computeIsothermalWallFlux(Vector &normal, Vector &stateIn, DenseMat } } -void WallBC::computeGeneralWallFlux(Vector &normal, Vector &stateIn, DenseMatrix &gradState, Vector transip, - double delta, Vector &bdrFlux) { +void WallBC::computeGeneralWallFlux(Vector& normal, Vector& stateIn, DenseMatrix& gradState, Vector transip, + double delta, Vector& bdrFlux) { Vector wallState(num_equation_); mixture->modifyStateFromPrimitive(stateIn, bcState_, wallState); @@ -542,20 +542,20 @@ void WallBC::computeGeneralWallFlux(Vector &normal, Vector &stateIn, DenseMatrix } } -void WallBC::integrateWalls_gpu(Vector &y, const Vector &x, const elementIndexingData &elem_index_data, - const boundaryFaceIntegrationData &boundary_face_data, const int &maxDofs) { +void WallBC::integrateWalls_gpu(Vector& y, const Vector& x, const elementIndexingData& elem_index_data, + const boundaryFaceIntegrationData& boundary_face_data, const int& maxDofs) { #ifdef _GPU_ - double *d_y = y.ReadWrite(); + double* d_y = y.ReadWrite(); // const double *d_U = x.Read(); - const int *d_elem_dofs_list = elem_index_data.dofs_list.Read(); - const int *d_elem_dof_off = elem_index_data.dof_offset.Read(); - const int *d_elem_dof_num = elem_index_data.dof_number.Read(); - const double *d_face_shape = boundary_face_data.shape.Read(); - const double *d_weight = boundary_face_data.quad_weight.Read(); - const int *d_face_el = boundary_face_data.el.Read(); - const int *d_face_num_quad = boundary_face_data.num_quad.Read(); - const int *d_wallElems = wallElems.Read(); - const int *d_listElems = listElems.Read(); + const int* d_elem_dofs_list = elem_index_data.dofs_list.Read(); + const int* d_elem_dof_off = elem_index_data.dof_offset.Read(); + const int* d_elem_dof_num = elem_index_data.dof_number.Read(); + const double* d_face_shape = boundary_face_data.shape.Read(); + const double* d_weight = boundary_face_data.quad_weight.Read(); + const int* d_face_el = boundary_face_data.el.Read(); + const int* d_face_num_quad = boundary_face_data.num_quad.Read(); + const int* d_wallElems = wallElems.Read(); + const int* d_listElems = listElems.Read(); const int totDofs = x.Size() / num_equation_; // const int numBdrElem = listElems.Size(); @@ -563,7 +563,7 @@ void WallBC::integrateWalls_gpu(Vector &y, const Vector &x, const elementIndexin const int num_equation = num_equation_; const int maxIntPoints = maxIntPoints_; - const double *d_flux = face_flux_.Read(); + const double* d_flux = face_flux_.Read(); // clang-format on // MFEM_FORALL(el_wall, wallElems.Size() / 7, { @@ -631,25 +631,25 @@ void WallBC::integrateWalls_gpu(Vector &y, const Vector &x, const elementIndexin #endif } -void WallBC::interpWalls_gpu(const mfem::Vector &x, const elementIndexingData &elem_index_data, - mfem::ParGridFunction *Up, mfem::ParGridFunction *gradUp, - const boundaryFaceIntegrationData &boundary_face_data, const int &maxDofs) { +void WallBC::interpWalls_gpu(const mfem::Vector& x, const elementIndexingData& elem_index_data, + mfem::ParGridFunction* Up, mfem::ParGridFunction* gradUp, + const boundaryFaceIntegrationData& boundary_face_data, const int& maxDofs) { #ifdef _GPU_ - double *d_flux = face_flux_.Write(); - - const double *d_U = x.Read(); - const double *d_gradUp = gradUp->Read(); - const int *d_elem_dofs_list = elem_index_data.dofs_list.Read(); - const int *d_elem_dof_off = elem_index_data.dof_offset.Read(); - const int *d_elem_dof_num = elem_index_data.dof_number.Read(); - const double *d_face_shape = boundary_face_data.shape.Read(); - const double *d_normal = boundary_face_data.normal.Read(); - const double *d_xyz = boundary_face_data.xyz.Read(); - const int *d_face_num_quad = boundary_face_data.num_quad.Read(); - const int *d_face_el = boundary_face_data.el.Read(); - const int *d_wallElems = wallElems.Read(); - const int *d_listElems = listElems.Read(); - const double *d_dist = boundary_face_data.dist.Read(); + double* d_flux = face_flux_.Write(); + + const double* d_U = x.Read(); + const double* d_gradUp = gradUp->Read(); + const int* d_elem_dofs_list = elem_index_data.dofs_list.Read(); + const int* d_elem_dof_off = elem_index_data.dof_offset.Read(); + const int* d_elem_dof_num = elem_index_data.dof_number.Read(); + const double* d_face_shape = boundary_face_data.shape.Read(); + const double* d_normal = boundary_face_data.normal.Read(); + const double* d_xyz = boundary_face_data.xyz.Read(); + const int* d_face_num_quad = boundary_face_data.num_quad.Read(); + const int* d_face_el = boundary_face_data.el.Read(); + const int* d_wallElems = wallElems.Read(); + const int* d_listElems = listElems.Read(); + const double* d_dist = boundary_face_data.dist.Read(); auto d_delta = boundary_face_data.delta_el1.Read(); @@ -667,9 +667,9 @@ void WallBC::interpWalls_gpu(const mfem::Vector &x, const elementIndexingData &e const bool computeSheath = (wallData_.elecThermalCond == SHTH); - const RiemannSolverTPS *d_rsolver = rsolver; - GasMixture *d_mix = d_mixture_; - Fluxes *d_fluxclass = fluxClass; + const RiemannSolverTPS* d_rsolver = rsolver; + GasMixture* d_mix = d_mixture_; + Fluxes* d_fluxclass = fluxClass; const bool useBCinGrad = useBCinGrad_; diff --git a/src/wallBC.hpp b/src/wallBC.hpp index dd4e0c18..68970319 100644 --- a/src/wallBC.hpp +++ b/src/wallBC.hpp @@ -49,8 +49,8 @@ class WallBC : public BoundaryCondition { const bool useBCinGrad_; - GasMixture *d_mixture_; // only used in the device. - Fluxes *fluxClass; + GasMixture* d_mixture_; // only used in the device. + Fluxes* fluxClass; // TODO(kevin): eventually replace this with wallPrim. double wallTemp_; @@ -59,54 +59,54 @@ class WallBC : public BoundaryCondition { BoundaryViscousFluxData bcFlux_; BoundaryPrimitiveData bcState_; - const boundaryFaceIntegrationData &boundary_face_data_; - const int &maxIntPoints_; + const boundaryFaceIntegrationData& boundary_face_data_; + const int& maxIntPoints_; Array wallElems; void buildWallElemsArray(); - void computeINVwallFlux(Vector &normal, Vector &stateIn, DenseMatrix &gradState, Vector transip, double delta, - double distance, Vector &bdrFlux); - void computeSlipWallFlux(Vector &normal, Vector &stateIn, DenseMatrix &gradState, Vector transip, double delta, - Vector &bdrFlux); - void computeAdiabaticWallFlux(Vector &normal, Vector &stateIn, DenseMatrix &gradState, Vector transip, double delta, - Vector &bdrFlux); - void computeIsothermalWallFlux(Vector &normal, Vector &stateIn, DenseMatrix &gradState, Vector transip, double delta, - Vector &bdrFlux); - void computeGeneralWallFlux(Vector &normal, Vector &stateIn, DenseMatrix &gradState, Vector transip, double delta, - Vector &bdrFlux); + void computeINVwallFlux(Vector& normal, Vector& stateIn, DenseMatrix& gradState, Vector transip, double delta, + double distance, Vector& bdrFlux); + void computeSlipWallFlux(Vector& normal, Vector& stateIn, DenseMatrix& gradState, Vector transip, double delta, + Vector& bdrFlux); + void computeAdiabaticWallFlux(Vector& normal, Vector& stateIn, DenseMatrix& gradState, Vector transip, double delta, + Vector& bdrFlux); + void computeIsothermalWallFlux(Vector& normal, Vector& stateIn, DenseMatrix& gradState, Vector transip, double delta, + Vector& bdrFlux); + void computeGeneralWallFlux(Vector& normal, Vector& stateIn, DenseMatrix& gradState, Vector transip, double delta, + Vector& bdrFlux); public: - WallBC(RiemannSolverTPS *rsolver_, GasMixture *_mixture, GasMixture *d_mixture, Equations _eqSystem, - Fluxes *_fluxClass, ParFiniteElementSpace *_vfes, IntegrationRules *_intRules, double &_dt, const int _dim, + WallBC(RiemannSolverTPS* rsolver_, GasMixture* _mixture, GasMixture* d_mixture, Equations _eqSystem, + Fluxes* _fluxClass, ParFiniteElementSpace* _vfes, IntegrationRules* _intRules, double& _dt, const int _dim, const int _num_equation, int _patchNumber, WallType _bcType, const WallData _inputData, - const boundaryFaceIntegrationData &boundary_face_data, const int &maxIntPoints, bool axisym, + const boundaryFaceIntegrationData& boundary_face_data, const int& maxIntPoints, bool axisym, bool useBCinGrad = false); ~WallBC(); WallType getType() { return wallType_; } - void computeBdrFlux(Vector &normal, Vector &stateIn, DenseMatrix &gradState, Vector transip, double delta, - double time, double distance, Vector &bdrFlux) override; - void computeBdrPrimitiveStateForGradient(const Vector &primIn, Vector &primBC) const override; + void computeBdrFlux(Vector& normal, Vector& stateIn, DenseMatrix& gradState, Vector transip, double delta, + double time, double distance, Vector& bdrFlux) override; + void computeBdrPrimitiveStateForGradient(const Vector& primIn, Vector& primBC) const override; void initBCs() override; - void updateMean(IntegrationRules *intRules, ParGridFunction *Up) override {} + void updateMean(IntegrationRules* intRules, ParGridFunction* Up) override {} // functions for BC integration on GPU - void integrationBC(Vector &y, // output - const Vector &x, const elementIndexingData &elem_index_data, ParGridFunction *Up, - ParGridFunction *gradUp, const boundaryFaceIntegrationData &boundary_face_data, - const int &maxIntPoints, const int &maxDofs) override; + void integrationBC(Vector& y, // output + const Vector& x, const elementIndexingData& elem_index_data, ParGridFunction* Up, + ParGridFunction* gradUp, const boundaryFaceIntegrationData& boundary_face_data, + const int& maxIntPoints, const int& maxDofs) override; - void integrateWalls_gpu(Vector &y, // output - const Vector &x, const elementIndexingData &elem_index_data, - const boundaryFaceIntegrationData &boundary_face_data, const int &maxDofs); + void integrateWalls_gpu(Vector& y, // output + const Vector& x, const elementIndexingData& elem_index_data, + const boundaryFaceIntegrationData& boundary_face_data, const int& maxDofs); - void interpWalls_gpu(const Vector &x, const elementIndexingData &elem_index_data, ParGridFunction *Up, - ParGridFunction *gradUp, const boundaryFaceIntegrationData &boundary_face_data, - const int &maxDofs); + void interpWalls_gpu(const Vector& x, const elementIndexingData& elem_index_data, ParGridFunction* Up, + ParGridFunction* gradUp, const boundaryFaceIntegrationData& boundary_face_data, + const int& maxDofs); double getWallTemp() const { assert(wallType_ == VISC_ISOTH); @@ -114,8 +114,8 @@ class WallBC : public BoundaryCondition { } #ifdef _GPU_ - static MFEM_HOST_DEVICE void computeInvWallState(const double *u1, double *u2, const double *nor, const int &dim, - const int &num_equation, const int &thrd, const int &maxThreads) { + static MFEM_HOST_DEVICE void computeInvWallState(const double* u1, double* u2, const double* nor, const int& dim, + const int& num_equation, const int& thrd, const int& maxThreads) { MFEM_SHARED double momNormal, norm; MFEM_SHARED double unitNor[3]; @@ -143,8 +143,8 @@ class WallBC : public BoundaryCondition { } } - static MFEM_HOST_DEVICE void computeInvWallState_gpu_serial(const double *u1, double *u2, const double *nor, - const int &dim, const int &num_equation) { + static MFEM_HOST_DEVICE void computeInvWallState_gpu_serial(const double* u1, double* u2, const double* nor, + const int& dim, const int& num_equation) { double momNormal, norm; double unitNor[3]; @@ -164,11 +164,11 @@ class WallBC : public BoundaryCondition { } } - static MFEM_HOST_DEVICE void computeIsothermalState(const double *u1, double *u2, const double *nor, - const double &wallTemp, const double &gamma, const double &Rg, - const int &dim, const int &num_equation, - const WorkingFluid &fluid, const int &thrd, - const int &maxThreads) { + static MFEM_HOST_DEVICE void computeIsothermalState(const double* u1, double* u2, const double* nor, + const double& wallTemp, const double& gamma, const double& Rg, + const int& dim, const int& num_equation, + const WorkingFluid& fluid, const int& thrd, + const int& maxThreads) { if (thrd < num_equation) u2[thrd] = u1[thrd]; MFEM_SYNC_THREAD; @@ -177,10 +177,10 @@ class WallBC : public BoundaryCondition { } } - static MFEM_HOST_DEVICE void computeIsothermalState_gpu_serial(const double *u1, double *u2, const double *nor, - const double &wallTemp, const double &gamma, - const double &Rg, const int &dim, - const int &num_equation, const WorkingFluid &fluid) { + static MFEM_HOST_DEVICE void computeIsothermalState_gpu_serial(const double* u1, double* u2, const double* nor, + const double& wallTemp, const double& gamma, + const double& Rg, const int& dim, + const int& num_equation, const WorkingFluid& fluid) { for (int eq = 0; eq < num_equation; eq++) { u2[eq] = u1[eq]; } diff --git a/src/zetaModel.cpp b/src/zetaModel.cpp index e830c0c0..07fb42ad 100644 --- a/src/zetaModel.cpp +++ b/src/zetaModel.cpp @@ -49,11 +49,14 @@ using namespace mfem; using namespace mfem::common; -static double radius(const Vector &pos) { return pos[0]; } +static double radius(const Vector& pos) { return pos[0]; } static FunctionCoefficient radius_coeff(radius); +double smoothMin(double val1, double val2); +double smoothMax(double val1, double val2); +double smoothMinTwo(double val1, double val2); -ZetaModel::ZetaModel(mfem::ParMesh *pmesh, LoMachOptions *loMach_opts, temporalSchemeCoefficients &time_coeff, - TPS::Tps *tps, ParGridFunction *gridScale) +ZetaModel::ZetaModel(mfem::ParMesh* pmesh, LoMachOptions* loMach_opts, temporalSchemeCoefficients& time_coeff, + TPS::Tps* tps, ParGridFunction* gridScale) : tpsP_(tps), loMach_opts_(loMach_opts), pmesh_(pmesh), time_coeff_(time_coeff) { rank_ = pmesh_->GetMyRank(); rank0_ = (pmesh_->GetMyRank() == 0); @@ -79,14 +82,25 @@ ZetaModel::ZetaModel(mfem::ParMesh *pmesh, LoMachOptions *loMach_opts, temporalS tpsP_->getInput("ransModel/tls-min", tls_min_, 1.0e-12); tpsP_->getInput("ransModel/tts-max", tts_max_, 100.0); tpsP_->getInput("ransModel/tls-max", tls_max_, 100.0); - tpsP_->getInput("ransModel/mut-min", mut_min_, 1.0e-12); + tpsP_->getInput("ransModel/mut-min", mut_min_, 1.0e-8); tpsP_->getInput("ransModel/prod-min", pk_min_, 1.0e-14); tpsP_->getInput("ransModel/destruction", des_wgt_, 1.0); - tpsP_->getInput("ransModel/production", prod_wgt_, 1.0); + // not implemented... tpsP_->getInput("ransModel/production", prod_wgt_, 0.0); tpsP_->getInput("ransModel/tls-coeff", Cl_, 0.23); tpsP_->getInput("ransModel/f-order", forder_, order_); tpsP_->getInput("ransModel/zfp-max", zfp_max_, 1.0e12); tpsP_->getInput("ransModel/v2-production-rate-coeff-limit", v2Prod_fLimiter_coeff_, 1.0e6); + tpsP_->getInput("ransModel/inlet-scale", inlet_scale_, 1.0); + tpsP_->getInput("ransModel/mutMax-scale", mutMax_scale_, 1.0e5); + tpsP_->getInput("ransModel/robust-f", robust_, false); + if (rank0_ && robust_) { + std::cout << " Using experimental robustified-f formulation!" << endl; + } + + // streamwise stabilization (add full, no real disadvantage like in momentum) + tpsP_->getInput("ransModel/streamwise-stabilization", sw_stab_, false); + tpsP_->getInput("ransModel/Reh_factor", Reh_factor_, 1.0); + tpsP_->getInput("ransModel/Reh_offset", Reh_offset_, 0.0); // solver options tpsP_->getInput("ransModel/hsolve-maxIters", max_iter_, 2000); @@ -139,8 +153,8 @@ ZetaModel::~ZetaModel() { delete prod_coeff_; delete tke_coeff_; delete nu_coeff_; - // delete nu_delta_coeff_; delete gradTKE_coeff_; + // delete nu_delta_coeff_; // delete two_nu_delta_coeff_; // NOTE: seg fault originates from deleting coeffs used for BCs, which is done automatically in @@ -161,6 +175,7 @@ ZetaModel::~ZetaModel() { delete tdr_diff_total_coeff_; delete zeta_diff_total_coeff_; // delete unity_diff_total_coeff_; + delete rhoDt_coeff_; delete rhoTTS_coeff_; delete Ce2_coeff_; @@ -207,6 +222,7 @@ void ZetaModel::initializeSelf() { // scalar sfec_ = new H1_FECollection(order_); + // sfec_ = new H1_FECollection(forder_); sfes_ = new ParFiniteElementSpace(pmesh_, sfec_); // f-rate @@ -215,6 +231,7 @@ void ZetaModel::initializeSelf() { // vector vfec_ = new H1_FECollection(order_, dim_); + // vfec_ = new H1_FECollection(forder_, dim_); vfes_ = new ParFiniteElementSpace(pmesh_, vfec_, dim_); // Check if fully periodic mesh @@ -244,7 +261,7 @@ void ZetaModel::initializeSelf() { eddyVisc_gf_.SetSpace(sfes_); eddyVisc_.SetSize(sfes_truevsize); - eddyVisc_gf_ = 1.0e-2; + eddyVisc_gf_ = mut_min_; eddyVisc_gf_.GetTrueDofs(eddyVisc_); tke_gf_.SetSpace(sfes_); @@ -267,11 +284,20 @@ void ZetaModel::initializeSelf() { v2_gf_ = 2.0 / 3.0 * tke_min_; v2_gf_.GetTrueDofs(v2_); - fRate_gf_.SetSpace(ffes_); - fRate_.SetSize(ffes_truevsize); + // only source (and L^2) will be filtered + fRate_gf_.SetSpace(sfes_); + fRate_.SetSize(sfes_truevsize); fRate_gf_ = 0.0; fRate_ = 0.0; + filter_gf_.SetSpace(ffes_); + filter_.SetSize(ffes_truevsize); + filter_gf_ = 0.0; + filter_ = 0.0; + + Df_gf_.SetSpace(sfes_); + Df_gf_ = 0.0; + tke_next_gf_.SetSpace(sfes_); tke_next_.SetSize(sfes_truevsize); tke_next_gf_ = tke_gf_; @@ -346,8 +372,8 @@ void ZetaModel::initializeSelf() { tls_gf_ = 1.0; tls_gf_.GetTrueDofs(tls_); - tls2_gf_.SetSpace(ffes_); - tls2_.SetSize(ffes_truevsize); + tls2_gf_.SetSpace(sfes_); + tls2_.SetSize(sfes_truevsize); tls2_gf_ = 1.0; tls2_gf_.GetTrueDofs(tls2_); @@ -363,6 +389,11 @@ void ZetaModel::initializeSelf() { prod_gf_ = 1.0e-8; prod_gf_.GetTrueDofs(prod_); + prod_plus_tkeDiff_gf_.SetSpace(sfes_); + prod_plus_tkeDiff_.SetSize(sfes_truevsize); + prod_plus_tkeDiff_gf_ = 1.0e-8; + prod_plus_tkeDiff_gf_.GetTrueDofs(prod_plus_tkeDiff_); + prod_next_gf_.SetSpace(sfes_); prod_next_.SetSize(sfes_truevsize); prod_nm1_.SetSize(sfes_truevsize); @@ -395,8 +426,8 @@ void ZetaModel::initializeSelf() { vfres_gf_.SetSpace(sfes_); - resf_gf_.SetSpace(ffes_); - resf_.SetSize(ffes_truevsize); + resf_gf_.SetSpace(sfes_); + resf_.SetSize(sfes_truevsize); rho_.SetSize(sfes_truevsize); mu_.SetSize(sfes_truevsize); @@ -416,7 +447,6 @@ void ZetaModel::initializeSelf() { tmpR0a_.SetSize(sfes_truevsize); tmpR0b_.SetSize(sfes_truevsize); tmpR0c_.SetSize(sfes_truevsize); - ftmpR0_.SetSize(ffes_truevsize); rhoDt_gf_.SetSpace(sfes_); @@ -467,6 +497,7 @@ void ZetaModel::initializeSelf() { if (axisym_) { radius_gf_.ProjectCoefficient(radius_coeff); radius_gf_.GetTrueDofs(radius_v_); + // fradius_gf_.ProjectGridFunction(radius_gf_); } //----------------------------------------------------- @@ -497,9 +528,11 @@ void ZetaModel::initializeSelf() { tpsP_->getRequiredInput((basepath + "/tke").c_str(), tke_value); AddTKEDirichletBC(tke_value, inlet_attr); AddV2DirichletBC(2.0 / 3.0 * tke_value, inlet_attr); + } else if (type == "interpolate") { if (rank0_) { - std::cout << "Zeta Model: Setting interpolated Dirichlet TKE on patch = " << patch << std::endl; + std::cout << "Zeta Model: Setting interpolated Dirichlet TKE on patch = " << patch + << " with scaling: " << inlet_scale_ << std::endl; } // Array inlet_attr(pmesh_->bdr_attributes.Max()); // inlet_attr = 0; @@ -514,8 +547,17 @@ void ZetaModel::initializeSelf() { tke_field_ = new GridFunctionCoefficient(extData_interface_->TKEdata); v2_field_ = new GridFunctionCoefficient(extData_interface_->V2data); - AddTKEDirichletBC(tke_field_, inlet_attr); - AddV2DirichletBC(v2_field_, inlet_attr); + scaling_coeff_ = new ConstantCoefficient(inlet_scale_); + tke_scaled_field_ = new ProductCoefficient(*scaling_coeff_, *tke_field_); + v2_scaled_field_ = new ProductCoefficient(*scaling_coeff_, *v2_field_); + + AddTKEDirichletBC(tke_scaled_field_, inlet_attr); + AddV2DirichletBC(v2_scaled_field_, inlet_attr); + + // this is an approximation that neglects tansport terms (assumes steady and equilibrium which is not correct) + tdr_field_ = new GridFunctionCoefficient(&prod_plus_tkeDiff_gf_); + AddTDRDirichletBC(tdr_field_, inlet_attr); + } else if (type == "fully-developed-pipe") { Array inlet_attr(pmesh_->bdr_attributes.Max()); inlet_attr = 0; @@ -588,13 +630,9 @@ void ZetaModel::initializeSelf() { // ConstantCoefficient *tdr_wall_coeff = new ConstantCoefficient(); // tdr_wall_coeff->constant = 0.0; // AddTDRDirichletBC(0.0, attr_wall); - AddTDRDirichletBC(tdr_wall_coeff_, attr_wall); - // DivergenceGridFunctionCoefficient *tdr_wall_coeff = new - // DivergenceGridFunctionCoefficient(*nu_gradTKE_coeff_); - // AddTDRDirichletBC(tdr_wall_coeff, attr_wall); - // tdr_bc_ = new GridFunctionCoefficient(&tdr_wall_gf_); - // AddTDRDirichletBC(tdr_bc_, attr_wall); + // tdr wall-bc from tke diffusion term + AddTDRDirichletBC(tdr_wall_coeff_, attr_wall); // ConstantCoefficient *zeta_wall_coeff = new ConstantCoefficient(); // zeta_wall_coeff->constant = 0.0; @@ -613,29 +651,28 @@ void ZetaModel::initializeSelf() { sfes_->GetEssentialTrueDofs(tdr_ess_attr_, tdr_ess_tdof_); sfes_->GetEssentialTrueDofs(zeta_ess_attr_, zeta_ess_tdof_); sfes_->GetEssentialTrueDofs(v2_ess_attr_, v2_ess_tdof_); - ffes_->GetEssentialTrueDofs(fRate_ess_attr_, fRate_ess_tdof_); + sfes_->GetEssentialTrueDofs(fRate_ess_attr_, fRate_ess_tdof_); if (rank0_) std::cout << "Zeta-f RANS model essential true dof step" << endl; } void ZetaModel::initializeOperators() { - if (rank0_) std::cout << "... here we go ..." << endl; - dt_ = time_coeff_.dt; Array empty; // GLL integration rule (Numerical Integration) // const IntegrationRule &ir_lump = gll_rules_.Get(sfes_->GetFE(0)->GetGeomType(), 2 * order_ - 1); - const IntegrationRule &ir_i = gll_rules_.Get(sfes_->GetFE(0)->GetGeomType(), 2 * order_ + 1); - const IntegrationRule &ir_nli = gll_rules_.Get(sfes_->GetFE(0)->GetGeomType(), 4 * order_); - const IntegrationRule &ir_di = gll_rules_.Get(sfes_->GetFE(0)->GetGeomType(), 3 * order_ - 1); + const IntegrationRule& ir_i = gll_rules_.Get(sfes_->GetFE(0)->GetGeomType(), 2 * order_ + 1); + const IntegrationRule& ir_nli = gll_rules_.Get(sfes_->GetFE(0)->GetGeomType(), 4 * order_); + const IntegrationRule& ir_di = gll_rules_.Get(sfes_->GetFE(0)->GetGeomType(), 3 * order_ - 1); - const IntegrationRule &ir_if = gll_rules_.Get(ffes_->GetFE(0)->GetGeomType(), 2 * forder_ + 1); - const IntegrationRule &ir_dif = gll_rules_.Get(ffes_->GetFE(0)->GetGeomType(), 3 * forder_ - 1); + const IntegrationRule& ir_if = gll_rules_.Get(sfes_->GetFE(0)->GetGeomType(), 2 * forder_ + 1); + const IntegrationRule& ir_dif = gll_rules_.Get(sfes_->GetFE(0)->GetGeomType(), 3 * forder_ - 1); // coefficients for operators zero_coeff_ = new ConstantCoefficient(0.0); unity_coeff_ = new ConstantCoefficient(1.0); + // negOne_coeff_ = new ConstantCoefficient(-1.0); posTwo_coeff_ = new ConstantCoefficient(2.0); negTwo_coeff_ = new ConstantCoefficient(-2.0); delta_coeff_ = new GridFunctionCoefficient(gridScale_gf_); @@ -694,8 +731,18 @@ void ZetaModel::initializeOperators() { zeta_diag_coeff_ = new SumCoefficient(*rhoDt_coeff_, *Pk_coeff_, 1.0, 1.0); v2_diag_coeff_ = new SumCoefficient(*rhoDt_coeff_, *rhoTTS_coeff_, 1.0, 6.0 * des_wgt_); // v2_diag_coeff_ = new SumCoefficient(*rhoDt_coeff_, *ek_rho_coeff_, 1.0, 6.0*des_wgt_); - f_diag_coeff_ = new RatioCoefficient(1.0, *tls2_coeff_); - f_diag_total_coeff_ = new SumCoefficient(*f_diag_coeff_, *zero_coeff_); + + // if laplacian-f coeff is pos, it is NEG on the rhs due to ibp and then diag f MUST be also be pos! + // further, entire rhs is neg + // f_diag_coeff_ = new RatioCoefficient(1.0, *tls2_coeff_); + if (robust_) { + f_destruction_coeff_ = new GridFunctionCoefficient(&Df_gf_); + // f_diag_total_coeff_ = new SumCoefficient(*f_diag_coeff_, f_destruction_coeff_); + f_diag_total_coeff_ = new SumCoefficient(*unity_coeff_, *f_destruction_coeff_); + } else { + // f_diag_total_coeff_ = new SumCoefficient(*f_diag_coeff_, *zero_coeff_); + f_diag_total_coeff_ = new SumCoefficient(*unity_coeff_, *zero_coeff_); + } if (axisym_) { swirl_coeff_ = new GridFunctionCoefficient(flow_interface_->swirl); @@ -706,18 +753,54 @@ void ZetaModel::initializeOperators() { rad_tdr_diag_coeff_ = new ProductCoefficient(radius_coeff, *tdr_diag_coeff_); rad_tdr_diff_total_coeff_ = new ProductCoefficient(radius_coeff, *tdr_diff_total_coeff_); rad_v2_diag_coeff_ = new ProductCoefficient(radius_coeff, *v2_diag_coeff_); - rad_f_diag_coeff_ = new ProductCoefficient(radius_coeff, *f_diag_coeff_); rad_unity_coeff_ = new ProductCoefficient(radius_coeff, *unity_coeff_); rad_zeta_diag_coeff_ = new ProductCoefficient(radius_coeff, *zeta_diag_coeff_); rad_zeta_diff_total_coeff_ = new ProductCoefficient(radius_coeff, *zeta_diff_total_coeff_); rad_scalar_diff_coeff_ = new ProductCoefficient(radius_coeff, *scalar_diff_coeff_); rad_nu_gradTKE_coeff_ = new ScalarVectorProductCoefficient(radius_coeff, *nu_gradTKE_coeff_); + + // need separate coeffs for f-space (all of em) + // rad_f_diag_coeff_ = new ProductCoefficient(fradius_coeff, *f_diag_coeff_); + // rad_f_diag_coeff_ = new ProductCoefficient(radius_coeff, *f_diag_coeff_); + rad_f_diag_coeff_ = new ProductCoefficient(radius_coeff, *f_diag_total_coeff_); + rad_tls2_coeff_ = new ProductCoefficient(radius_coeff, *tls2_coeff_); + } + + // artifical diffusion coefficients + if (sw_stab_) { + gscale_coeff_ = new GridFunctionCoefficient(gridScale_gf_); + umag_coeff_ = new VectorMagnitudeCoefficient(*vel_coeff_); + + visc_coeff_ = new GridFunctionCoefficient(*mu_coeff_); + visc_inv_coeff_ = new PowerCoefficient(*visc_coeff_, -1.0); + + // compute Reh + reh1_coeff_ = new ProductCoefficient(*rho_coeff_, *visc_inv_coeff_); + reh2_coeff_ = new ProductCoefficient(*reh1_coeff_, *gscale_coeff_); + Reh_coeff_ = new ProductCoefficient(*reh2_coeff_, *umag_coeff_); + + // Csupg + std::function csupgLambda = std::bind(csupgFactor, std::placeholders::_1, Reh_factor_, Reh_offset_); + csupg_coeff_ = new ExtTransformedCoefficient(Reh_coeff_, csupgLambda); + + // compute upwind magnitude + if (axisym_) { + uw1_coeff_ = new ProductCoefficient(*rad_rho_coeff_, *csupg_coeff_); + } else { + uw1_coeff_ = new ProductCoefficient(*rho_coeff_, *csupg_coeff_); + } + uw2_coeff_ = new ProductCoefficient(*uw1_coeff_, *gscale_coeff_); + upwind_coeff_ = new ProductCoefficient(*uw2_coeff_, *umag_coeff_); + + // streamwise diffusion direction + swdiff_coeff_ = new TransformedMatrixVectorCoefficient(vel_coeff_, &streamwiseTensor); + + supg_coeff_ = new ScalarMatrixProductCoefficient(*upwind_coeff_, *swdiff_coeff_); } - if (rank0_) std::cout << "... coeffs set ..." << endl; // operators As_form_ = new ParBilinearForm(sfes_); - ConvectionIntegrator *as_blfi; + ConvectionIntegrator* as_blfi; if (axisym_) { as_blfi = new ConvectionIntegrator(*rad_rhou_coeff_); } else { @@ -732,11 +815,10 @@ void ZetaModel::initializeOperators() { } As_form_->Assemble(); As_form_->FormSystemMatrix(empty, As_); - if (rank0_) std::cout << "... op 0 ..." << endl; // mass matrix Ms_form_ = new ParBilinearForm(sfes_); - MassIntegrator *ms_blfi; + MassIntegrator* ms_blfi; if (axisym_) { ms_blfi = new MassIntegrator(radius_coeff); } else { @@ -751,11 +833,10 @@ void ZetaModel::initializeOperators() { } Ms_form_->Assemble(); Ms_form_->FormSystemMatrix(empty, Ms_); - if (rank0_) std::cout << "... op 1 ..." << endl; // mass matrix with rho MsRho_form_ = new ParBilinearForm(sfes_); - MassIntegrator *msrho_blfi; + MassIntegrator* msrho_blfi; if (axisym_) { msrho_blfi = new MassIntegrator(*rad_rho_coeff_); } else { @@ -771,8 +852,8 @@ void ZetaModel::initializeOperators() { } MsRho_form_->Assemble(); MsRho_form_->FormSystemMatrix(empty, MsRho_); - Mf_form_ = new ParBilinearForm(ffes_); - MassIntegrator *mf_blfi; + Mf_form_ = new ParBilinearForm(sfes_); + MassIntegrator* mf_blfi; if (axisym_) { mf_blfi = new MassIntegrator(radius_coeff); } else { @@ -787,7 +868,6 @@ void ZetaModel::initializeOperators() { } Mf_form_->Assemble(); Mf_form_->FormSystemMatrix(empty, Mf_); - if (rank0_) std::cout << "... op 3 ..." << endl; // diffusion of tke for tdr bc /* @@ -816,13 +896,11 @@ void ZetaModel::initializeOperators() { // Helmholtz operators for lhs of all scalars Hk_form_ = new ParBilinearForm(sfes_); - if (rank0_) std::cout << "... op 4 1..." << endl; - // auto *hmk_blfi = new MassIntegrator(*tke_diag_coeff_); // auto *hmk_blfi = new MassIntegrator(*rhoDt_coeff_); // auto *hdk_blfi = new DiffusionIntegrator(*tke_diff_total_coeff_); - MassIntegrator *hmk_blfi; - DiffusionIntegrator *hdk_blfi; + MassIntegrator* hmk_blfi; + DiffusionIntegrator* hdk_blfi; if (axisym_) { hmk_blfi = new MassIntegrator(*rad_tke_diag_coeff_); hdk_blfi = new DiffusionIntegrator(*rad_tke_diff_total_coeff_); @@ -830,25 +908,28 @@ void ZetaModel::initializeOperators() { hmk_blfi = new MassIntegrator(*tke_diag_coeff_); hdk_blfi = new DiffusionIntegrator(*tke_diff_total_coeff_); } - if (rank0_) std::cout << "... op 4 2..." << endl; if (numerical_integ_) { hmk_blfi->SetIntRule(&ir_di); hdk_blfi->SetIntRule(&ir_i); } Hk_form_->AddDomainIntegrator(hmk_blfi); Hk_form_->AddDomainIntegrator(hdk_blfi); - if (rank0_) std::cout << "... op 4 3 ..." << endl; + if (sw_stab_) { + auto* sdk_blfi = new DiffusionIntegrator(*supg_coeff_); + if (numerical_integ_) { + sdk_blfi->SetIntRule(&ir_di); + } + Hk_form_->AddDomainIntegrator(sdk_blfi); + } Hk_form_->Assemble(); - if (rank0_) std::cout << "... op 4 4 ..." << endl; Hk_form_->FormSystemMatrix(tke_ess_tdof_, Hk_); - if (rank0_) std::cout << "... op 4 5 ..." << endl; He_form_ = new ParBilinearForm(sfes_); // auto *hme_blfi = new MassIntegrator(*tdr_diag_coeff_); // auto *hme_blfi = new MassIntegrator(*rhoDt_coeff_); // auto *hde_blfi = new DiffusionIntegrator(*tdr_diff_total_coeff_); - MassIntegrator *hme_blfi; - DiffusionIntegrator *hde_blfi; + MassIntegrator* hme_blfi; + DiffusionIntegrator* hde_blfi; if (axisym_) { hme_blfi = new MassIntegrator(*rad_tdr_diag_coeff_); hde_blfi = new DiffusionIntegrator(*rad_tdr_diff_total_coeff_); @@ -863,16 +944,22 @@ void ZetaModel::initializeOperators() { } He_form_->AddDomainIntegrator(hme_blfi); He_form_->AddDomainIntegrator(hde_blfi); + if (sw_stab_) { + auto* sde_blfi = new DiffusionIntegrator(*supg_coeff_); + if (numerical_integ_) { + sde_blfi->SetIntRule(&ir_di); + } + He_form_->AddDomainIntegrator(sde_blfi); + } He_form_->Assemble(); He_form_->FormSystemMatrix(tdr_ess_tdof_, He_); - if (rank0_) std::cout << "... op 5 ..." << endl; Hv_form_ = new ParBilinearForm(sfes_); // auto *hmv_blfi = new MassIntegrator(*v2_diag_coeff_); // auto *hmv_blfi = new MassIntegrator(*rhoDt_coeff_); // auto *hdv_blfi = new DiffusionIntegrator(*tke_diff_total_coeff_); // NOTE: not an error - MassIntegrator *hmv_blfi; - DiffusionIntegrator *hdv_blfi; + MassIntegrator* hmv_blfi; + DiffusionIntegrator* hdv_blfi; if (axisym_) { hmv_blfi = new MassIntegrator(*rad_v2_diag_coeff_); hdv_blfi = new DiffusionIntegrator(*rad_tke_diff_total_coeff_); @@ -886,25 +973,39 @@ void ZetaModel::initializeOperators() { } Hv_form_->AddDomainIntegrator(hmv_blfi); Hv_form_->AddDomainIntegrator(hdv_blfi); + if (sw_stab_) { + auto* sdv_blfi = new DiffusionIntegrator(*supg_coeff_); + if (numerical_integ_) { + sdv_blfi->SetIntRule(&ir_di); + } + Hv_form_->AddDomainIntegrator(sdv_blfi); + } Hv_form_->Assemble(); Hv_form_->FormSystemMatrix(v2_ess_tdof_, Hv_); - if (rank0_) std::cout << "... op 6 ..." << endl; - Hf_form_ = new ParBilinearForm(ffes_); + Hf_form_ = new ParBilinearForm(sfes_); // dividing all by L^2 // auto *hmf_blfi = new MassIntegrator(*f_diag_coeff_); // auto *hdf_blfi = new DiffusionIntegrator(*unity_diff_coeff_); // div(L^2 df) - f =... // auto *hmf_blfi = new MassIntegrator(*unity_coeff_); // auto *hdf_blfi = new DiffusionIntegrator(*tls2_coeff_); - MassIntegrator *hmf_blfi; - DiffusionIntegrator *hdf_blfi; + MassIntegrator* hmf_blfi; + DiffusionIntegrator* hdf_blfi; + // if f-diag is positive, lapl term is (-) on lhs and no additional neg + // is added to lapl term to correct for ibp sign if (axisym_) { + // hmf_blfi = new MassIntegrator(*rad_f_diag_coeff_); + // hdf_blfi = new DiffusionIntegrator(*rad_unity_coeff_); + // hmf_blfi = new MassIntegrator(*rad_unity_coeff_); hmf_blfi = new MassIntegrator(*rad_f_diag_coeff_); - hdf_blfi = new DiffusionIntegrator(*rad_unity_coeff_); + hdf_blfi = new DiffusionIntegrator(*rad_tls2_coeff_); } else { - hmf_blfi = new MassIntegrator(*f_diag_coeff_); - hdf_blfi = new DiffusionIntegrator(*unity_coeff_); + // hmf_blfi = new MassIntegrator(*f_diag_coeff_); + // hdf_blfi = new DiffusionIntegrator(*unity_coeff_); + // hmf_blfi = new MassIntegrator(*unity_coeff_); + hmf_blfi = new MassIntegrator(*f_diag_total_coeff_); + hdf_blfi = new DiffusionIntegrator(*tls2_coeff_); } if (numerical_integ_) { hmf_blfi->SetIntRule(&ir_dif); @@ -914,13 +1015,12 @@ void ZetaModel::initializeOperators() { Hf_form_->AddDomainIntegrator(hdf_blfi); Hf_form_->Assemble(); Hf_form_->FormSystemMatrix(fRate_ess_tdof_, Hf_); - if (rank0_) std::cout << "... op 7 ..." << endl; Hz_form_ = new ParBilinearForm(sfes_); // auto *hmz_blfi = new MassIntegrator(*zeta_diag_coeff_); // auto *hdz_blfi = new DiffusionIntegrator(*zeta_diff_total_coeff_); - MassIntegrator *hmz_blfi; - DiffusionIntegrator *hdz_blfi; + MassIntegrator* hmz_blfi; + DiffusionIntegrator* hdz_blfi; if (axisym_) { hmz_blfi = new MassIntegrator(*rad_zeta_diag_coeff_); hdz_blfi = new DiffusionIntegrator(*rad_zeta_diff_total_coeff_); @@ -936,7 +1036,6 @@ void ZetaModel::initializeOperators() { Hz_form_->AddDomainIntegrator(hdz_blfi); Hz_form_->Assemble(); Hz_form_->FormSystemMatrix(fRate_ess_tdof_, Hz_); - if (rank0_) std::cout << "... op 8 ..." << endl; // boundary terms for tdr /* @@ -950,7 +1049,7 @@ void ZetaModel::initializeOperators() { */ Lk_form_ = new ParBilinearForm(sfes_); // auto *lkd_blfi = new DiffusionIntegrator(*scalar_diff_coeff_); - DiffusionIntegrator *lkd_blfi; + DiffusionIntegrator* lkd_blfi; if (axisym_) { lkd_blfi = new DiffusionIntegrator(*rad_scalar_diff_coeff_); } else { @@ -965,11 +1064,10 @@ void ZetaModel::initializeOperators() { } Lk_form_->Assemble(); Lk_form_->FormSystemMatrix(empty, Lk_); - if (rank0_) std::cout << "... op 9 ..." << endl; Lk_bdry_ = new ParLinearForm(sfes_); // auto *lk_bdry_lfi = new BoundaryNormalLFIntegrator(*nu_gradTKE_coeff_, 2, -1); - BoundaryNormalLFIntegrator *lk_bdry_lfi; + BoundaryNormalLFIntegrator* lk_bdry_lfi; if (axisym_) { lk_bdry_lfi = new BoundaryNormalLFIntegrator(*rad_nu_gradTKE_coeff_, 2, -1); } else { @@ -987,7 +1085,7 @@ void ZetaModel::initializeOperators() { MsInvPC_ = new OperatorJacobiSmoother(diag_pa, empty); } else { MsInvPC_ = new HypreSmoother(*Ms_.As()); - dynamic_cast(MsInvPC_)->SetType(HypreSmoother::Jacobi, 1); + dynamic_cast(MsInvPC_)->SetType(HypreSmoother::Jacobi, 1); } MsInv_ = new CGSolver(sfes_->GetComm()); MsInv_->iterative_mode = false; @@ -1003,7 +1101,7 @@ void ZetaModel::initializeOperators() { MsRhoInvPC_ = new OperatorJacobiSmoother(diag_pa, empty); } else { MsRhoInvPC_ = new HypreSmoother(*MsRho_.As()); - dynamic_cast(MsRhoInvPC_)->SetType(HypreSmoother::Jacobi, 1); + dynamic_cast(MsRhoInvPC_)->SetType(HypreSmoother::Jacobi, 1); } MsRhoInv_ = new CGSolver(sfes_->GetComm()); MsRhoInv_->iterative_mode = false; @@ -1014,7 +1112,7 @@ void ZetaModel::initializeOperators() { MsRhoInv_->SetMaxIter(max_iter_); HkInvPC_ = new HypreSmoother(*Hk_.As()); - dynamic_cast(HkInvPC_)->SetType(HypreSmoother::Jacobi, 1); + dynamic_cast(HkInvPC_)->SetType(HypreSmoother::Jacobi, 1); HkInv_ = new CGSolver(sfes_->GetComm()); HkInv_->iterative_mode = true; HkInv_->SetOperator(*Hk_); @@ -1024,7 +1122,7 @@ void ZetaModel::initializeOperators() { HkInv_->SetMaxIter(max_iter_); HeInvPC_ = new HypreSmoother(*He_.As()); - dynamic_cast(HeInvPC_)->SetType(HypreSmoother::Jacobi, 1); + dynamic_cast(HeInvPC_)->SetType(HypreSmoother::Jacobi, 1); HeInv_ = new CGSolver(sfes_->GetComm()); HeInv_->iterative_mode = true; HeInv_->SetOperator(*He_); @@ -1034,7 +1132,7 @@ void ZetaModel::initializeOperators() { HeInv_->SetMaxIter(max_iter_); HvInvPC_ = new HypreSmoother(*Hv_.As()); - dynamic_cast(HvInvPC_)->SetType(HypreSmoother::Jacobi, 1); + dynamic_cast(HvInvPC_)->SetType(HypreSmoother::Jacobi, 1); HvInv_ = new CGSolver(sfes_->GetComm()); HvInv_->iterative_mode = true; HvInv_->SetOperator(*Hv_); @@ -1044,8 +1142,8 @@ void ZetaModel::initializeOperators() { HvInv_->SetMaxIter(max_iter_); HfInvPC_ = new HypreSmoother(*Hf_.As()); - dynamic_cast(HfInvPC_)->SetType(HypreSmoother::Jacobi, 1); - HfInv_ = new CGSolver(ffes_->GetComm()); + dynamic_cast(HfInvPC_)->SetType(HypreSmoother::Jacobi, 1); + HfInv_ = new CGSolver(sfes_->GetComm()); // HfInv_ = new GMRESSolver(sfes_->GetComm()); HfInv_->iterative_mode = true; HfInv_->SetOperator(*Hf_); @@ -1055,7 +1153,7 @@ void ZetaModel::initializeOperators() { HfInv_->SetMaxIter(f_max_iter_); HzInvPC_ = new HypreSmoother(*Hz_.As()); - dynamic_cast(HzInvPC_)->SetType(HypreSmoother::Jacobi, 1); + dynamic_cast(HzInvPC_)->SetType(HypreSmoother::Jacobi, 1); HzInv_ = new CGSolver(sfes_->GetComm()); HzInv_->iterative_mode = true; HzInv_->SetOperator(*Hz_); @@ -1067,7 +1165,7 @@ void ZetaModel::initializeOperators() { if (rank0_) std::cout << "zeta-f operators set" << endl; } -void ZetaModel::initializeIO(IODataOrganizer &io) { +void ZetaModel::initializeIO(IODataOrganizer& io) { io.registerIOFamily("tke", "/tke", &tke_gf_, true, true, sfec_); io.registerIOVar("/tke", "tke", 0); io.registerIOFamily("tdr", "/tdr", &tdr_gf_, true, true, sfec_); @@ -1083,7 +1181,7 @@ void ZetaModel::initializeIO(IODataOrganizer &io) { io.registerIOVar("/muT", "muT", 0); } -void ZetaModel::initializeViz(ParaViewDataCollection &pvdc) { +void ZetaModel::initializeViz(ParaViewDataCollection& pvdc) { pvdc.RegisterField("Pk", &prod_gf_); pvdc.RegisterField("TTS", &tts_gf_); pvdc.RegisterField("TLS", &tls_gf_); @@ -1120,6 +1218,8 @@ void ZetaModel::setup() { // initial mu_t /* + extrapolateState(); + extrapolateRHS(); computeStrain(); updateTTS(); updateMuT(); @@ -1145,16 +1245,16 @@ void ZetaModel::step() { (sponge_interface_->diff_multiplier)->GetTrueDofs(mult_); // Set current time for Dirichlet boundary conditions. - for (auto &tke_dbc : tke_dbcs_) { + for (auto& tke_dbc : tke_dbcs_) { tke_dbc.coeff->SetTime(time_ + dt_); } - for (auto &tdr_dbc : tdr_dbcs_) { + for (auto& tdr_dbc : tdr_dbcs_) { tdr_dbc.coeff->SetTime(time_ + dt_); } - for (auto &fRate_dbc : fRate_dbcs_) { + for (auto& fRate_dbc : fRate_dbcs_) { fRate_dbc.coeff->SetTime(time_ + dt_); } - for (auto &zeta_dbc : zeta_dbcs_) { + for (auto& zeta_dbc : zeta_dbcs_) { zeta_dbc.coeff->SetTime(time_ + dt_); } @@ -1167,40 +1267,54 @@ void ZetaModel::step() { updateProd(); updateMsRho(); extrapolateRHS(); + // if (rank0_) {std::cout << "v2-f preliminaries complete" << endl;} // TKE step tkeStep(); + // if (rank0_) {std::cout << "v2-f tke complete" << endl;} // TDR step tdrStep(); + // if (rank0_) {std::cout << "v2-f tdr complete" << endl;} // f-Rate - fStep(); + if (robust_) { + fStepRobustified(); + } else { + fStep(); + } + // if (rank0_) {std::cout << "v2-f f complete" << endl;} // zeta or v2 step // zetaStep(); v2Step(); updateZeta(); + // if (rank0_) {std::cout << "v2-f v2 complete" << endl;} // final calc of eddy visc at {n+1} updateTTS(); updateMuT(); + // if (rank0_) {std::cout << "v2-f updates complete" << endl;} // rotate storage updateTimestepHistory(); } void ZetaModel::updateMuT() { + // Cmu*rho portion eddyVisc_.Set(Cmu_, rho_); + { double twoThirds = 2.0 / 3.0; - const double *dv2 = v2_next_.HostRead(); - const double *dk = tke_next_.HostRead(); - const double *dTTS = tts_.HostRead(); - const double *dTTS_strain = tts_strain_.HostRead(); - double *muT = eddyVisc_.HostReadWrite(); - - for (int i = 0; i < SdofInt_; i++) muT[i] *= std::min(dv2[i], twoThirds * dk[i]); + const double* dv2 = v2_next_.HostRead(); + const double* dk = tke_next_.HostRead(); + const double* dTTS = tts_.HostRead(); + const double* dTTS_strain = tts_strain_.HostRead(); + const double* dMu = mu_.HostRead(); + double* muT = eddyVisc_.HostReadWrite(); + + // for (int i = 0; i < SdofInt_; i++) muT[i] *= std::min(dv2[i], twoThirds * dk[i]); + for (int i = 0; i < SdofInt_; i++) muT[i] *= smoothMin(dv2[i], twoThirds * dk[i]); // to prevent kinks // for (int i = 0; i < SdofInt_; i++) { // wgt = std::tanh(tanh_half_ * dv2[i]/(twoThirds*dk[i])); @@ -1208,7 +1322,8 @@ void ZetaModel::updateMuT() { // muT[i] *= ((1.0-wgt)*dv2[i] + wgt*twoThirds*dk[i]); //} - for (int i = 0; i < SdofInt_; i++) muT[i] *= std::min(dTTS[i], dTTS_strain[i]); + // for (int i = 0; i < SdofInt_; i++) muT[i] *= std::min(dTTS[i], dTTS_strain[i]); + for (int i = 0; i < SdofInt_; i++) muT[i] *= smoothMin(dTTS[i], dTTS_strain[i]); // to prevent kinks // for (int i = 0; i < SdofInt_; i++) { // wgt = std::tanh(tanh_half_ * dTTS[i]/dTTS_strain[i]); @@ -1216,23 +1331,26 @@ void ZetaModel::updateMuT() { // muT[i] *= ((1.0-wgt)*dTTS[i] + wgt*dTTS_strain[i]); //} - for (int i = 0; i < SdofInt_; i++) muT[i] = std::max(muT[i], mut_min_); + // for (int i = 0; i < SdofInt_; i++) muT[i] = std::max(muT[i], mut_min_); + //??? for (int i = 0; i < SdofInt_; i++) muT[i] = smoothMax(muT[i], mut_min_); + + //??? for (int i = 0; i < SdofInt_; i++) muT[i] = smoothMin(muT[i], mutMax_scale_ * dMu[i]); } eddyVisc_gf_.SetFromTrueDofs(eddyVisc_); - resf_gf_.ProjectGridFunction(eddyVisc_gf_); - eddyVisc_gf_.ProjectGridFunction(resf_gf_); + filter_gf_.ProjectGridFunction(eddyVisc_gf_); + eddyVisc_gf_.ProjectGridFunction(filter_gf_); eddyVisc_gf_.GetTrueDofs(eddyVisc_); } void ZetaModel::computeStrain() { - const double *dGradU = gradU_.HostRead(); - const double *dGradV = gradV_.HostRead(); - const double *dGradW = gradW_.HostRead(); - const double *dGradS = gradS_.HostRead(); - double *Sij = strain_.HostReadWrite(); - double *dSmag = sMag_.HostReadWrite(); - double *dRad = radius_v_.HostReadWrite(); + const double* dGradU = gradU_.HostRead(); + const double* dGradV = gradV_.HostRead(); + const double* dGradW = gradW_.HostRead(); + const double* dGradS = gradS_.HostRead(); + double* Sij = strain_.HostReadWrite(); + double* dSmag = sMag_.HostReadWrite(); + double* dRad = radius_v_.HostReadWrite(); double Smin = 1.0e-14; for (int i = 0; i < SdofInt_; i++) { @@ -1302,16 +1420,16 @@ void ZetaModel::computeStrain() { } void ZetaModel::updateTTS() { - const double *dTKE = tke_next_.HostRead(); - const double *dTDR = tdr_next_.HostRead(); - const double *dv2 = v2_next_.HostRead(); + const double* dTKE = tke_next_.HostRead(); + const double* dTDR = tdr_next_.HostRead(); + const double* dv2 = v2_next_.HostRead(); // const double *dZeta = zeta_next_.HostRead(); - const double *dSmag = sMag_.HostRead(); - const double *dMu = mu_.HostRead(); - const double *dRho = rho_.HostRead(); - double *dTTS = tts_.HostReadWrite(); - double *dTTS_strain = tts_strain_.HostReadWrite(); - double *dTTS_kol = tts_kol_.HostReadWrite(); + const double* dSmag = sMag_.HostRead(); + const double* dMu = mu_.HostRead(); + const double* dRho = rho_.HostRead(); + double* dTTS = tts_.HostReadWrite(); + double* dTTS_strain = tts_strain_.HostReadWrite(); + double* dTTS_kol = tts_kol_.HostReadWrite(); double Ctime; Ctime = 0.6 / (std::sqrt(6.0) * Cmu_); @@ -1335,34 +1453,41 @@ void ZetaModel::updateTTS() { // dTTS[i] = std::max(T1, T3); // to prevent kinks - double wgt = 1.0; - wgt = std::tanh(tanh_half_ * T1 / T3); - dTTS[i] = wgt * T1 + (1.0 - wgt) * T3; + // double wgt = 1.0; + // wgt = std::tanh(tanh_half_ * (T1/T3) * (T1/T3) ); + // dTTS[i] = wgt * T1 + (1.0 - wgt) * T3; + dTTS[i] = smoothMax(T1, T3); // including stag-limit T in nuT only // dTTS[i] = std::min(T1, T2); - dTTS[i] = std::max(dTTS[i], tts_min_); - dTTS[i] = std::min(dTTS[i], tts_max_); + // dTTS[i] = std::max(dTTS[i], tts_min_); + // dTTS[i] = std::min(dTTS[i], tts_max_); + + dTTS[i] = smoothMax(dTTS[i], tts_min_); + dTTS[i] = smoothMin(dTTS[i], tts_max_); + dTTS_kol[i] = T3; dTTS_strain[i] = T2; - dTTS_strain[i] = std::max(dTTS_strain[i], tts_min_); - dTTS_strain[i] = std::min(dTTS_strain[i], tts_max_); + // dTTS_strain[i] = std::max(dTTS_strain[i], tts_min_); + // dTTS_strain[i] = std::min(dTTS_strain[i], tts_max_); + dTTS_strain[i] = smoothMax(dTTS_strain[i], tts_min_); + dTTS_strain[i] = smoothMin(dTTS_strain[i], tts_max_); } tts_gf_.SetFromTrueDofs(tts_); } void ZetaModel::updateTLS() { - const double *dTKE = tke_next_.HostRead(); - const double *dTDR = tdr_next_.HostRead(); + const double* dTKE = tke_next_.HostRead(); + const double* dTDR = tdr_next_.HostRead(); // const double *dv2 = v2_next_.HostRead(); // const double *dZeta = zeta_next_.HostRead(); // const double *dSmag = sMag_.HostRead(); - const double *dMu = mu_.HostRead(); - const double *dRho = rho_.HostRead(); - double *dTLS = tls_.HostReadWrite(); + const double* dMu = mu_.HostRead(); + const double* dRho = rho_.HostRead(); + double* dTLS = tls_.HostReadWrite(); - double wgt = 1.0; + // double wgt = 1.0; // double Clength; // Clength = 1.0 / (std::sqrt(6.0) * Cmu_); for (int i = 0; i < SdofInt_; i++) { @@ -1385,22 +1510,24 @@ void ZetaModel::updateTLS() { // to prevent kinks // wgt = std::tanh(tanh_half_ * dTLS[i]/L3); - wgt = std::tanh(tanh_half_ * L1 / L3); - dTLS[i] = Cl_ * (wgt * L1 + (1.0 - wgt) * L3); - - dTLS[i] = std::max(dTLS[i], tls_min_); + // wgt = std::tanh(tanh_half_ * (L1/L3) * (L1/L3)); + // dTLS[i] = Cl_ * (wgt * L1 + (1.0 - wgt) * L3); + dTLS[i] = Cl_ * smoothMax(L1, L3); + // dTLS[i] = std::max(dTLS[i], tls_min_); + dTLS[i] = smoothMax(dTLS[i], tls_min_); // dTLS[i] = std::min(dTLS[i], tls_max_); - wgt = std::tanh(tanh_half_ * dTLS[i] / tls_max_); - dTLS[i] = (1.0 - wgt) * dTLS[i] + wgt * tls_max_; + // wgt = std::tanh(tanh_half_ * dTLS[i] / tls_max_); + // dTLS[i] = (1.0 - wgt) * dTLS[i] + wgt * tls_max_; + dTLS[i] = smoothMin(dTLS[i], tls_max_); } tls_gf_.SetFromTrueDofs(tls_); - // for convience in assembling coeffs tmpR0_.Set(1.0, tls_); tmpR0_ *= tls_; res_gf_.SetFromTrueDofs(tmpR0_); - tls2_gf_.ProjectGridFunction(res_gf_); + filter_gf_.ProjectGridFunction(res_gf_); + tls2_gf_.ProjectGridFunction(filter_gf_); tls2_gf_.GetTrueDofs(tls2_); } @@ -1412,16 +1539,16 @@ void ZetaModel::updateMsRho() { } void ZetaModel::updateProd() { - const double *dGradU = gradU_.HostRead(); - const double *dGradV = gradV_.HostRead(); - const double *dGradW = gradW_.HostRead(); - const double *dGradS = gradS_.HostRead(); - const double *Sij = strain_.HostReadWrite(); - const double *dTKE = tke_.HostRead(); - const double *dmuT = eddyVisc_.HostRead(); - const double *dRho = rho_.HostRead(); - const double *dRad = radius_v_.HostRead(); - double *Pk = prod_.HostReadWrite(); + const double* dGradU = gradU_.HostRead(); + const double* dGradV = gradV_.HostRead(); + const double* dGradW = gradW_.HostRead(); + const double* dGradS = gradS_.HostRead(); + const double* Sij = strain_.HostReadWrite(); + const double* dTKE = tke_.HostRead(); + const double* dmuT = eddyVisc_.HostRead(); + const double* dRho = rho_.HostRead(); + const double* dRad = radius_v_.HostRead(); + double* Pk = prod_.HostReadWrite(); double twoThirds = 2.0 / 3.0; for (int i = 0; i < SdofInt_; i++) { @@ -1450,9 +1577,9 @@ void ZetaModel::updateProd() { tau(1, 1) = 2.0 * Sij[i + 1 * SdofInt_]; tau(2, 2) = 2.0 * Sij[i + 2 * SdofInt_]; tau(0, 1) = 2.0 * Sij[i + 3 * SdofInt_]; - tau(1, 0) = 2.0 * Sij[i + 3 * SdofInt_]; tau(0, 2) = 2.0 * Sij[i + 4 * SdofInt_]; tau(1, 2) = 2.0 * Sij[i + 5 * SdofInt_]; + tau(1, 0) = 2.0 * Sij[i + 3 * SdofInt_]; tau(2, 0) = 2.0 * Sij[i + 4 * SdofInt_]; tau(2, 1) = 2.0 * Sij[i + 5 * SdofInt_]; } else { @@ -1510,13 +1637,14 @@ void ZetaModel::updateProd() { // tke example: Pk = std::max(Pk, pk_min_) * (1 + (tke_min_/tke_)^p); // if done to prod_ for all, this should be a consistent way to enforce floors // as all scalars use Pk as a production source on their rhs (except v2 but that uses f which does so) - Pk[i] = std::max(Pk[i], pk_min_) * (1.0 + (2.0 * tke_min_ / std::max(dTKE[i], tke_min_))); + // Pk[i] = std::max(Pk[i], pk_min_) * (1.0 + (2.0 * tke_min_ / std::max(dTKE[i], tke_min_))); } prod_gf_.SetFromTrueDofs(prod_); - resf_gf_.ProjectGridFunction(prod_gf_); - prod_gf_.ProjectGridFunction(resf_gf_); + // filter production + filter_gf_.ProjectGridFunction(prod_gf_); + prod_gf_.ProjectGridFunction(filter_gf_); prod_gf_.GetTrueDofs(prod_); } @@ -1544,6 +1672,15 @@ void ZetaModel::extrapolateState() { } void ZetaModel::extrapolateRHS() { + prod_next_.Set(1.0, prod_); + tts_next_.Set(1.0, tts_); + tls2_next_.Set(1.0, tls2_); + + prod_next_gf_.SetFromTrueDofs(prod_next_); + tts_next_gf_.SetFromTrueDofs(tts_next_); + tls2_next_gf_.SetFromTrueDofs(tls2_next_); + + /* prod_next_.Set(time_coeff_.ab1, prod_); prod_next_.Add(time_coeff_.ab2, prod_nm1_); prod_next_.Add(time_coeff_.ab3, prod_nm2_); @@ -1558,14 +1695,15 @@ void ZetaModel::extrapolateRHS() { tls2_next_.Add(time_coeff_.ab2, tls2_nm1_); tls2_next_.Add(time_coeff_.ab3, tls2_nm2_); tls2_next_gf_.SetFromTrueDofs(tls2_next_); + */ } void ZetaModel::updateZeta() { zeta_next_.Set(1.0, v2_next_); { // const double twoThirds = 2.0 / 3.0; - const double *dk = tke_next_.HostRead(); - double *dz = zeta_next_.HostReadWrite(); + const double* dk = tke_next_.HostRead(); + double* dz = zeta_next_.HostReadWrite(); for (int i = 0; i < SdofInt_; i++) { dz[i] /= std::max(dk[i], tke_min_); // leave larger so D_v2 can grow @@ -1683,7 +1821,7 @@ void ZetaModel::tkeStep() { // production Ms_->AddMult(prod_next_, res_, +1.0); - // destruction => 1/2 included in lhs + // explicit destruction tmpR0_.Set((1.0 - des_wgt_), tdr_next_); MsRho_->AddMult(tmpR0_, res_, -1.0); @@ -1704,7 +1842,7 @@ void ZetaModel::tkeStep() { } // Prepare for the solve - for (auto &tke_dbc : tke_dbcs_) { + for (auto& tke_dbc : tke_dbcs_) { tke_next_gf_.ProjectBdrCoefficient(*tke_dbc.coeff, tke_dbc.attr); } sfes_->GetRestrictionMatrix()->MultTranspose(res_, res_gf_); @@ -1721,7 +1859,7 @@ void ZetaModel::tkeStep() { // hard-clip { - double *dTKE = tke_next_.HostReadWrite(); + double* dTKE = tke_next_.HostReadWrite(); for (int i = 0; i < SdofInt_; i++) { dTKE[i] = std::max(dTKE[i], 0.0); } @@ -1755,8 +1893,8 @@ void ZetaModel::tdrStep() { ceps1_min = 1.4 * (1.0 + 0.05 * std::sqrt(1.5)); // const double *dk = tke_next_.HostRead(); // const double *dv2 = v2_next_.HostRead(); - const double *dz = zeta_next_.HostRead(); - double *data = tmpR0_.HostReadWrite(); + const double* dz = zeta_next_.HostRead(); + double* data = tmpR0_.HostReadWrite(); for (int i = 0; i < SdofInt_; i++) { // zeta model // double ceps1 = 1.4 * (1.0 + 0.012 / dz[i]); @@ -1776,7 +1914,7 @@ void ZetaModel::tdrStep() { } Ms_->AddMult(tmpR0_, res_, +1.0); - // destruction => 1/2 included in lhs + // explicit destruction tmpR0_.Set((1.0 - des_wgt_) * Ce2_, tdr_next_); tmpR0_ /= tts_next_; MsRho_->AddMult(tmpR0_, res_, -1.0); @@ -1787,16 +1925,16 @@ void ZetaModel::tdrStep() { diag_coeff_ = tdr_diag_coeff_; diff_total_coeff_ = tdr_diff_total_coeff_; - // boundary condition - Array empty; - Lk_form_->Update(); - Lk_form_->Assemble(); + // boundary condition -> moved to after tke solve + // Array empty; + // Lk_form_->Update(); + // Lk_form_->Assemble(); // Lk_form_->FormSystemMatrix(tke_ess_tdof_, Lk_); - Lk_form_->FormSystemMatrix(empty, Lk_); - Lk_->Mult(tke_next_, tmpR0_); - MsRhoInv_->Mult(tmpR0_, tmpR0a_); - tmpR0a_ *= -1.0; - tdr_wall_gf_.SetFromTrueDofs(tmpR0a_); + // Lk_form_->FormSystemMatrix(empty, Lk_); + // Lk_->Mult(tke_next_, tmpR0_); + // MsRhoInv_->Mult(tmpR0_, tmpR0a_); + // tmpR0a_ *= -1.0; + // tdr_wall_gf_.SetFromTrueDofs(tmpR0a_); He_form_->Update(); He_form_->Assemble(); @@ -1812,9 +1950,9 @@ void ZetaModel::tdrStep() { } // project new tdr bc onto gf which transfers actual ess bc's to solver - for (auto &tdr_dbc : tdr_dbcs_) { - // tdr_next_gf_.ProjectBdrCoefficient(*tdr_dbc.coeff, tdr_dbc.attr); - tdr_next_gf_.ProjectBdrCoefficient(*tdr_wall_eval_coeff_, tdr_dbc.attr); + for (auto& tdr_dbc : tdr_dbcs_) { + tdr_next_gf_.ProjectBdrCoefficient(*tdr_dbc.coeff, tdr_dbc.attr); + // tdr_next_gf_.ProjectBdrCoefficient(*tdr_wall_eval_coeff_, tdr_dbc.attr); } sfes_->GetRestrictionMatrix()->MultTranspose(res_, res_gf_); @@ -1829,7 +1967,7 @@ void ZetaModel::tdrStep() { tdr_next_gf_.GetTrueDofs(tdr_next_); // hard-clip - double *dTDR = tdr_next_.HostReadWrite(); + double* dTDR = tdr_next_.HostReadWrite(); for (int i = 0; i < SdofInt_; i++) { dTDR[i] = std::max(dTDR[i], 0.0); } @@ -1877,7 +2015,7 @@ void ZetaModel::zetaStep() { } // Prepare for the solve - for (auto &zeta_dbc : zeta_dbcs_) { + for (auto& zeta_dbc : zeta_dbcs_) { zeta_next_gf_.ProjectBdrCoefficient(*zeta_dbc.coeff, zeta_dbc.attr); } sfes_->GetRestrictionMatrix()->MultTranspose(res_, res_gf_); @@ -1893,7 +2031,7 @@ void ZetaModel::zetaStep() { zeta_next_gf_.GetTrueDofs(zeta_next_); // hard-clip - double *dZ = zeta_next_.HostReadWrite(); + double* dZ = zeta_next_.HostReadWrite(); for (int i = 0; i < SdofInt_; i++) { dZ[i] = std::max(dZ[i], zeta_min_); dZ[i] = std::min(dZ[i], 2.0 / 3.0); @@ -1917,14 +2055,22 @@ void ZetaModel::v2Step() { // production tmpR0_.Set(1.0, tke_next_); - // tmpR0_ *= fRate_; + tmpR0_ *= fRate_; + + // filter production + res_gf_.SetFromTrueDofs(tmpR0_); + filter_gf_.ProjectGridFunction(res_gf_); + res_gf_.ProjectGridFunction(filter_gf_); + res_gf_.GetTrueDofs(tmpR0_); + + /* res_gf_.ProjectGridFunction(fRate_gf_); res_gf_.GetTrueDofs(tmpR0a_); { - const double *df = tmpR0a_.HostRead(); + const double* df = tmpR0a_.HostRead(); // const double *dtkol = tts_kol_.HostRead(); - const double *dTTS = tts_.HostReadWrite(); - double *data = tmpR0_.HostReadWrite(); + const double* dTTS = tts_.HostReadWrite(); + double* data = tmpR0_.HostReadWrite(); for (int i = 0; i < SdofInt_; i++) { // data[i] *= std::min(df[i], 12.0/dtkol[i]); // data[i] *= df[i]; @@ -1933,11 +2079,16 @@ void ZetaModel::v2Step() { data[i] *= std::min(df[i], v2Prod_fLimiter_coeff_ / dTTS[i]); } } + */ MsRho_->AddMult(tmpR0_, res_, +1.0); - // destruction => 1/2 included in lhs + // explicit part of destruction tmpR0_.Set(6.0 * (1.0 - des_wgt_), tdr_next_); tmpR0_ *= zeta_; + res_gf_.SetFromTrueDofs(tmpR0_); + filter_gf_.ProjectGridFunction(res_gf_); + res_gf_.ProjectGridFunction(filter_gf_); + res_gf_.GetTrueDofs(tmpR0_); MsRho_->AddMult(tmpR0_, res_, -1.0); // Update Helmholtz operator to account for changing dt, rho, and kappa @@ -1958,7 +2109,7 @@ void ZetaModel::v2Step() { } // Prepare for the solve - for (auto &v2_dbc : v2_dbcs_) { + for (auto& v2_dbc : v2_dbcs_) { v2_next_gf_.ProjectBdrCoefficient(*v2_dbc.coeff, v2_dbc.attr); } sfes_->GetRestrictionMatrix()->MultTranspose(res_, res_gf_); @@ -1968,20 +2119,30 @@ void ZetaModel::v2Step() { // solve helmholtz eq for temp HvInv_->Mult(Bt2, Xt2); - assert(HvInv_->GetConverged()); + // assert(HvInv_->GetConverged()); Hv_form_->RecoverFEMSolution(Xt2, res_gf_, v2_next_gf_); v2_next_gf_.GetTrueDofs(v2_next_); + if (!(HvInv_->GetConverged())) { + if (rank0_) { + std::cout << "Warnign: v2 not converged" << endl; + v2_next_.Set(1.0, v2_); + v2_next_gf_.SetFromTrueDofs(v2_next_); + } + } + // hard-clip { - // const double *dtke = tke_next_.HostReadWrite(); - double *dv2 = v2_next_.HostReadWrite(); + const double* dtke = tke_next_.HostReadWrite(); + double* dv2 = v2_next_.HostReadWrite(); for (int i = 0; i < SdofInt_; i++) { dv2[i] = std::max(dv2[i], 0.0); + // clip when used in certain areas, allow to be above 2/3k for destruction in v2 // dv2[i] = std::min(dv2[i], 2.0/3.0 * dtke[i]); - if (dv2[i] != dv2[i]) std::cout << " v2 is actually NaN!" << endl; + + // if (dv2[i] != dv2[i]) std::cout << " v2 is actually NaN!" << endl; } } v2_next_gf_.SetFromTrueDofs(v2_next_); @@ -1992,20 +2153,6 @@ void ZetaModel::fStep() { res_ = 0.0; resf_ = 0.0; - // assemble source - /* - tmpR0b_.Set(C2_, prod_); - tmpR0b_ /= rho_; - tmpR0b_ /= tdr_; - tmpR0b_ += (C1_ - 1.0); - - tmpR0a_.Set(1.0, zeta_); - tmpR0a_ -= 2.0 / 3.0; - tmpR0a_ *= tmpR0b_; - tmpR0a_ /= tts_; - tmpR0a_ /= tls2_; - */ - // code-friendly form // rhs: 1/T * [(C1-6)*v2/k - 2/3*(C1-1)] - C2*Pk/(rho*k) double Ctmp1, Ctmp2; @@ -2016,94 +2163,180 @@ void ZetaModel::fStep() { tmpR0b_.Set(C2_, prod_); tmpR0b_ /= rho_; { - const double *dk = tke_next_.HostRead(); - double *data = tmpR0b_.HostReadWrite(); + const double* dk = tke_next_.HostRead(); + double* data = tmpR0b_.HostReadWrite(); for (int i = 0; i < SdofInt_; i++) { - data[i] /= std::max(dk[i], tke_min_); + data[i] /= smoothMax(dk[i], tke_min_); } } // v2/k { double twoThirds = 2.0 / 3.0; - const double *dv2 = v2_next_.HostRead(); - const double *dk = tke_next_.HostRead(); - double *data = tmpR0a_.HostReadWrite(); - for (int i = 0; i < SdofInt_; i++) { - data[i] = std::min(dv2[i], twoThirds * dk[i]); - } + const double* dv2 = v2_next_.HostRead(); + const double* dk = tke_next_.HostRead(); + double* data = tmpR0a_.HostReadWrite(); for (int i = 0; i < SdofInt_; i++) { - data[i] /= std::max(dk[i], tke_min_); + data[i] = smoothMin(dv2[i], twoThirds * dk[i]); } - // clip again? for (int i = 0; i < SdofInt_; i++) { - data[i] = std::min(data[i], zfp_max_); + data[i] /= smoothMax(dk[i], tke_min_); } } // intercept f res for viz - vfres_gf_.SetFromTrueDofs(tmpR0a_); + // vfres_gf_.SetFromTrueDofs(tmpR0a_); + // these terms are in L^2*nabla{f} - f = ... form tmpR0a_ *= Ctmp2; tmpR0a_ -= Ctmp1; tmpR0a_ /= tts_; tmpR0a_ -= tmpR0b_; - // limiter-term - /* + // neg to account for neg on rhs from ibp + // NO, this is done in Mf_ line below... tmpR0a_.Neg(); + + // if not including L2 in laplacian term (but do have 1/L2 on the diaf term) + // tmpR0a_ /= tls2_; + + // filter f-source + res_gf_.SetFromTrueDofs(tmpR0a_); + filter_gf_.ProjectGridFunction(res_gf_); + res_gf_.ProjectGridFunction(filter_gf_); + res_gf_.GetTrueDofs(tmpR0_); + resf_gf_.ProjectGridFunction(res_gf_); + resf_gf_.GetTrueDofs(ftmpR0_); + + // with diag in Hf pos and nabla neg (due to ibp), rhs needs a negative + Mf_->AddMult(ftmpR0_, resf_, -1.0); + resf_gf_.SetFromTrueDofs(resf_); + + // Update Helmholtz operator + Hf_form_->Update(); + Hf_form_->Assemble(); + Hf_form_->FormSystemMatrix(fRate_ess_tdof_, Hf_); + + HfInv_->SetOperator(*Hf_); + if (partial_assembly_) { + delete HfInvPC_; + Vector diag_pa(sfes_->GetTrueVSize()); + Hf_form_->AssembleDiagonal(diag_pa); + HfInvPC_ = new OperatorJacobiSmoother(diag_pa, fRate_ess_tdof_); + HfInv_->SetPreconditioner(*HfInvPC_); + } + + // Prepare for the solve + for (auto& fRate_dbc : fRate_dbcs_) { + fRate_gf_.ProjectBdrCoefficient(*fRate_dbc.coeff, fRate_dbc.attr); + } + sfes_->GetRestrictionMatrix()->MultTranspose(resf_, resf_gf_); + + Vector Xt2, Bt2; + Hf_form_->FormLinearSystem(fRate_ess_tdof_, fRate_gf_, resf_gf_, Hf_, Xt2, Bt2, 1); + + // solve helmholtz eq for temp + HfInv_->Mult(Bt2, Xt2); + assert(HfInv_->GetConverged()); + + Hf_form_->RecoverFEMSolution(Xt2, resf_gf_, fRate_gf_); + fRate_gf_.GetTrueDofs(fRate_); + + // hard-clip { - double twoThirds = 2.0/3.0; - double tmp; - const double *dz = zeta_next_.HostRead(); - double *data = tmpR0c_.HostReadWrite(); - for (int i = 0; i < SdofInt_; i++) { - tmp = dz[i] - twoThirds; - tmp = std::max(tmp, 0.0); - tmp *= (C1_ - 1.0); - data[i] = tmp; + double* df = fRate_.HostReadWrite(); + for (int i = 0; i < sfes_->GetTrueVSize(); i++) { + if (df[i] != df[i]) std::cout << " f is actually NaN!" << endl; + df[i] = std::max(df[i], 0.0); } } - tmpR0c_ /= tts_; - tmpR0a_ += tmpR0c_; + fRate_gf_.SetFromTrueDofs(fRate_); +} + +// Based on code-friendly version but shifts the f-shift to production +// and treats the destruction implicitly. Has the advantage of maintaining +// correct destruction behavior with zeta and increasing diagonal dominance +// to reduce corner singularity sensitivity +void ZetaModel::fStepRobustified() { + // Build the right-hand-side + res_ = 0.0; + resf_ = 0.0; + + // update implicit destruction + tmpR0_ = 0.0; { - double *data = tmpR0a_.HostReadWrite(); - for (int i = 0; i < SdofInt_; i++) { - data[i] = std::min(data[i], 0.0); + double* data = tmpR0_.HostReadWrite(); + double* dz = zeta_.HostReadWrite(); + double zetaCap; + double twoThree = 2.0 / 3.0; + double cd = C1_ * C3_; + double pd = C1_ - C4_; + for (int i = 0; i < sfes_->GetTrueVSize(); i++) { + zetaCap = std::min(dz[i], twoThree); + data[i] = cd * std::pow(zetaCap, pd); } } - */ + res_gf_.SetFromTrueDofs(tmpR0_); + filter_gf_.ProjectGridFunction(res_gf_); + res_gf_.ProjectGridFunction(filter_gf_); + res_gf_.GetTrueDofs(tmpR0_); + Df_gf_.SetFromTrueDofs(tmpR0_); - // HACK limit - /* + // "code-friendly" form + // rhs: 1/T * [(C1-6)*v2/k - 2/3*(C1-1)] - C2*Pk/(rho*k) + // lhs: L^2*nabla{f} - f + + // "robustified" form + // rhs = -C1*5*zeta^(2-C4)/T + C2*Pk/k + 1/T(6*zeta + (C1-1)*2/3) + // lhs = (I+Df-L^2*nabla){f} + // Df = C1*C3*zeta^(1-C4) + + // C2*Pk/(rho*k) + tmpR0b_.Set(C2_, prod_); + tmpR0b_ /= rho_; { - double twoThirds = 2.0/3.0; - double Pv2_max; - const double *dP = prod_.HostRead(); - const double *de = tdr_.HostRead(); - const double *dv2 = v2_.HostRead(); - const double *dk = tke_.HostRead(); - const double *drho = rho_.HostRead(); - double *data = tmpR0a_.HostReadWrite(); + const double* dk = tke_next_.HostRead(); + double* data = tmpR0b_.HostReadWrite(); for (int i = 0; i < SdofInt_; i++) { - Pv2_max = twoThirds * (dP[i]/drho[i] - de[i]); - // Pv2_max += 6.0 * (dv2[i]/std::max(dk[i], tke_min_)) * de[i]; - Pv2_max += 6.0 * twoThirds * de[i]; - data[i] = - Pv2_max; + data[i] /= smoothMax(dk[i], tke_min_); } } - */ - // minus is to (-) on operator - // Ms_->AddMult(tmpR0a_, res_, -1.0); + // explicit part of destruction + { + const double* dz = zeta_.HostRead(); + const double* dT = tts_.HostRead(); + double* data = tmpR0b_.HostReadWrite(); + double zetaCap; + double twoThree = 2.0 / 3.0; + double cd = -C1_ * C3_ * 5.0; + double pd = 2.0 - C4_; + for (int i = 0; i < SdofInt_; i++) { + zetaCap = std::min(dz[i], twoThree); + data[i] += cd * std::pow(zetaCap, pd) / dT[i]; + } + } - // if not including L2 in laplacian term - tmpR0a_ /= tls2_; + // shift and part of of Pf + { + const double* dz = zeta_.HostRead(); + const double* dT = tts_.HostRead(); + double* data = tmpR0b_.HostReadWrite(); + double zetaCap; + double twoThree = 2.0 / 3.0; + double cd = (C1_ - 1.0) * twoThree; + for (int i = 0; i < SdofInt_; i++) { + zetaCap = std::min(dz[i], twoThree); + data[i] += (6.0 * zetaCap + cd) / dT[i]; + } + } - // project to f-space - res_gf_.SetFromTrueDofs(tmpR0a_); - resf_gf_.ProjectGridFunction(res_gf_); - resf_gf_.GetTrueDofs(ftmpR0_); + // filter f-source + res_gf_.SetFromTrueDofs(tmpR0b_); + filter_gf_.ProjectGridFunction(res_gf_); + res_gf_.ProjectGridFunction(filter_gf_); + res_gf_.GetTrueDofs(tmpR0_); - Mf_->AddMult(ftmpR0_, resf_, -1.0); + resf_ = 0.0; + Mf_->AddMult(tmpR0_, resf_, 1.0); resf_gf_.SetFromTrueDofs(resf_); // Update Helmholtz operator @@ -2114,17 +2347,17 @@ void ZetaModel::fStep() { HfInv_->SetOperator(*Hf_); if (partial_assembly_) { delete HfInvPC_; - Vector diag_pa(ffes_->GetTrueVSize()); + Vector diag_pa(sfes_->GetTrueVSize()); Hf_form_->AssembleDiagonal(diag_pa); HfInvPC_ = new OperatorJacobiSmoother(diag_pa, fRate_ess_tdof_); HfInv_->SetPreconditioner(*HfInvPC_); } // Prepare for the solve - for (auto &fRate_dbc : fRate_dbcs_) { + for (auto& fRate_dbc : fRate_dbcs_) { fRate_gf_.ProjectBdrCoefficient(*fRate_dbc.coeff, fRate_dbc.attr); } - ffes_->GetRestrictionMatrix()->MultTranspose(resf_, resf_gf_); + sfes_->GetRestrictionMatrix()->MultTranspose(resf_, resf_gf_); Vector Xt2, Bt2; Hf_form_->FormLinearSystem(fRate_ess_tdof_, fRate_gf_, resf_gf_, Hf_, Xt2, Bt2, 1); @@ -2138,10 +2371,10 @@ void ZetaModel::fStep() { // hard-clip { - double *df = fRate_.HostReadWrite(); - for (int i = 0; i < ffes_->GetTrueVSize(); i++) { - df[i] = std::max(df[i], 0.0); + double* df = fRate_.HostReadWrite(); + for (int i = 0; i < sfes_->GetTrueVSize(); i++) { if (df[i] != df[i]) std::cout << " f is actually NaN!" << endl; + df[i] = std::max(df[i], 0.0); } } fRate_gf_.SetFromTrueDofs(fRate_); @@ -2185,11 +2418,18 @@ void ZetaModel::computeTDRwall() { Lk_->AddMult(tke_next_, tmpR0_); MsInv_->Mult(tmpR0_, tke_lapl_); - tke_lapl_gf_.SetFromTrueDofs(tmpR0_); + tke_lapl_.Neg(); + tke_lapl_gf_.SetFromTrueDofs(tke_lapl_); + + // update for and tdr inlets (add advection of tke later) + prod_plus_tkeDiff_.Set(1.0, prod_next_); + prod_plus_tkeDiff_ /= rho_; + prod_plus_tkeDiff_.Add(1.0, tke_lapl_); + prod_plus_tkeDiff_gf_.SetFromTrueDofs(prod_plus_tkeDiff_); } /// Add a Dirichlet boundary condition to scalar fields -void ZetaModel::AddTKEDirichletBC(const double &tke, Array &attr) { +void ZetaModel::AddTKEDirichletBC(const double& tke, Array& attr) { tke_dbcs_.emplace_back(attr, new ConstantCoefficient(tke)); for (int i = 0; i < attr.Size(); ++i) { if (attr[i] == 1) { @@ -2199,7 +2439,7 @@ void ZetaModel::AddTKEDirichletBC(const double &tke, Array &attr) { } } -void ZetaModel::AddTKEDirichletBC(Coefficient *coeff, Array &attr) { +void ZetaModel::AddTKEDirichletBC(Coefficient* coeff, Array& attr) { tke_dbcs_.emplace_back(attr, coeff); for (int i = 0; i < attr.Size(); ++i) { if (attr[i] == 1) { @@ -2209,11 +2449,11 @@ void ZetaModel::AddTKEDirichletBC(Coefficient *coeff, Array &attr) { } } -void ZetaModel::AddTKEDirichletBC(ScalarFuncT *f, Array &attr) { +void ZetaModel::AddTKEDirichletBC(ScalarFuncT* f, Array& attr) { AddTKEDirichletBC(new FunctionCoefficient(f), attr); } -void ZetaModel::AddV2DirichletBC(const double &v2, Array &attr) { +void ZetaModel::AddV2DirichletBC(const double& v2, Array& attr) { v2_dbcs_.emplace_back(attr, new ConstantCoefficient(v2)); for (int i = 0; i < attr.Size(); ++i) { if (attr[i] == 1) { @@ -2223,7 +2463,7 @@ void ZetaModel::AddV2DirichletBC(const double &v2, Array &attr) { } } -void ZetaModel::AddV2DirichletBC(Coefficient *coeff, Array &attr) { +void ZetaModel::AddV2DirichletBC(Coefficient* coeff, Array& attr) { v2_dbcs_.emplace_back(attr, coeff); for (int i = 0; i < attr.Size(); ++i) { if (attr[i] == 1) { @@ -2233,7 +2473,7 @@ void ZetaModel::AddV2DirichletBC(Coefficient *coeff, Array &attr) { } } -void ZetaModel::AddTDRDirichletBC(const double &tdr, Array &attr) { +void ZetaModel::AddTDRDirichletBC(const double& tdr, Array& attr) { tdr_dbcs_.emplace_back(attr, new ConstantCoefficient(tdr)); for (int i = 0; i < attr.Size(); ++i) { if (attr[i] == 1) { @@ -2243,7 +2483,7 @@ void ZetaModel::AddTDRDirichletBC(const double &tdr, Array &attr) { } } -void ZetaModel::AddTDRDirichletBC(Coefficient *coeff, Array &attr) { +void ZetaModel::AddTDRDirichletBC(Coefficient* coeff, Array& attr) { tdr_dbcs_.emplace_back(attr, coeff); for (int i = 0; i < attr.Size(); ++i) { if (attr[i] == 1) { @@ -2253,7 +2493,7 @@ void ZetaModel::AddTDRDirichletBC(Coefficient *coeff, Array &attr) { } } -void ZetaModel::AddZETADirichletBC(const double &zeta, Array &attr) { +void ZetaModel::AddZETADirichletBC(const double& zeta, Array& attr) { zeta_dbcs_.emplace_back(attr, new ConstantCoefficient(zeta)); for (int i = 0; i < attr.Size(); ++i) { if (attr[i] == 1) { @@ -2263,7 +2503,7 @@ void ZetaModel::AddZETADirichletBC(const double &zeta, Array &attr) { } } -void ZetaModel::AddZETADirichletBC(Coefficient *coeff, Array &attr) { +void ZetaModel::AddZETADirichletBC(Coefficient* coeff, Array& attr) { zeta_dbcs_.emplace_back(attr, coeff); for (int i = 0; i < attr.Size(); ++i) { if (attr[i] == 1) { @@ -2273,7 +2513,7 @@ void ZetaModel::AddZETADirichletBC(Coefficient *coeff, Array &attr) { } } -void ZetaModel::AddFRATEDirichletBC(const double &fRate, Array &attr) { +void ZetaModel::AddFRATEDirichletBC(const double& fRate, Array& attr) { fRate_dbcs_.emplace_back(attr, new ConstantCoefficient(fRate)); for (int i = 0; i < attr.Size(); ++i) { if (attr[i] == 1) { @@ -2283,7 +2523,7 @@ void ZetaModel::AddFRATEDirichletBC(const double &fRate, Array &attr) { } } -void ZetaModel::AddFRATEDirichletBC(Coefficient *coeff, Array &attr) { +void ZetaModel::AddFRATEDirichletBC(Coefficient* coeff, Array& attr) { fRate_dbcs_.emplace_back(attr, coeff); for (int i = 0; i < attr.Size(); ++i) { if (attr[i] == 1) { @@ -2292,3 +2532,91 @@ void ZetaModel::AddFRATEDirichletBC(Coefficient *coeff, Array &attr) { } } } + +// Smoothed-min (C-infinity) function which does not over-shoot +// switched back to basic min for now as smoothed functions +// were causing issues with small numbers +double smoothMin(double val1, double val2) { + + // double C = 4.0; + double k = 0.001; + double tanh_half = 0.54930615; + double val, arg, wt; + + // val = -1.0 / C * std::log(std::exp(-C * val1) + std::exp(-C * val2)); + + if (isnan(val1) | isinf(val1)) { + std::cout << "smin: BAD val1" << endl; + } + if (isnan(val2) | isinf(val2)) { + std::cout << "smin: BAD val2" << endl; + } + + // arg = val1 / val2; + // arg = std::pow(arg,C); + // wt = std::tanh(tanh_half * arg); + // val = (1.0-wt) * val1 + wt * val2; + + // val = 0.5 * (val1 + val2 - std::sqrt((val1-val2)*(val1-val2) + k)); + + val = std::min(val1, val2); + + return val; +} + +// Smoothed-max (C-infinity) function which does not under-shoot +// switched back to basic max for now as smoothed functions +// were causing issues with small numbers +double smoothMax(double val1, double val2) { + double C = 4.0; + double k = 0.001; + double tanh_half = 0.54930615; + double val, arg, wt; + + // val = 1.0 / C * std::log(std::exp(C * val1) + std::exp(C * val2)); + + if (isnan(val1) | isinf(val1)) { + std::cout << "smax: BAD val1" << endl; + } + if (isnan(val2) | isinf(val2)) { + std::cout << "smax: BAD val2" << endl; + } + + // arg = val1 / val2; + // arg = std::pow(arg,C); + // wt = std::tanh(tanh_half * arg); + // val = wt * val1 + (1.0 - wt) * val2; + + // val = 0.5 * (val1 + val2 + std::sqrt((val1-val2)*(val1-val2) + k)); + + val = std::max(val1, val2); + + return val; +} + +// Smoothed-min (C-infinity) function which does not over-shoot +double smoothMinTwo(double val1, double val2) { + double C = 20.0; + double k = 0.001; + double tanh_half = 0.54930615; + double val, arg, wt; + + val = -1.0 / C * std::log(std::exp(-C * val1) + std::exp(-C * val2)); + + if (isnan(val1) | isinf(val1)) { + std::cout << "smin: BAD val1" << endl; + } + if (isnan(val2) | isinf(val2)) { + std::cout << "smin: BAD val2" << endl; + } + + // arg = val1 / val2; + // arg = std::pow(arg,C); + // wt = std::tanh(tanh_half * arg); + // val = (1.0-wt) * val1 + wt * val2; + + // val = 0.5 * (val1 + val2 - std::sqrt((val1-val2)*(val1-val2) + k)); + + // val = std::min(val1,val2); + return val; +} diff --git a/src/zetaModel.hpp b/src/zetaModel.hpp index 89bfa2fd..9f0c5537 100644 --- a/src/zetaModel.hpp +++ b/src/zetaModel.hpp @@ -56,8 +56,8 @@ class Tps; #include "tps_mfem_wrap.hpp" #include "turb_model_base.hpp" -using VecFuncT = void(const Vector &x, double t, Vector &u); -using ScalarFuncT = double(const Vector &x, double t); +using VecFuncT = void(const Vector& x, double t, Vector& u); +using ScalarFuncT = double(const Vector& x, double t); class LoMachSolver; class LoMachOptions; @@ -68,14 +68,14 @@ class ZetaModel : public TurbModelBase { friend class LoMachSolver; private: - TPS::Tps *tpsP_; - LoMachOptions *loMach_opts_ = nullptr; + TPS::Tps* tpsP_; + LoMachOptions* loMach_opts_ = nullptr; // Mesh and discretization scheme info - ParMesh *pmesh_ = nullptr; + ParMesh* pmesh_ = nullptr; int order_; IntegrationRules gll_rules_; - const temporalSchemeCoefficients &time_coeff_; + const temporalSchemeCoefficients& time_coeff_; double dt_; double time_; int nvel_, dim_; @@ -103,6 +103,9 @@ class ZetaModel : public TurbModelBase { bool numerical_integ_ = false; // bool numerical_integ_ = true; + // alternative f-formulation + bool robust_ = false; + // Linear-solver-related options int pl_solve_ = 0; int max_iter_; // = 2000; @@ -122,37 +125,42 @@ class ZetaModel : public TurbModelBase { double prod_wgt_; double zfp_max_; double v2Prod_fLimiter_coeff_; + double mutMax_scale_; + + // streamwise stabilization + bool sw_stab_ = false; /**< Enable/disable supg stabilization. */ + double Reh_factor_, Reh_offset_; /**< supg stabilization parameters */ // just keep these saved for ease int numWalls_, numInlets_, numOutlets_; // Scalar \f$H^1\f$ finite element collection. - FiniteElementCollection *sfec_ = nullptr; + FiniteElementCollection* sfec_ = nullptr; // Scalar \f$H^1\f$ finite element space. - ParFiniteElementSpace *sfes_ = nullptr; + ParFiniteElementSpace* sfes_ = nullptr; /// Velocity \f$H^1\f$ finite element collection. - FiniteElementCollection *vfec_ = nullptr; + FiniteElementCollection* vfec_ = nullptr; /// Velocity \f$(H^1)^d\f$ finite element space. - ParFiniteElementSpace *vfes_ = nullptr; + ParFiniteElementSpace* vfes_ = nullptr; - FiniteElementCollection *ffec_ = nullptr; - ParFiniteElementSpace *ffes_ = nullptr; + FiniteElementCollection* ffec_ = nullptr; + ParFiniteElementSpace* ffes_ = nullptr; /// velocity - ParGridFunction *vel_gf_ = nullptr; + ParGridFunction* vel_gf_ = nullptr; Vector vel_; /// swirl - ParGridFunction *swirl_gf_ = nullptr; + ParGridFunction* swirl_gf_ = nullptr; Vector swirl_; /// velocity gradients - ParGridFunction *gradU_gf_ = nullptr; - ParGridFunction *gradV_gf_ = nullptr; - ParGridFunction *gradW_gf_ = nullptr; + ParGridFunction* gradU_gf_ = nullptr; + ParGridFunction* gradV_gf_ = nullptr; + ParGridFunction* gradW_gf_ = nullptr; Vector gradU_; Vector gradV_; Vector gradW_; @@ -171,7 +179,7 @@ class ZetaModel : public TurbModelBase { Vector mult_; /// grid information - ParGridFunction *gridScale_gf_ = nullptr; + ParGridFunction* gridScale_gf_ = nullptr; /// eddy viscosity ParGridFunction eddyVisc_gf_; @@ -195,7 +203,7 @@ class ZetaModel : public TurbModelBase { Vector tdr_nm1_, tdr_nm2_; Vector Ntdr_, Ntdr_nm1_, Ntdr_nm2_; ParGridFunction tdr_wall_gf_; - GridFunctionCoefficient *tdr_bc_ = nullptr; + GridFunctionCoefficient* tdr_bc_ = nullptr; /// ratio of wall normal stress component to k ParGridFunction zeta_gf_; @@ -234,6 +242,12 @@ class ZetaModel : public TurbModelBase { ParGridFunction prod_next_gf_; Vector prod_, prod_next_, prod_nm1_, prod_nm2_; + ParGridFunction prod_plus_tkeDiff_gf_; + Vector prod_plus_tkeDiff_; + + // implicit part of destruction for f + ParGridFunction Df_gf_; + /// model coefficients double Cmu_ = 0.22; double sigmaK_ = 1.0; @@ -248,7 +262,10 @@ class ZetaModel : public TurbModelBase { // double Cn_ = 85.0; double Cl_ = 0.23; double Cn_ = 70.0; - double Ce1_; // function of local zeta + double Ce1_; // function of local zeta + double C3_ = 0.075; // tune + double C4_ = 1.28; // tune + double inlet_scale_; ParGridFunction res_gf_; Vector res_; @@ -256,6 +273,9 @@ class ZetaModel : public TurbModelBase { ParGridFunction resf_gf_; Vector resf_; + ParGridFunction filter_gf_; + Vector filter_; + ParGridFunction vfres_gf_; // ParGridFunction diag_gf_; @@ -269,95 +289,118 @@ class ZetaModel : public TurbModelBase { Vector radius_v_; /// coefficient fields for operators - GridFunctionCoefficient *delta_coeff_ = nullptr; - GradientGridFunctionCoefficient *gradTKE_coeff_ = nullptr; - ScalarVectorProductCoefficient *nu_gradTKE_coeff_ = nullptr; - GridFunctionCoefficient *mu_coeff_ = nullptr; - RatioCoefficient *nu_coeff_ = nullptr; - RatioCoefficient *nu_delta_coeff_ = nullptr; - ProductCoefficient *two_nu_delta_coeff_ = nullptr; - ProductCoefficient *two_nuNeg_delta_coeff_ = nullptr; - GradientGridFunctionCoefficient *gradZeta_coeff_ = nullptr; + GridFunctionCoefficient* delta_coeff_ = nullptr; + GradientGridFunctionCoefficient* gradTKE_coeff_ = nullptr; + ScalarVectorProductCoefficient* nu_gradTKE_coeff_ = nullptr; + GridFunctionCoefficient* mu_coeff_ = nullptr; + RatioCoefficient* nu_coeff_ = nullptr; + RatioCoefficient* nu_delta_coeff_ = nullptr; + ProductCoefficient* two_nu_delta_coeff_ = nullptr; + ProductCoefficient* two_nuNeg_delta_coeff_ = nullptr; + GradientGridFunctionCoefficient* gradZeta_coeff_ = nullptr; // ScalarVectorProductCoefficient *tdr_wall_coeff_ = nullptr; // DivergenceGridFunctionCoefficient *tdr_wall_coeff_ = nullptr; - GridFunctionCoefficient *tdr_wall_coeff_ = nullptr; - ScalarVectorProductCoefficient *fRate_wall_coeff_ = nullptr; - ScalarVectorProductCoefficient *wall_coeff_ = nullptr; - GridFunctionCoefficient *tdr_wall_eval_coeff_ = nullptr; - - GridFunctionCoefficient *swirl_coeff_ = nullptr; - ProductCoefficient *rad_rho_coeff_ = nullptr; - ScalarVectorProductCoefficient *rad_rhou_coeff_ = nullptr; - ProductCoefficient *rad_tke_diag_coeff_ = nullptr; - ProductCoefficient *rad_tke_diff_total_coeff_ = nullptr; - ProductCoefficient *rad_tdr_diag_coeff_ = nullptr; - ProductCoefficient *rad_tdr_diff_total_coeff_ = nullptr; - ProductCoefficient *rad_v2_diag_coeff_ = nullptr; - ProductCoefficient *rad_f_diag_coeff_ = nullptr; - ProductCoefficient *rad_unity_coeff_ = nullptr; - ProductCoefficient *rad_zeta_diag_coeff_ = nullptr; - ProductCoefficient *rad_zeta_diff_total_coeff_ = nullptr; - ProductCoefficient *rad_scalar_diff_coeff_ = nullptr; - ScalarVectorProductCoefficient *rad_nu_gradTKE_coeff_ = nullptr; - - GridFunctionCoefficient *tts_coeff_ = nullptr; - GridFunctionCoefficient *tls2_coeff_ = nullptr; - GridFunctionCoefficient *prod_coeff_ = nullptr; - GridFunctionCoefficient *tke_coeff_ = nullptr; - GridFunctionCoefficient *tdr_coeff_ = nullptr; - GridFunctionCoefficient *rho_coeff_ = nullptr; - VectorGridFunctionCoefficient *vel_coeff_ = nullptr; - ScalarVectorProductCoefficient *rhou_coeff_ = nullptr; - GridFunctionCoefficient *scalar_diff_coeff_ = nullptr; - GridFunctionCoefficient *mut_coeff_ = nullptr; - GridFunctionCoefficient *mult_coeff_ = nullptr; - SumCoefficient *tke_diff_sum_coeff_ = nullptr; - SumCoefficient *tdr_diff_sum_coeff_ = nullptr; - SumCoefficient *zeta_diff_sum_coeff_ = nullptr; - ProductCoefficient *tke_diff_total_coeff_ = nullptr; - ProductCoefficient *tdr_diff_total_coeff_ = nullptr; - ProductCoefficient *zeta_diff_total_coeff_ = nullptr; - ConstantCoefficient *unity_diff_coeff_ = nullptr; + GridFunctionCoefficient* tdr_wall_coeff_ = nullptr; + ScalarVectorProductCoefficient* fRate_wall_coeff_ = nullptr; + ScalarVectorProductCoefficient* wall_coeff_ = nullptr; + GridFunctionCoefficient* tdr_wall_eval_coeff_ = nullptr; + + GridFunctionCoefficient* swirl_coeff_ = nullptr; + ProductCoefficient* rad_rho_coeff_ = nullptr; + ScalarVectorProductCoefficient* rad_rhou_coeff_ = nullptr; + ProductCoefficient* rad_tke_diag_coeff_ = nullptr; + ProductCoefficient* rad_tke_diff_total_coeff_ = nullptr; + ProductCoefficient* rad_tdr_diag_coeff_ = nullptr; + ProductCoefficient* rad_tdr_diff_total_coeff_ = nullptr; + ProductCoefficient* rad_v2_diag_coeff_ = nullptr; + ProductCoefficient* rad_f_diag_coeff_ = nullptr; + ProductCoefficient* rad_unity_coeff_ = nullptr; + ProductCoefficient* rad_zeta_diag_coeff_ = nullptr; + ProductCoefficient* rad_zeta_diff_total_coeff_ = nullptr; + ProductCoefficient* rad_scalar_diff_coeff_ = nullptr; + ScalarVectorProductCoefficient* rad_nu_gradTKE_coeff_ = nullptr; + ProductCoefficient* rad_tls2_coeff_ = nullptr; + + GridFunctionCoefficient* tts_coeff_ = nullptr; + GridFunctionCoefficient* tls2_coeff_ = nullptr; + GridFunctionCoefficient* prod_coeff_ = nullptr; + GridFunctionCoefficient* tke_coeff_ = nullptr; + GridFunctionCoefficient* tdr_coeff_ = nullptr; + GridFunctionCoefficient* rho_coeff_ = nullptr; + VectorGridFunctionCoefficient* vel_coeff_ = nullptr; + ScalarVectorProductCoefficient* rhou_coeff_ = nullptr; + GridFunctionCoefficient* scalar_diff_coeff_ = nullptr; + GridFunctionCoefficient* mut_coeff_ = nullptr; + GridFunctionCoefficient* mult_coeff_ = nullptr; + SumCoefficient* tke_diff_sum_coeff_ = nullptr; + SumCoefficient* tdr_diff_sum_coeff_ = nullptr; + SumCoefficient* zeta_diff_sum_coeff_ = nullptr; + ProductCoefficient* tke_diff_total_coeff_ = nullptr; + ProductCoefficient* tdr_diff_total_coeff_ = nullptr; + ProductCoefficient* zeta_diff_total_coeff_ = nullptr; + ConstantCoefficient* unity_diff_coeff_ = nullptr; // ProductCoefficient *unity_diff_total_coeff_ = nullptr; - ConstantCoefficient *unity_coeff_ = nullptr; - ConstantCoefficient *zero_coeff_ = nullptr; - ConstantCoefficient *posTwo_coeff_ = nullptr; - ConstantCoefficient *negTwo_coeff_ = nullptr; - - GridFunctionCoefficient *rhoDt_coeff_ = nullptr; - RatioCoefficient *rhoTTS_coeff_ = nullptr; - ConstantCoefficient *Ce2_coeff_ = nullptr; - ProductCoefficient *Ce2rhoTTS_coeff_ = nullptr; - RatioCoefficient *Pk_coeff_ = nullptr; - RatioCoefficient *ek_coeff_ = nullptr; - ProductCoefficient *ek_rho_coeff_ = nullptr; - SumCoefficient *tke_diag_coeff_ = nullptr; - SumCoefficient *tdr_diag_coeff_ = nullptr; - SumCoefficient *zeta_diag_coeff_ = nullptr; - SumCoefficient *v2_diag_coeff_ = nullptr; - RatioCoefficient *f_diag_coeff_ = nullptr; - SumCoefficient *f_diag_total_coeff_ = nullptr; - - ProductCoefficient *diff_total_coeff_ = nullptr; - SumCoefficient *diag_coeff_ = nullptr; - - GridFunctionCoefficient *tke_field_ = nullptr; - GridFunctionCoefficient *v2_field_ = nullptr; + ConstantCoefficient* unity_coeff_ = nullptr; + ConstantCoefficient* zero_coeff_ = nullptr; + ConstantCoefficient* posTwo_coeff_ = nullptr; + ConstantCoefficient* negTwo_coeff_ = nullptr; + + GridFunctionCoefficient* rhoDt_coeff_ = nullptr; + RatioCoefficient* rhoTTS_coeff_ = nullptr; + ConstantCoefficient* Ce2_coeff_ = nullptr; + ProductCoefficient* Ce2rhoTTS_coeff_ = nullptr; + RatioCoefficient* Pk_coeff_ = nullptr; + RatioCoefficient* ek_coeff_ = nullptr; + ProductCoefficient* ek_rho_coeff_ = nullptr; + SumCoefficient* tke_diag_coeff_ = nullptr; + SumCoefficient* tdr_diag_coeff_ = nullptr; + SumCoefficient* zeta_diag_coeff_ = nullptr; + SumCoefficient* v2_diag_coeff_ = nullptr; + RatioCoefficient* f_diag_coeff_ = nullptr; + SumCoefficient* f_diag_total_coeff_ = nullptr; + + ProductCoefficient* diff_total_coeff_ = nullptr; + SumCoefficient* diag_coeff_ = nullptr; + + GridFunctionCoefficient* tke_field_ = nullptr; + GridFunctionCoefficient* v2_field_ = nullptr; + GridFunctionCoefficient* tdr_field_ = nullptr; + ProductCoefficient* tke_scaled_field_ = nullptr; + ProductCoefficient* v2_scaled_field_ = nullptr; + ConstantCoefficient* scaling_coeff_ = nullptr; + + // streamwise stabilization + VectorMagnitudeCoefficient* umag_coeff_ = nullptr; + GridFunctionCoefficient* gscale_coeff_ = nullptr; + ProductCoefficient* gscale2_coeff_ = nullptr; + GridFunctionCoefficient* visc_coeff_ = nullptr; + PowerCoefficient* visc_inv_coeff_ = nullptr; + ProductCoefficient* reh1_coeff_ = nullptr; + ProductCoefficient* reh2_coeff_ = nullptr; + ProductCoefficient* Reh_coeff_ = nullptr; + ExtTransformedCoefficient* csupg_coeff_ = nullptr; + ProductCoefficient* uw1_coeff_ = nullptr; + ProductCoefficient* uw2_coeff_ = nullptr; + ProductCoefficient* upwind_coeff_ = nullptr; + TransformedMatrixVectorCoefficient* swdiff_coeff_ = nullptr; + ScalarMatrixProductCoefficient* supg_coeff_ = nullptr; + + GridFunctionCoefficient* f_destruction_coeff_ = nullptr; /// operators and solvers - ParBilinearForm *As_form_ = nullptr; - ParBilinearForm *Ms_form_ = nullptr; - ParBilinearForm *MsRho_form_ = nullptr; - ParBilinearForm *Mf_form_ = nullptr; - ParBilinearForm *Hk_form_ = nullptr; - ParBilinearForm *He_form_ = nullptr; - ParBilinearForm *Hv_form_ = nullptr; - ParBilinearForm *Hf_form_ = nullptr; - ParBilinearForm *Hz_form_ = nullptr; - ParBilinearForm *Lk_form_ = nullptr; - ParBilinearForm *Lf_form_ = nullptr; - ParLinearForm *Lk_bdry_ = nullptr; - ParLinearForm *He_bdry_ = nullptr; + ParBilinearForm* As_form_ = nullptr; + ParBilinearForm* Ms_form_ = nullptr; + ParBilinearForm* MsRho_form_ = nullptr; + ParBilinearForm* Mf_form_ = nullptr; + ParBilinearForm* Hk_form_ = nullptr; + ParBilinearForm* He_form_ = nullptr; + ParBilinearForm* Hv_form_ = nullptr; + ParBilinearForm* Hf_form_ = nullptr; + ParBilinearForm* Hz_form_ = nullptr; + ParBilinearForm* Lk_form_ = nullptr; + ParBilinearForm* Lf_form_ = nullptr; + ParLinearForm* Lk_bdry_ = nullptr; + ParLinearForm* He_bdry_ = nullptr; OperatorHandle As_; OperatorHandle Ms_; @@ -371,21 +414,21 @@ class ZetaModel : public TurbModelBase { OperatorHandle Lk_; OperatorHandle Lf_; - mfem::Solver *MsInvPC_ = nullptr; - mfem::CGSolver *MsInv_ = nullptr; - mfem::Solver *MsRhoInvPC_ = nullptr; - mfem::CGSolver *MsRhoInv_ = nullptr; - mfem::Solver *HkInvPC_ = nullptr; - mfem::Solver *HeInvPC_ = nullptr; - mfem::Solver *HvInvPC_ = nullptr; - mfem::Solver *HfInvPC_ = nullptr; - mfem::Solver *HzInvPC_ = nullptr; - mfem::CGSolver *HkInv_ = nullptr; - mfem::CGSolver *HeInv_ = nullptr; - mfem::CGSolver *HvInv_ = nullptr; - mfem::CGSolver *HfInv_ = nullptr; + mfem::Solver* MsInvPC_ = nullptr; + mfem::CGSolver* MsInv_ = nullptr; + mfem::Solver* MsRhoInvPC_ = nullptr; + mfem::CGSolver* MsRhoInv_ = nullptr; + mfem::Solver* HkInvPC_ = nullptr; + mfem::Solver* HeInvPC_ = nullptr; + mfem::Solver* HvInvPC_ = nullptr; + mfem::Solver* HfInvPC_ = nullptr; + mfem::Solver* HzInvPC_ = nullptr; + mfem::CGSolver* HkInv_ = nullptr; + mfem::CGSolver* HeInv_ = nullptr; + mfem::CGSolver* HvInv_ = nullptr; + mfem::CGSolver* HfInv_ = nullptr; // mfem::GMRESSolver *HfInv_ = nullptr; - mfem::CGSolver *HzInv_ = nullptr; + mfem::CGSolver* HzInv_ = nullptr; // Boundary condition info Array tke_ess_attr_; @@ -398,8 +441,8 @@ class ZetaModel : public TurbModelBase { Array zeta_ess_tdof_; Array v2_ess_tdof_; Array fRate_ess_tdof_; - Array *ess_attr_ = nullptr; - Array *ess_tdof_ = nullptr; + Array* ess_attr_ = nullptr; + Array* ess_tdof_ = nullptr; std::vector> tke_dbcs_; std::vector> tdr_dbcs_; @@ -408,8 +451,8 @@ class ZetaModel : public TurbModelBase { std::vector> fRate_dbcs_; public: - ZetaModel(mfem::ParMesh *pmesh, LoMachOptions *loMach_opts, temporalSchemeCoefficients &time_coeff, TPS::Tps *tps, - ParGridFunction *gridScale); + ZetaModel(mfem::ParMesh* pmesh, LoMachOptions* loMach_opts, temporalSchemeCoefficients& time_coeff, TPS::Tps* tps, + ParGridFunction* gridScale); virtual ~ZetaModel(); // Functions overriden from base class @@ -418,13 +461,14 @@ class ZetaModel : public TurbModelBase { void updateBC(int current_step); void step() final; void setup() final; - void initializeIO(IODataOrganizer &io) final; - void initializeViz(ParaViewDataCollection &pvdc) final; + void initializeIO(IODataOrganizer& io) final; + void initializeViz(ParaViewDataCollection& pvdc) final; void tkeStep(); void tdrStep(); void zetaStep(); void v2Step(); void fStep(); + void fStepRobustified(); void convection(string scalar); void updateTimestepHistory(); void updateZeta(); @@ -439,27 +483,27 @@ class ZetaModel : public TurbModelBase { void computeTDRwall(); /// Return a pointer to the current temperature ParGridFunction. - ParGridFunction *getCurrentEddyViscosity() { return &eddyVisc_gf_; } + ParGridFunction* getCurrentEddyViscosity() { return &eddyVisc_gf_; } /// Add a Dirichlet boundary condition to the temperature and Qt field. - void AddTKEDirichletBC(const double &tke, Array &attr); - void AddTKEDirichletBC(Coefficient *coeff, Array &attr); - void AddTKEDirichletBC(ScalarFuncT *f, Array &attr); + void AddTKEDirichletBC(const double& tke, Array& attr); + void AddTKEDirichletBC(Coefficient* coeff, Array& attr); + void AddTKEDirichletBC(ScalarFuncT* f, Array& attr); - void AddV2DirichletBC(const double &tke, Array &attr); - void AddV2DirichletBC(Coefficient *coeff, Array &attr); - void AddV2DirichletBC(ScalarFuncT *f, Array &attr); + void AddV2DirichletBC(const double& tke, Array& attr); + void AddV2DirichletBC(Coefficient* coeff, Array& attr); + void AddV2DirichletBC(ScalarFuncT* f, Array& attr); - void AddTDRDirichletBC(const double &tdr, Array &attr); - void AddTDRDirichletBC(Coefficient *coeff, Array &attr); - void AddTDRDirichletBC(ScalarFuncT *f, Array &attr); + void AddTDRDirichletBC(const double& tdr, Array& attr); + void AddTDRDirichletBC(Coefficient* coeff, Array& attr); + void AddTDRDirichletBC(ScalarFuncT* f, Array& attr); - void AddZETADirichletBC(const double &zeta, Array &attr); - void AddZETADirichletBC(Coefficient *coeff, Array &attr); - void AddZETADirichletBC(ScalarFuncT *f, Array &attr); + void AddZETADirichletBC(const double& zeta, Array& attr); + void AddZETADirichletBC(Coefficient* coeff, Array& attr); + void AddZETADirichletBC(ScalarFuncT* f, Array& attr); - void AddFRATEDirichletBC(const double &fRate, Array &attr); - void AddFRATEDirichletBC(Coefficient *coeff, Array &attr); - void AddFRATEDirichletBC(ScalarFuncT *f, Array &attr); + void AddFRATEDirichletBC(const double& fRate, Array& attr); + void AddFRATEDirichletBC(Coefficient* coeff, Array& attr); + void AddFRATEDirichletBC(ScalarFuncT* f, Array& attr); }; #endif // ZETAMODEL_HPP_ diff --git a/test/inputs/lomach.pipe.zf.ini b/test/inputs/lomach.pipe.zf.ini index bb5c3ec7..6815f469 100644 --- a/test/inputs/lomach.pipe.zf.ini +++ b/test/inputs/lomach.pipe.zf.ini @@ -8,6 +8,7 @@ ref_levels = 0 order = 1 #order = 3 maxIters = 20200 +#maxIters = 20000 #outputFreq = 1000 outputFreq = 200 timingFreq = 10 @@ -23,12 +24,12 @@ turb-model = zeta-f tke-min = 1.0e-7 tdr-min = 1.0e-9 v2-min = 1.0e-7 -#tts-max = 1.0e2 -tts-max = 1.0e4 +#tts-max = 1.0e4 +tts-max = 1.0e2 tls-max = 1.0e2 #tls-max = 1.0e0 -#tls-min = 1.0e-4 -#tts-min = 1.0e-4 +tls-min = 1.0e-4 +tts-min = 1.0e-4 #mut-min = 1.0e-7 destruction = 1.0 zeta-f-file = inlet_turb_k_v2_2.csv @@ -58,6 +59,7 @@ streamwise-stabilization = false [io] outdirBase = output-pipe-zeta-f enableRestart = True +#enableRestart = False #restartMode = singleFileRead restartMode = variableP diff --git a/test/ref_solns/pipe.zeta-f/REF0_restart_output-pipe-zeta-f.sol.h5 b/test/ref_solns/pipe.zeta-f/REF0_restart_output-pipe-zeta-f.sol.h5 index 5c5b01e3..2ec6e562 100644 Binary files a/test/ref_solns/pipe.zeta-f/REF0_restart_output-pipe-zeta-f.sol.h5 and b/test/ref_solns/pipe.zeta-f/REF0_restart_output-pipe-zeta-f.sol.h5 differ diff --git a/test/ref_solns/pipe.zeta-f/REFSOL_restart_output-pipe-zeta-f.sol.h5 b/test/ref_solns/pipe.zeta-f/REFSOL_restart_output-pipe-zeta-f.sol.h5 index 8ca460f3..b6a1043b 100644 Binary files a/test/ref_solns/pipe.zeta-f/REFSOL_restart_output-pipe-zeta-f.sol.h5 and b/test/ref_solns/pipe.zeta-f/REFSOL_restart_output-pipe-zeta-f.sol.h5 differ