Commit 19722c71 authored by Francesco's avatar Francesco

Merge branch 'master' of gitlab.lrz.de:exahype/ExaHyPE-Engine

parents b568c5de 9225abd2
......@@ -97,13 +97,15 @@ void FOCCZ4::FOCCZ4Solver_ADERDG::boundaryValues(const double* const x,const dou
std::memset(stateOut, 0, nVar * sizeof(double));
std::memset(fluxOut , 0, nVar * sizeof(double));
//std::copy_n(stateIn,nVar,stateOut);
//std::copy_n(fluxIn,nVar,fluxOut);
for(int dd=0; dd<nDim; dd++) F[dd] = Fs[dd];
for(int i=0; i < basisSize; i++) { // i == time
const double weight = kernels::legendre::weights[order][i];
const double xi = kernels::legendre::nodes[order][i];
double ti = t + xi * dt;
// initialdata_(x, &ti, Qgp,&md,&cms,&order);
initialdata_(x_3, &ti, Qgp);
flux(Qgp, F);
......@@ -112,11 +114,102 @@ void FOCCZ4::FOCCZ4Solver_ADERDG::boundaryValues(const double* const x,const dou
fluxOut[m] += weight * Fs[direction][m];
}
}
}
exahype::solvers::Solver::RefinementControl FOCCZ4::FOCCZ4Solver_ADERDG::refinementCriterion(const double* const luh,const tarch::la::Vector<DIMENSIONS,double>& cellCentre,const tarch::la::Vector<DIMENSIONS,double>& cellSize,double t,const int level) {
// @todo Please implement/augment if required
return exahype::solvers::Solver::RefinementControl::Keep;
//return exahype::solvers::Solver::RefinementControl::Keep;
/*if(DIMENSIONS == 2){
if(std::abs(cellCentre[0]) < 10){
if(std::abs(cellCentre[1]) < 10){
return exahype::solvers::Solver::RefinementControl::Refine;
}
}
}else{
if(std::abs(cellCentre[0]) < 5){
if(std::abs(cellCentre[1]) < 5){
if(std::abs(cellCentre[2]) < 5){
return exahype::solvers::Solver::RefinementControl::Refine;
}
}
}
};
//return exahype::solvers::Solver::RefinementControl::Keep;
if ( level > getCoarsestMeshLevel() ) {
return exahype::solvers::Solver::RefinementControl::Erase;
}
return exahype::solvers::Solver::RefinementControl::Keep;*/
const int nVar = FOCCZ4::AbstractFOCCZ4Solver_ADERDG::NumberOfVariables;
const int order = FOCCZ4::AbstractFOCCZ4Solver_ADERDG::Order;
const int basisSize = order + 1;
int refine_flag;
double max_luh[nVar];
double min_luh[nVar];
//return exahype::solvers::Solver::RefinementControl::Keep;
//
for(int m = 0; m <nVar ; m++){
max_luh[m]=-1.e+14;
min_luh[m]=1.e+14;
}
#if DIMENSIONS==3
kernels::idx4 id_xyz_dof(basisSize,basisSize,basisSize,nVar);
#else
kernels::idx3 id_xy_dof(basisSize,basisSize,nVar);
#endif
for(int i = 0; i < basisSize; i++){
for(int j = 0; j <basisSize ; j++){
#if DIMENSIONS==3
for(int k = 0; k <basisSize ; k++){
#endif
#if DIMENSIONS==3
for(int m = 0; m <nVar ; m++){
if(luh[id_xyz_dof(i,j,k,m)]<min_luh[m]){
min_luh[m]=luh[id_xyz_dof(i,j,k,m)];
}
if(luh[id_xyz_dof(i,j,k,m)]>max_luh[m]){
max_luh[m]=luh[id_xyz_dof(i,j,k,m)];
}
}
#else
for(int m = 0; m <nVar ; m++){
if(luh[id_xy_dof(i,j,m)]<min_luh[m]){
min_luh[m]=luh[id_xy_dof(i,j,m)];
}
if(luh[id_xy_dof(i,j,m)]>max_luh[m]){
max_luh[m]=luh[id_xy_dof(i,j,m)];
}
}
#endif
#if DIMENSIONS==3
}
#endif
}
}
pderefinecriteria_(&refine_flag,&max_luh[0],&min_luh[0],&cellCentre[0]);
if(refine_flag>1){
return exahype::solvers::Solver::RefinementControl::Refine;
}else{
if(refine_flag>0){
return exahype::solvers::Solver::RefinementControl::Keep;
}else{
//return exahype::solvers::Solver::RefinementControl::Recoarse;
return exahype::solvers::Solver::RefinementControl::Keep;
};
}
}
//*****************************************************************************
......@@ -210,6 +303,11 @@ bool FOCCZ4::FOCCZ4Solver_ADERDG::isPhysicallyAdmissible(
return ret_value;
}
void FOCCZ4::FOCCZ4Solver_ADERDG::fusedSource(const double* const restrict Q, const double* const restrict gradQ, double* const restrict S){
//static tarch::multicore::BooleanSemaphore initializationSemaphoreDG;
//tarch::multicore::Lock lock(initializationSemaphoreDG);
pdefusedsrcncp_(S,Q,gradQ);
//fusedSource(Q, gradQ, S);
//lock.free();
}
This diff is collapsed.
......@@ -40,6 +40,40 @@
TYPE(tEquations) :: EQN
!Variables for NSTOV module
#ifdef SPHERICAL
INTEGER, PARAMETER :: NSTOV_nODE = 3
#else
INTEGER, PARAMETER :: NSTOV_nODE = 4
#endif
INTEGER, PARAMETER :: NSTOV_nODE_p = 3, NSTOV_ATMO = 0 ! 1 => Landau atmo
REAL(8), PARAMETER :: NSTOV_rho_c = 1.28e-3
REAL(8), PARAMETER :: NSTOV_kappa = 100
REAL(8), PARAMETER :: p_floor = 1.0e-16, rho_floor = 1.0e-10
REAL(8) :: NSTOV_rho_atmo != 1e-10
REAL(8), PARAMETER :: NSTOV_p_atmo = 1e-15 , NSTOV_t_atm=1.0
!
REAL(8) :: Mbh = 1.0, aom = 0.0
REAL(8), PARAMETER :: P_eps = 1e-4
integer, parameter :: MYRANK=0
!
TYPE tNSTOVVar
INTEGER :: Computed
REAL(8) :: Int
!INTEGER, PARAMETER :: nODE = 3
REAL(8) :: Mass, radius,r1,dr1,r2,dr2,rW,drW,rUni,C,p_R ,rho_R,lapse_C
INTEGER :: n_B,iradius,ir1,ir2,irW
REAL(8), DIMENSION (:,:), ALLOCATABLE :: q,dq
REAL(8), DIMENSION (:), ALLOCATABLE :: r,dr
REAL(8), DIMENSION (:), ALLOCATABLE :: qloc
END TYPE tNSTOVVar
TYPE(tNSTOVVar) :: NSTOVVar,NSTOVVar_bar,NSTOVVar_barNew
!
REAL(8), PARAMETER :: CoordTol =1e-11
! 3-point Gaussian quadrature
REAL, PARAMETER :: sGP3(3) = (/ 0.5-sqrt(15.)/10.,0.5,0.5+sqrt(15.)/10. /)
REAL, PARAMETER :: wGP3(3) = (/ 5./18., 8./18., 5./18. /)
......
This diff is collapsed.
......@@ -36,14 +36,16 @@ RECURSIVE SUBROUTINE PDEFlux(f,g,hz,Q)
END SUBROUTINE PDEFlux
RECURSIVE SUBROUTINE PDENCP(BgradQ,Q,gradQ)
RECURSIVE SUBROUTINE PDENCP(BgradQ,Q,gradQin)
USE MainVariables, ONLY : nVar, nDim, EQN,nParam,d
IMPLICIT NONE
! 11. Oct 21:40: This was a matrix BGradQ(nVar, nDim) but is a vector in spaceTimePredictorNonlinear
REAL, INTENT(OUT) :: BgradQ(nVar)
REAL, INTENT(IN) :: gradQ(nVar, 3)
REAL, INTENT(IN) :: gradQin(nVar, 3)
REAL, INTENT(IN) :: Q(nVar)
REAL :: gradQ(nVar, 3)
! Argument list
REAL :: par(nParam)
! Local variables
......@@ -90,6 +92,7 @@ RECURSIVE SUBROUTINE PDENCP(BgradQ,Q,gradQ)
#endif
!
BgradQ = 0.0
!return
!
#ifdef EULER
!
......@@ -265,12 +268,15 @@ BgradQ(7) = -6.0*EQN%c0**2*Q(2)/Q(1)*gradQ(8,1)
!
#if defined(CCZ4EINSTEIN) || defined(CCZ4GRMHD) || defined(CCZ4GRHD) || defined(CCZ4GRGPR)
!
Qx = gradQ(:,1)
Qy = gradQ(:,2)
Qx = gradQin(:,1)
Qy = gradQin(:,2)
IF(nDim.eq.2) THEN
Qz = 0.0
gradQ(:,1:2)=gradQin(:,1:2)
gradQ(:,3) =0.0
ELSE
Qz = gradQ(:,3)
Qz = gradQin(:,3)
gradQ=gradQin
ENDIF
k1 = EQN%CCZ4k1
......@@ -2301,13 +2307,14 @@ END SUBROUTINE PDEMatrixB
!END SUBROUTINE getExactSolution
SUBROUTINE PDEFusedSrcNCP(Src_BgradQ,Q,gradQ)
USE MainVariables, ONLY : nVar, nParam, d, EQN
RECURSIVE SUBROUTINE PDEFusedSrcNCP(Src_BgradQ,Q,gradQin)
USE MainVariables, ONLY : nVar, nParam, d, EQN, nDim
IMPLICIT NONE
! Argument list
REAL, INTENT(IN) :: Q(nVar), gradQ(nVar,d)
REAL, INTENT(IN) :: Q(nVar), gradQin(nVar,d)
REAL, INTENT(OUT) :: Src_BgradQ(nVar)
! Local variables
REAL :: gradQ(nVar,d)
REAL :: par(nParam), time=0.0
INTEGER :: i,j,k,l,m,n,ip,iq,ii,jj,kk,ll,mm,iErr,count
REAL :: p, irho, lam, mu
......@@ -2352,7 +2359,7 @@ SUBROUTINE PDEFusedSrcNCP(Src_BgradQ,Q,gradQ)
! Matter contributions
REAL :: sm(3), Sij(3,3), Sij_contr(3,3), sm_contr(3), S, tau, dens, bv_cov(3), sqrdet
REAL :: srctraceK, srcTheta
REAL :: SrcK(3,3), SrcGhat(3)
REAL :: SrcK(3,3), SrcGhat(3),mytmp1(3,3,3,3), mytmp2(3,3,3,3)
REAL, PARAMETER :: Pi = ACOS(-1.0)
!
......@@ -2360,9 +2367,16 @@ SUBROUTINE PDEFusedSrcNCP(Src_BgradQ,Q,gradQ)
!
#if defined(CCZ4EINSTEIN) || defined(CCZ4GRHD) || defined(CCZ4GRMHD) || defined(CCZ4GRGPR)
!
Qx = gradQ(:,1)
Qy = gradQ(:,2)
Qz = gradQ(:,3)
Qx = gradQin(:,1)
Qy = gradQin(:,2)
IF(nDim.eq.2) THEN
Qz = 0.0
gradQ(:,1:2)=gradQin(:,1:2)
gradQ(:,3) =0.0
ELSE
Qz = gradQin(:,3)
gradQ=gradQin
ENDIF
k1 = EQN%CCZ4k1
k2 = EQN%CCZ4k2
......@@ -2577,13 +2591,26 @@ SUBROUTINE PDEFusedSrcNCP(Src_BgradQ,Q,gradQ)
Christoffel_kind1(i,j,k) = DD(k,i,j)+DD(j,i,k)-DD(i,j,k) ! this definition seems to work !
DO l = 1, 3
Christoffel_tilde(i,j,k) = Christoffel_tilde(i,j,k) + g_contr(k,l)*( DD(i,j,l)+DD(j,i,l)-DD(l,i,j) )
Christoffel(i,j,k) = Christoffel(i,j,k) + g_contr(k,l)*( DD(i,j,l)+DD(j,i,l)-DD(l,i,j) ) -g_contr(k,l)*( g_cov(j,l)*PP(i)+g_cov(i,l)*PP(j)-g_cov(i,j)*PP(l) )
!mytmp1(i,j,k,l) = DD(i,j,l)+DD(j,i,l)-DD(l,i,j)
!Christoffel(i,j,k) = Christoffel(i,j,k) + g_contr(k,l)*( mytmp1(i,j,k,l) )
!mytmp2(i,j,k,l)=( g_cov(j,l)*PP(i)+g_cov(i,l)*PP(j)-g_cov(i,j)*PP(l) )
!Christoffel(i,j,k) = Christoffel(i,j,k) -g_contr(k,l)*mytmp2(i,j,k,l)
!Gtilde(i) = Gtilde(i)+2*g_contr(i,j)*g_contr(k,l)*DD(l,j,k)
Christoffel(i,j,k) = Christoffel(i,j,k) + g_contr(k,l)*(DD(i,j,l)+DD(j,i,l)-DD(l,i,j))-g_contr(k,l)*( g_cov(j,l)*PP(i)+g_cov(i,l)*PP(j)-g_cov(i,j)*PP(l) )
!PRINT *, Christoffel(i,j,k) ,I,J,K
ENDDO
ENDDO
ENDDO
ENDDO
!
!print *, 'g_contr',g_contr
!print *, 'g_cov',g_cov
!print *, 'DD',DD
!print *, 'PP',PP
!print *, 'mytmp1',mytmp1
!print *, 'mytmp2',mytmp2
!print *, 'Christoffel',Christoffel
!pause
DO l = 1, 3
DO j = 1, 3
DO i = 1, 3
......@@ -2737,6 +2764,23 @@ SUBROUTINE PDEFusedSrcNCP(Src_BgradQ,Q,gradQ)
!
dtTraceK = - nablanablaalphaNCP - nablanablaalphaSrc + alpha*( RPlusTwoNablaZNCP + RPlusTwoNablaZSrc + traceK**2 - 2*Theta*traceK ) - 3*alpha*k1*(1+k2)*Theta + SUM(beta(:)*dtraceK(:))
!
!print *, 'dtTraceK=', dtTraceK
!print *, 'nablanablaalphaNCP=', nablanablaalphaNCP
!print *, 'nablanablaalphaSrc=', nablanablaalphaSrc
!print *, 'RPlusTwoNablaZNCP=', RPlusTwoNablaZNCP
!print *, 'RPlusTwoNablaZSrc=', RPlusTwoNablaZSrc
!print *, 'traceK=', traceK
!print *, 'dtraceK=', dtraceK
!print *, 'Theta=', Theta
!print *, 'Christoffel',Christoffel
!print *, 'Christoffel',Christoffel
!print *, 'Gtilde',Gtilde
!print *, 'Christoffel_tilde',Christoffel_tilde
!print *, 'dChristoffelsrc',dChristoffelsrc
!print *, 'dChristoffel_tildesrc',dChristoffel_tildesrc
!print *, 'Z',Z
!pause
traceB = BB(1,1) + BB(2,2) + BB(3,3)
dtphi = beta(1)*PP(1) + beta(2)*PP(2) + beta(3)*PP(3) + 1./3.*alpha*traceK - 1./3.*traceB
dtalpha = -alpha*fa*(traceK-K0-c*2*Theta) + beta(1)*AA(1) + beta(2)*AA(2) + beta(3)*AA(3)
......@@ -3970,4 +4014,36 @@ SUBROUTINE PDEFusedSrcNCP(Src_BgradQ,Q,gradQ)
!
END SUBROUTINE PDEFusedSrcNCP
RECURSIVE SUBROUTINE pderefinecriteria(refine_flag, max_luh,min_luh,x)
USE MainVariables, ONLY: nVar , nDim
IMPLICIT NONE
Integer, intent(out) :: refine_flag
real, intent(in) :: max_luh(nVar),min_luh(nVar),x(nDim)
!if(abs(x(1))<10) then
! refine_flag=2
! return
!end if
!if(abs(x(2))<15) then
! refine_flag=2
! return
!end if
#ifdef CCZ4EINSTEIN
if(abs(max_luh(60)-min_luh(60))>1.e-4 .or. abs(max_luh(54)-min_luh(54))>1.e-3) then
refine_flag=2
else
refine_flag=0
end if
!if(nDim .eq. 3) then
!if(sqrt(x(1)**2+x(2)**2+x(3)**2)<15.0) then
! refine_flag=2
!end if
!end if
#endif
END SUBROUTINE pderefinecriteria
#endif
\ No newline at end of file
......@@ -24,6 +24,8 @@ void registerinitialdata_(const char* const id_name, int* id_name_len);
void pdeauxvar_(double* aux, const double* const Q,double* x, const double* const time);
void pdecritialstress_(double* CS, const double* const Q);
void pderefinecriteria_(int* refine_flag,const double* max_luh,const double* min_luh,const double* x);
//void hllemfluxfv_(double* FL, double* FR, const double* const QL, const double* const QR, const double* const QavL, const double* const QavR, const int* normalNonZeroIndex);
void hllemfluxfv_(double* FL, double* FR, const double* const QL, const double* const QR, const int* normalNonZeroIndex);
void hllemriemannsolver_(const int* basisSize, const int* normalNonZeroIndex, double* FL, double* FR, const double* const QL, const double* const QR, const double* const QavL, const double* const QavR);
......
This diff is collapsed.
RECURSIVE SUBROUTINE ElementCallTECPLOTPLOTTER(wh_in,lx0,ldx,limiter)
USE TECPLOTPLOTTERmod
USE MainVariables, only : nVar, nDim
implicit none
REAL, INTENT(IN) :: wh_in(nVar,nDOFm),lx0(nDim),ldx(nDim)
real :: wh(nVar,nDOFm)
real :: lx0_3(3),ldx_3(3)
integer :: limiter
wh=wh_in
lx0_3=0.
ldx_3=0.
lx0_3(1:nDim)=lx0
ldx_3(1:nDim)=ldx
CALL ElementTECPLOTPLOTTER(wh,lx0_3,ldx_3,limiter)
END SUBROUTINE ElementCallTECPLOTPLOTTER
RECURSIVE SUBROUTINE ElementCallTECPLOTFVPLOTTER(wh,lx0,ldx,limiter)
USE TECPLOTPLOTTERmod
USE MainVariables, only : nVar, nDim
implicit none
REAL, INTENT(IN) :: wh(nVar,(nSubLim+2*nSubLim_GL)**nDIM),lx0(nDim),ldx(nDim)
real :: lx0_3(3),ldx_3(3)
integer :: limiter,i,j,k,Stencil
lx0_3(1:nDim)=lx0
ldx_3(1:nDim)=ldx
CALL ElementTECPLOTPLOTTER_FV(wh,lx0_3,ldx_3,limiter)
END SUBROUTINE ElementCallTECPLOTFVPLOTTER
RECURSIVE SUBROUTINE InitializeTECPLOTPLOTTER(time)
USE TECPLOTPLOTTERmod
implicit none
real :: time
CALL InitTECPLOTPLOTTER(time)
END SUBROUTINE InitializeTECPLOTPLOTTER
RECURSIVE SUBROUTINE FinishTECPLOTPLOTTER(Myrank)
USE TECPLOTPLOTTERmod
implicit none
integer :: Myrank
CALL FinalizeTECPLOTPLOTTER(Myrank)
END SUBROUTINE FinishTECPLOTPLOTTER
#ifndef __EXAHYPE_USER_TECINT__
#define __EXAHYPE_USER_TECINT__
// Fortran functions:
extern "C" {
//void inittecplot_(const int* N_in, const int* M_in, const int* basisSize, const int* Ghostlayers);
void elementcalltecplotplotter_(const double *wh, const double* lx0, const double* ldx, const int* limiter);
void elementcalltecplotaderdgplotter_(const double *wh, const double* lx0, const double* ldx, const int* limiter);
void elementcalltecplotfvplotter_(const double *wh, const double* lx0, const double* ldx, const int* limiter);
void finishtecplotplotter_(const int* Myrank);
void initializetecplotplotter_(const double* time);
}/* extern "C" */
#endif /* __EXAHYPE_USER_PDE__ */
// This file was generated by the ExaHyPE toolkit.
// It will not be overwritten.
//
//
// ========================
// www.exahype.eu
// ========================
#include "TecplotWriter.h"
#include "TECPLOTinterface.h"
#include "tarch/parallel/Node.h"
#include "tarch/parallel/NodePool.h"
#include <stdio.h>
#include "FOCCZ4Solver_FV.h"
#include "FOCCZ4Solver_ADERDG.h"
#include "kernels/GaussLegendreBasis.h"
#include "kernels/KernelUtils.h"
#include "peano/utils/Loop.h"
#include "tarch/la/VectorOperations.h"
#include <algorithm>
#include <iomanip>
FOCCZ4::TecplotWriter::TecplotWriter() : exahype::plotters::LimitingADERDG2UserDefined::LimitingADERDG2UserDefined(){
// @TODO Please insert your code here.
}
void FOCCZ4::TecplotWriter::plotADERDGPatch(
const tarch::la::Vector<DIMENSIONS, double>& offsetOfPatch,
const tarch::la::Vector<DIMENSIONS, double>& sizeOfPatch, double* const u,
double timeStamp) {
// @TODO Please insert your code here.
plotForADERSolver = 0;
elementcalltecplotplotter_(u,&offsetOfPatch[0],&sizeOfPatch[0],&plotForADERSolver);
}
void FOCCZ4::TecplotWriter::plotFiniteVolumesPatch(
const tarch::la::Vector<DIMENSIONS, double>& offsetOfPatch,
const tarch::la::Vector<DIMENSIONS, double>& sizeOfPatch, double* const u,
double timeStamp) {
// @TODO Please insert your code here.
plotForADERSolver = 1;
elementcalltecplotfvplotter_(u, &offsetOfPatch[0], &sizeOfPatch[0], &plotForADERSolver);
}
void FOCCZ4::TecplotWriter::startPlotting( double time) {
// @TODO Please insert your code here.
mpirank = tarch::parallel::Node::getInstance().getRank();
initializetecplotplotter_(&time);
}
void FOCCZ4::TecplotWriter::finishPlotting() {
// @TODO Please insert your code here.
finishtecplotplotter_(&mpirank);
}
\ No newline at end of file
// This file was generated by the ExaHyPE toolkit.
// It will not be overwritten.
//
// ========================
// www.exahype.eu
// ========================
#ifndef TecplotWriter_CLASS_HEADER_
#define TecplotWriter_CLASS_HEADER_
#include "exahype/plotters/LimitingADERDG2UserDefined.h"
#include "exahype/plotters/ADERDG2UserDefined.h"
#include "exahype/plotters/ascii/MultipleReductionsWriter.h"
#include "exahype/solvers/LimitingADERDGSolver.h"
#include "FOCCZ4Solver_ADERDG_Variables.h"
#include "FOCCZ4Solver_ADERDG.h"
#include "FOCCZ4Solver_FV.h"
namespace FOCCZ4 {
class TecplotWriter;
}
class FOCCZ4::TecplotWriter : public exahype::plotters::LimitingADERDG2UserDefined {
private:
int plotForADERSolver;
int plotForFVSolver;
int mpirank;
public:
/**
* Constructor.
*
* \note ExaHyPE does not increment file counters for
* you if you use user defined plotting. You have
* to declare and manage such member variables yourself.
*/
TecplotWriter();
/**
* This method is invoked every time an ADER-DG cell
* is touched by the plotting plotter.
*
* \note Use the protected variables _order, _variables to
* determine the size of u.
* The array u has the size _variables * (_order+1)^DIMENSIONS.
*
* \param[in] offsetOfPatch the offset of the cell/patch.
* \param[in] sizeOfPatch the offset of the cell/patch.
* \param[in] u the degrees of freedom "living" inside of the patch.
*/
void plotADERDGPatch(
const tarch::la::Vector<DIMENSIONS, double>& offsetOfPatch,
const tarch::la::Vector<DIMENSIONS, double>& sizeOfPatch, double* const u,
double timeStamp) override;
/**
* This method is invoked every time a Finite Volume cell
* is touched by the plotting plotter.
*
* \note Use the protected variables _order, _variables to
* determine the size of u.
* The array u has the size _variables * (_order+1)^DIMENSIONS.
*
* \param[in] offsetOfPatch the offset of the cell/patch.
* \param[in] sizeOfPatch the offset of the cell/patch.
* \param[in] u the degrees of freedom "living" inside of the patch.
*/
void plotFiniteVolumesPatch(
const tarch::la::Vector<DIMENSIONS, double>& offsetOfPatch,
const tarch::la::Vector<DIMENSIONS, double>& sizeOfPatch, double* const u,
double timeStamp) override;
/**
* This method is called at the beginning of the plotting.
* You can use it to reset member variables, e.g., those
* used for calculations, or to increment file counters.
*
* \param[in] time a characteristic solver time stamp.
* Usually the global minimum.
*/
void startPlotting( double time) override;
/**
* This method is called at the end of the plotting.
* You can use it to reset member variables, finalise calculations (compute square roots etc.),
* or to increment file counters
*/
void finishPlotting() override;
};
#endif /* TecplotWriter_CLASS_HEADER_ */
\ No newline at end of file
! Tools.f90
RECURSIVE SUBROUTINE InitTECPLOT(N_in,M_in,SubLim_in,Ghostlayers_in)
USE TECPLOTPLOTTERmod
implicit none
INTEGER :: N_in,M_in,SubLim_in,Ghostlayers_in
CALL SetMainParameters(N_in,M_in,SubLim_in,Ghostlayers_in)
END SUBROUTINE InitTECPLOT
!RECURSIVE SUBROUTINE InitTECPLOT(N_in,SubLim_in,Ghostlayers_in)
! USE, INTRINSIC :: ISO_C_BINDING
! USE TECPLOTPLOTTERmod !, only : SetMainParameters
! implicit none
! INTEGER :: N_in,SubLim_in,Ghostlayers_in
! CALL SetMainParameters(N_in,SubLim_in,Ghostlayers_in)
!END SUBROUTINE InitTECPLOT
RECURSIVE SUBROUTINE getNumericalSolution(V,Q)
USE MainVariables, ONLY: nVar
IMPLICIT NONE
REAL :: V(nVar), Q(nVar)
INTEGER :: iErr
!
CALL PDECons2Prim(V,Q,iErr)
!
END SUBROUTINE getNumericalSolution
RECURSIVE SUBROUTINE getExactSolution(x,timeStamp,V)
USE MainVariables, ONLY: nAux,nVar,nDim
IMPLICIT NONE
REAL :: V(nVar), Q(nVar), x(nDim), timeStamp
INTEGER :: iErr
!
call InitialData(x, timeStamp, Q)
CALL PDECons2Prim(V,Q,iErr)
!
END SUBROUTINE getExactSolution
// Tools.h
// Fortran functions:
extern "C" {
//
void getnumericalsolution_(double* V,double* Q);
void getexactsolution_(double* x,double* timestep,double* V);
void inittecplot_(const int* N_in,const int* M_in, const int* basisSize, const int* Ghostlayers);
//void inittecplot_(const int* N_in,const int* M_in);
//
}/* extern "C" */
\ No newline at end of file
# MPI Logfilter.
# black or white list entry
# -1 means all ranks
# default entries
debug tarch -1 black
debug peano -1 black
info tarch -1 black
info tarch::logging::CommandLineLogger -1 white
info peano -1 black
info peano::utils::UserInterface -1 white
info peano::performanceanalysis -1 white
info exahype -1 white
# on first node
info mpibalancing -1 black
# too many messages
info peano::parallel::SendReceiveBufferAbstractImplementation::releaseSentMessages -1 black
info sharedmemoryoracles -1 black
info Z4Solver -1 black
info exahype::solvers::Plotter -1 black
info exahype::runner::Runner::runAsWorker -1 black
info exahype::mappings::LoadBalancing -1 white
info exahype::runners::Runner::runAsWorker -1 black
info exahype::runners::Runner::init -1 black
info exahype::runners::Runner::createRepository -1 white
info exahype::mappings::LoadBalancing::endIteration -1 black
......@@ -7,17 +7,17 @@
"output_directory": "./ApplicationExamples/FOCCZ4/FOCCZ4",
"log_file": "whatever.log"
},
"architecture": "skx",
"architecture": "noarch",
"computational_domain": {