Program Listing for File IPhysics1d.hpp

Return to documentation for file (src/include/IPhysics1d.hpp)

#ifndef SRC_INCLUDE_IPHYSICS1D_HPP
#define SRC_INCLUDE_IPHYSICS1D_HPP

namespace Nextsim {

class PrognosticData;
class ExternalData;
class PhysicsData;

class IPhysics1d {
public:
    virtual ~IPhysics1d() = default;

    virtual void updateDerivedData(
        const PrognosticData& prog, const ExternalData& exter, PhysicsData& phys)
    {
        updateSpecificHumidityAir(exter, phys);
        updateSpecificHumidityWater(prog, exter, phys);
        updateSpecificHumidityIce(prog, exter, phys);

        updateAirDensity(exter, phys);
        updateHeatCapacityWetAir(exter, phys);
    };

    // PhysicsData argument.
    virtual void calculate(const PrognosticData&, const ExternalData&, PhysicsData&) = 0;

protected:
    virtual void updateSpecificHumidityAir(const ExternalData& exter, PhysicsData& phys) = 0;
    virtual void updateSpecificHumidityWater(
        const PrognosticData& prog, const ExternalData& exter, PhysicsData& phys)
        = 0;
    virtual void updateSpecificHumidityIce(
        const PrognosticData& prog, const ExternalData& exter, PhysicsData& phys)
        = 0;
    virtual void updateAirDensity(const ExternalData& exter, PhysicsData& phys) = 0;
    virtual void updateHeatCapacityWetAir(const ExternalData& exter, PhysicsData& phys) = 0;
};
}
#endif /* SRC_INCLUDE_IPHYSICS1D_HPP */