Program Listing for File convertConsToPrim.cpp

Return to documentation for file (hydro/convertConsToPrim.cpp)

// ***********************************************************************************
// Idefix MHD astrophysical code
// Copyright(C) 2020-2022 Geoffroy R. J. Lesur <geoffroy.lesur@univ-grenoble-alpes.fr>
// and other code contributors
// Licensed under CeCILL 2.1 License, see COPYING for more information
// ***********************************************************************************

#include "hydro.hpp"
#include "dataBlock.hpp"

#if MHD == YES
#include "convertConsToPrimMHD.hpp"
#else
#include "convertConsToPrimHD.hpp"
#endif

// Convect Conservative to Primitive variable
void Hydro::ConvertConsToPrim() {
  idfx::pushRegion("Hydro::ConvertConsToPrim");

  IdefixArray4D<real> Vc = this->Vc;
  IdefixArray4D<real> Uc = this->Uc;
  real gamma_m1=this->gamma-ONE_F;

  #if MHD == YES
    #ifdef EVOLVE_VECTOR_POTENTIAL
      emf.ComputeMagFieldFromA(Ve,Vs);
    #endif
    boundary.ReconstructVcField(Uc);
  #endif

  idefix_for("ConsToPrim",
             0,data->np_tot[KDIR],
             0,data->np_tot[JDIR],
             0,data->np_tot[IDIR],
    KOKKOS_LAMBDA (int k, int j, int i) {
      real U[NVAR];
      real V[NVAR];

#pragma unroll
      for(int nv = 0 ; nv < NVAR; nv++) {
        U[nv] = Uc(nv,k,j,i);
      }

      K_ConsToPrim(V,U,gamma_m1);

#pragma unroll
      for(int nv = 0 ; nv<NVAR; nv++) {
        Vc(nv,k,j,i) = V[nv];
      }
  });

  idfx::popRegion();
}

// Convert Primitive to conservative variables
void Hydro::ConvertPrimToCons() {
  idfx::pushRegion("Hydro::ConvertPrimToCons");

  IdefixArray4D<real> Vc = this->Vc;
  IdefixArray4D<real> Uc = this->Uc;
  real gamma_m1=this->gamma-ONE_F;

  idefix_for("ConvertPrimToCons",
             0,data->np_tot[KDIR],
             0,data->np_tot[JDIR],
             0,data->np_tot[IDIR],
    KOKKOS_LAMBDA (int k, int j, int i) {
      real U[NVAR];
      real V[NVAR];

#pragma unroll
      for(int nv = 0 ; nv < NVAR; nv++) {
        V[nv] = Vc(nv,k,j,i);
      }

      K_PrimToCons(U,V,gamma_m1);

#pragma unroll
      for(int nv = 0 ; nv<NVAR; nv++) {
        Uc(nv,k,j,i) = U[nv];
      }
  });

  idfx::popRegion();
}