Пример #1
0
 def forward_thomas(inf, diag, sup, rhs, out):
     with gt.region(iteration=gt.FORWARD, k_interval=(0, 1)):
         sup = sup / diag
         rhs = rhs / diag
     with gt.region(iteration=gt.FORWARD, k_interval=(1, None)):
         sup = sup / (diag - sup[0, 0, -1] * inf)
         rhs = (rhs - inf * rhs[0, 0, -1]) / (diag - sup[0, 0, -1] * inf)
Пример #2
0
    def set_stage_id(out):
        with gt.region(iteration=gt.PARALLEL, k_interval=(0, 1)):
            out = 1

        with gt.region(iteration=gt.PARALLEL, k_interval=(1, -1)):
            out = 2

        with gt.region(iteration=gt.PARALLEL, k_interval=(-1, None)):
            out = 3
Пример #3
0
    def u_backward_function(utens_stage, u_pos, dtr_stage, ccol, dcol, data_col):
        with gt.region(iteration=gt.BACKWARD, k_interval=(0, -1)):
            datacol = dcol[0, 0, 0] - ccol[0, 0, 0] * data_col[0, 0, 1]
            data_col = datacol
            utens_stage = dtr_stage[0, 0, 0] * (datacol - u_pos[0, 0, 0])

        with gt.region(iteration=gt.BACKWARD, k_interval=(-1, None)):
            datacol = dcol[0, 0, 0]
            data_col = datacol
            utens_stage = dtr_stage[0, 0, 0] * (datacol - u_pos[0, 0, 0])
Пример #4
0
    def u_forward_function(utens_stage, wcon, u_stage, u_pos, utens, dtr_stage,
                           acol, bcol, ccol, dcol):
        with gt.region(iteration=gt.FORWARD, k_interval=(0, 1)):
            gcv = 0.25 * (wcon[1, 0, 1] + wcon[0, 0, 1])
            cs = gcv * BET_M

            ccol = gcv * BET_P
            bcol = dtr_stage[0, 0, 0] - ccol[0, 0, 0]

            # update the d column
            correction_term = -cs * (u_stage[0, 0, 1] - u_stage[0, 0, 0])
            dcol = (dtr_stage[0, 0, 0] * u_pos[0, 0, 0] + utens[0, 0, 0] +
                    utens_stage[0, 0, 0] + correction_term)

            # Thomas forward
            divided = 1.0 / bcol[0, 0, 0]
            ccol = ccol[0, 0, 0] * divided
            dcol = dcol[0, 0, 0] * divided

        with gt.region(iteration=gt.FORWARD, k_interval=(1, -1)):
            gav = -0.25 * (wcon[1, 0, 0] + wcon[0, 0, 0])
            gcv = 0.25 * (wcon[1, 0, 1] + wcon[0, 0, 1])

            as_ = gav * BET_M
            cs = gcv * BET_M

            acol = gav * BET_P
            ccol = gcv * BET_P
            bcol = dtr_stage[0, 0, 0] - acol[0, 0, 0] - ccol[0, 0, 0]

            # update the d column
            correction_term = -as_ * (u_stage[0, 0, -1] - u_stage[
                0, 0, 0]) - cs * (u_stage[0, 0, 1] - u_stage[0, 0, 0])
            dcol = (dtr_stage[0, 0, 0] * u_pos[0, 0, 0] + utens[0, 0, 0] +
                    utens_stage[0, 0, 0] + correction_term)

            # Thomas forward
            divided = 1.0 / (bcol[0, 0, 0] - ccol[0, 0, -1] * acol[0, 0, 0])
            ccol = ccol[0, 0, 0] * divided
            dcol = (dcol[0, 0, 0] - (dcol[0, 0, -1]) * acol[0, 0, 0]) * divided

        with gt.region(iteration=gt.FORWARD, k_interval=(-1, None)):
            gav = -0.25 * (wcon[1, 0, 0] + wcon[0, 0, 0])
            as_ = gav * BET_M
            acol = gav * BET_P
            bcol = dtr_stage[0, 0, 0] - acol[0, 0, 0]

            # update the d column
            correction_term = -as_ * (u_stage[0, 0, -1] - u_stage[0, 0, 0])
            dcol = (dtr_stage[0, 0, 0] * u_pos[0, 0, 0] + utens[0, 0, 0] +
                    utens_stage[0, 0, 0] + correction_term)

            # Thomas forward
            divided = 1.0 / (bcol[0, 0, 0] - ccol[0, 0, -1] * acol[0, 0, 0])
            dcol = (dcol[0, 0, 0] - (dcol[0, 0, -1]) * acol[0, 0, 0]) * divided
Пример #5
0
 def definition_func(inf, diag, sup, rhs, out):
     with gt.region(iteration=gt.FORWARD, k_interval=(0, 1)):
         sup = sup / diag
         rhs = rhs / diag
     with gt.region(iteration=gt.FORWARD, k_interval=(1, None)):
         sup = sup / (diag - sup[0, 0, -1] * inf)
         rhs = (rhs - inf * rhs[0, 0, -1]) / (diag - sup[0, 0, -1] * inf)
     with gt.region(iteration=gt.BACKWARD, k_interval=(0, -1)):
         out = rhs - sup * out[0, 0, 1]
     with gt.region(iteration=gt.BACKWARD, k_interval=(-1, None)):
         out = rhs
Пример #6
0
    def definition_func(utens_stage, u_stage, wcon, u_pos, utens, *,
                        dtr_stage):
        with gt.region(iteration=gt.FORWARD, k_interval=(0, 1)):
            gcv = 0.25 * (wcon[1, 0, 1] + wcon[0, 0, 1])
            cs = gcv * BET_M

            ccol = gcv * BET_P
            bcol = dtr_stage - ccol[0, 0, 0]

            # update the d column
            correction_term = -cs * (u_stage[0, 0, 1] - u_stage[0, 0, 0])
            dcol = (dtr_stage * u_pos[0, 0, 0] + utens[0, 0, 0] +
                    utens_stage[0, 0, 0] + correction_term)

            # Thomas forward
            divided = 1.0 / bcol[0, 0, 0]
            ccol = ccol[0, 0, 0] * divided
            dcol = dcol[0, 0, 0] * divided

        with gt.region(iteration=gt.FORWARD, k_interval=(1, -1)):
            gav = -0.25 * (wcon[1, 0, 0] + wcon[0, 0, 0])
            gcv = 0.25 * (wcon[1, 0, 1] + wcon[0, 0, 1])

            as_ = gav * BET_M
            cs = gcv * BET_M

            acol = gav * BET_P
            ccol = gcv * BET_P
            bcol = dtr_stage - acol[0, 0, 0] - ccol[0, 0, 0]

            # update the d column
            correction_term = -as_ * (u_stage[0, 0, -1] - u_stage[
                0, 0, 0]) - cs * (u_stage[0, 0, 1] - u_stage[0, 0, 0])
            dcol = (dtr_stage * u_pos[0, 0, 0] + utens[0, 0, 0] +
                    utens_stage[0, 0, 0] + correction_term)

            # Thomas forward
            divided = 1.0 / (bcol[0, 0, 0] - ccol[0, 0, -1] * acol[0, 0, 0])
            ccol = ccol[0, 0, 0] * divided
            dcol = (dcol[0, 0, 0] - (dcol[0, 0, -1]) * acol[0, 0, 0]) * divided

        with gt.region(iteration=gt.FORWARD, k_interval=(-1, None)):
            gav = -0.25 * (wcon[1, 0, 0] + wcon[0, 0, 0])
            as_ = gav * BET_M
            acol = gav * BET_P
            bcol = dtr_stage - acol[0, 0, 0]

            # update the d column
            correction_term = -as_ * (u_stage[0, 0, -1] - u_stage[0, 0, 0])
            dcol = (dtr_stage * u_pos[0, 0, 0] + utens[0, 0, 0] +
                    utens_stage[0, 0, 0] + correction_term)

            # Thomas forward
            divided = 1.0 / (bcol[0, 0, 0] - ccol[0, 0, -1] * acol[0, 0, 0])
            dcol = (dcol[0, 0, 0] - (dcol[0, 0, -1]) * acol[0, 0, 0]) * divided
        # with gt.region(iteration=gt.BACKWARD, k_interval=(0, -1)):
        #     datacol = dcol[0, 0, 0] - ccol[0, 0, 0] * data_col[0, 0, 1]
        #     data_col = datacol
        #     utens_stage = dtr_stage * (datacol) - u_pos[0, 0, 0]

        with gt.region(iteration=gt.BACKWARD, k_interval=(-1, None)):
            datacol = dcol[0, 0, 0]
            data_col = datacol
            utens_stage = dtr_stage * (datacol - u_pos[0, 0, 0])
        with gt.region(iteration=gt.BACKWARD, k_interval=(0, -1)):
            datacol = dcol[0, 0, 0] - ccol[0, 0, 0] * data_col[0, 0, 1]
            data_col = datacol
            utens_stage = dtr_stage * (datacol - u_pos[0, 0, 0])
Пример #7
0
 def backward_thomas(inf, diag, sup, rhs, out):
     with gt.region(iteration=gt.BACKWARD, k_interval=(0, -1)):
         out = rhs - sup * out[0, 0, 1]
     with gt.region(iteration=gt.BACKWARD, k_interval=(-1, None)):
         out = rhs