Program Listing for File construction.hpp#

Return to documentation for file (construction.hpp)

#include <cmath>
#include <iostream>
#include <iomanip>
#include "define.hpp"

class CSSWM {
public:
    class patch {
    public:
        // constructer
        patch();

        double hp[NX][NY], h[NX][NY], hm[NX][NY];
        double up[NX][NY], u[NX][NY], um[NX][NY];
        double vp[NX][NY], v[NX][NY], vm[NX][NY];

        #ifdef Mountain
            double hs[NX][NY];
        #endif

        double lon[NX][NY], lat[NX][NY];
        double lon_original[NX][NY];

        double x[NX][NY], y[NX][NY];

        double A[NX][NY][4], IA[NX][NY][4];

        #if defined(SecondOrderSpace)
            double IP1_L[NX][4], IP1_R[NX][4], IP1_U[NX][4], IP1_D[NX][4];
        #elif defined(FourthOrderSpace)
            double IP_ouTTer_L[NX][4], IP_ouTTer_R[NX][4], IP_ouTTer_U[NX][4], IP_ouTTer_D[NX][4];
            double IP_ouTer_L[NX][4], IP_ouTer_R[NX][4], IP_ouTer_U[NX][4], IP_ouTer_D[NX][4];
        #endif
    };

    CSSWM();
    patch csswm[6];
    double sqrtG[NX][NY], gamma[NX][NY], gLower[NX][NY][4], gUpper[NX][NY][4];
    double alpha2D[NX][NY], beta2D[NX][NY];

    #if defined(SecondOrderSpace)
        int match[24][8];
        int checkIP[NX][2];
    #elif defined(FourthOrderSpace)
        int match_ouTTer[24][8];
        int match_ouTer[24][8];
        int checkIP_ouTTer[NX][2];
        int checkIP_ouTer[NX][2];
    #endif

    // ***********************************************************************************
    // In construction.cpp
    void get_gUpper(double ans[4], double alpha, double beta);
    void get_gLower(double ans[4], double alpha, double beta);
    void get_A(double ans[4], int p, double alpha, double beta);
    void get_IA(double ans[4], int p, double alpha, double beta);
    // ***********************************************************************************

    // ***********************************************************************************
    // In transform.cpp
    double Cube2Sphere_U(CSSWM &, int, int, int);
    double Cube2Sphere_V(CSSWM &, int, int, int);
    double Sphere2Cube_U(CSSWM &, int, int, int);
    double Sphere2Cube_V(CSSWM &, int, int, int);
    double Cube2Cube_U(CSSWM &model, int p1, int p2, int i1, int j1, int i2, int j2);
    double Cube2Cube_V(CSSWM &model, int p1, int p2, int i1, int j1, int i2, int j2);
    double Cube2Cube_BV2AU(CSSWM &model, int p1, int p2, int i1, int j1, int i2, int j2);
    double Cube2Cube_BU2AV(CSSWM &model, int p1, int p2, int i1, int j1, int i2, int j2);
    double Cube2Cube_U_2(double gLower[4], double IA[4], double A[4], double gUpper[4], double u, double v);
    double Cube2Cube_V_2(double gLower[4], double IA[4], double A[4], double gUpper[4], double u, double v);
    void matrixMul(double firstMatrix[4], double secondMatrix[4], double mult[2][2]);
    void Cube2Cube_matrix();
    // ***********************************************************************************

    // ***********************************************************************************
    // In bp_h.cpp
    void BP_h(CSSWM &);
    #if defined(Mountain)
        void BP_hs(CSSWM &);
    #endif
    double interpolate(double A1, double A2, double V1, double V2, double B);
    // ***********************************************************************************

    // ***********************************************************************************
    // In bp_wind.cpp
    void BP_wind_convert(CSSWM &);
    void BP_wind_interpolation(CSSWM &);
    void BP_wind_interpolation2(CSSWM &);
    // ***********************************************************************************



private:
    void Construct_gamma_sqrtG_GUpper(double alpha2D[NX][NY], double beta2D[NX][NY], double gamma[NX][NY], double sqrtG[NX][NY], double gUpper[NX][NY][4], double gLower[NX][NY][4]);
    void Construct_p0123_lonlat_xy_AIA(int p, double alpha2D[NX][NY], double beta2D[NX][NY], double gamma[NX][NY], double lon[NX][NY], double lat[NX][NY], double x[NX][NY], double y[NX][NY], double A[NX][NY][4], double IA[NX][NY][4]);
    void Construct_p4_lonlat_xy_AIA(int p, double alpha2D[NX][NY], double beta2D[NX][NY], double gamma[NX][NY], double lon[NX][NY], double lat[NX][NY], double x[NX][NY], double y[NX][NY], double A[NX][NY][4], double IA[NX][NY][4]);
    void Construct_p5_lonlat_xy_AIA(int p, double alpha2D[NX][NY], double beta2D[NX][NY], double gamma[NX][NY], double lon[NX][NY], double lat[NX][NY], double x[NX][NY], double y[NX][NY], double A[NX][NY][4], double IA[NX][NY][4]);
};