void PREBINDER(double *FBHZ, int *IXXX, double *FH, double *XN, double *YN, double *ZN, double *XH, double *YH, int *IIII, int *IIIIH, int L0, int L0H, int NE, int NEH, int NK, int NCHE) {
    double XXH[4], YYH[4], IXH[4], XX[4], YY[4], ZZ[4], IX[4];
    int I00=0, IXYD=0;
    double F00=0.0, XA, YA, EPS=1.0e-6, XMAX, XMIN, YMAX, YMIN, DX21, DY21, DZ21, DX31, DY31, DZ31, DX41, DY41, DZ41, XD1, XD2, XD3, AREAE1, AREAE2, AREAE, ANN, BHF3, BHF4;
    for(int I0=0; I0<NEH; I0++) {
        for(int JJ=0; JJ<NK; JJ++) {
            IXH[JJ] = IIIIH[I0*NK+JJ];
            XXH[JJ] = XH[IXH[JJ]];
            YYH[JJ] = YH[IXH[JJ]];
        }
        if(IXH[2]==IXH[3] || IXH[3]==0) {
            XA = (XXH[0]+XXH[1]+XXH[2])/3.0;
            YA = (YYH[0]+YYH[1]+YYH[2])/3.0;
        } else {
            XA = (XXH[0]+XXH[1]+XXH[2]+XXH[3])/4.0;
            YA = (YYH[0]+YYH[1]+YYH[2]+YYH[3])/4.0;
        }
        for(int II=0; II<NE; II++) {
            for(int JJ=0; JJ<NK; JJ++) {
                IX[JJ] = IIII[II*NK+JJ];
                XX[JJ] = XN[IX[JJ]];
                YY[JJ] = YN[IX[JJ]];
                ZZ[JJ] = ZN[IX[JJ]];
            }
        }
        IXYD=0;
        XMAX=XX[0];
        XMIN=XX[0];
        YMAX=YY[0];
        YMIN=YY[0];
        for(int I=1; I<NK; I++) {
            if(XMAX<XX[I]) XMAX=XX[I];
            if(YMAX<YY[I]) YMAX=YY[I];
            if(XMIN>XX[I]) XMIN=XX[I];
            if(YMIN>YY[I]) YMIN=YY[I];
        }
        if(XA<XMAX+EPS && XA>XMIN-EPS) {
            if(YA<YMAX+EPS && YA>YMIN-EPS) {
                IXYD=1;
            }
        }
        if(IXYD==1) PREXYB(&IXYD, XX, YY, &XA, &YA, NK);
        if(IXYD==1 || IXYD==2) goto label_600;
    label_200:
        I00++;
        F00+=FH[I0];
    }
    label_600:
    if(IXYD==1 || IXYD==2) {
        DX21=XX[1]-XX[0];
        DY21=YY[1]-YY[0];
        DZ21=ZZ[1]-ZZ[0];
        DX31=XX[2]-XX[0];
        DY31=YY[2]-YY[0];
        DZ31=ZZ[2]-ZZ[0];
        DX41=XX[3]-XX[0];
        DY41=YY[3]-YY[0];
        DZ41=ZZ[3]-ZZ[0];
        XD1=DY21*DZ31-DY31*DZ21;
        XD2=DZ21*DX31-DZ31*DX21;
        XD3=DX21*DY31-DX31*DY31;
        AREAE1=0.5*sqrt(XD1*XD1+XD2*XD2+XD3*XD3+1.0e-80);
        XD1=DY41*DZ31-DY31*DZ41;
        XD2=DZ41*DX31-DZ31*DX41;
        XD3=DX41*DY31-DX31*DY41;
        AREAE2=0.5*sqrt(XD1*XD1+XD2*XD2+XD3*XD3+1.0e-80);
        AREAE=AREAE1+AREAE2;
        if(IX[2]==IX[3] || IX[3]==0) {
            ANN=3.0;
            BHF3=FH[I0]/ANN;
            for(int I=0; I<3; I++) {
                FBHZ[IX[I]]+=BHF3;
                IXXX[IX[I]]=3;
            }
        } else {
            ANN=4.0;
            BHF4=FH[I0]/ANN;
            for(int I=0; I<NK; I++) {
                FBHZ[IX[I]]+=BHF4;
                IXXX[IX[I]]=3;
            }
        }
    }
}
C语言翻译:PREBINDER 子程序实现

原文地址: https://www.cveoy.top/t/topic/oFGH 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录