escript  Revision_
FluxLimiter.h
Go to the documentation of this file.
00001 
00002 /*****************************************************************************
00003 *
00004 * Copyright (c) 2003-2014 by University of Queensland
00005 * http://www.uq.edu.au
00006 *
00007 * Primary Business: Queensland, Australia
00008 * Licensed under the Open Software License version 3.0
00009 * http://www.opensource.org/licenses/osl-3.0.php
00010 *
00011 * Development until 2012 by Earth Systems Science Computational Center (ESSCC)
00012 * Development 2012-2013 by School of Earth Sciences
00013 * Development from 2014 by Centre for Geoscience Computing (GeoComp)
00014 *
00015 *****************************************************************************/
00016 
00017 #ifndef __PASO_FLUXLIMITER_H__
00018 #define __PASO_FLUXLIMITER_H__
00019 
00020 #include "Transport.h"
00021 
00022 namespace paso {
00023 
00024 PASO_DLL_API
00025 struct FCT_FluxLimiter
00026 {
00027     FCT_FluxLimiter(const_TransportProblem_ptr tp);
00028     ~FCT_FluxLimiter();
00029 
00030     inline dim_t getTotalNumRows() const
00031     {
00032         return antidiffusive_fluxes->getTotalNumRows();
00033     }
00034 
00035     inline SystemMatrixPattern_ptr getFluxPattern() const
00036     {
00037         return antidiffusive_fluxes->pattern;
00038     }
00039 
00040     void setU_tilde(const double* Mu_tilde);
00041     void addLimitedFluxes_Start();
00042     void addLimitedFluxes_Complete(double* b);
00043 
00044     SystemMatrix_ptr antidiffusive_fluxes;
00045     Esys_MPIInfo* mpi_info;
00046     double dt;
00047     double* u_tilde;
00048     double* MQ;  // (M_C* Q_min, M_C* Q_max)
00049     double* R;   // (R-, R+)
00050     //Coupler_ptr MQ_coupler;
00051     Coupler_ptr R_coupler;
00052     Coupler_ptr u_tilde_coupler;
00053     double* borrowed_lumped_mass_matrix; // borrowed reference
00054 };
00055 
00056 } // namespace paso
00057 
00058 #endif // __PASO_FLUXLIMITER_H__
00059