Implemented Function pointer for SOR, RB and RBA variants
This commit is contained in:
		
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -20,7 +20,7 @@ enum VARIANT { SOR = 1, RB, RBA };
 | 
			
		||||
int main (int argc, char** argv)
 | 
			
		||||
{
 | 
			
		||||
    int rank;
 | 
			
		||||
    int variant = SOR;
 | 
			
		||||
    int variant = RB;
 | 
			
		||||
 | 
			
		||||
    double S, E;
 | 
			
		||||
    Parameter params;
 | 
			
		||||
@@ -49,76 +49,29 @@ int main (int argc, char** argv)
 | 
			
		||||
    double t   = 0.0;
 | 
			
		||||
    int nt     = 0;
 | 
			
		||||
 | 
			
		||||
    void (*solver_generic[])(solver) = {solve, solveRB, solveRBA};
 | 
			
		||||
 | 
			
		||||
    S = getTimeStamp();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    switch (variant) {
 | 
			
		||||
    case SOR:
 | 
			
		||||
        printf("Plain SOR\n");
 | 
			
		||||
        while (t <= te) 
 | 
			
		||||
        {
 | 
			
		||||
            if (tau > 0.0) computeTimestep(&solver);
 | 
			
		||||
            setBoundaryConditions(&solver);
 | 
			
		||||
            setSpecialBoundaryCondition(&solver);
 | 
			
		||||
            computeFG(&solver);
 | 
			
		||||
            computeRHS(&solver);
 | 
			
		||||
            if (nt % 100 == 0) normalizePressure(&solver);
 | 
			
		||||
            solve(&solver);
 | 
			
		||||
            adaptUV(&solver);
 | 
			
		||||
            t += solver.dt;
 | 
			
		||||
            nt++;
 | 
			
		||||
 | 
			
		||||
        #ifdef VERBOSE
 | 
			
		||||
                printf("TIME %f , TIMESTEP %f\n", t, solver.dt);
 | 
			
		||||
        #else
 | 
			
		||||
                printProgress(t);
 | 
			
		||||
        #endif
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
    case RB:
 | 
			
		||||
        printf("Red-black SOR\n");
 | 
			
		||||
        while (t <= te) 
 | 
			
		||||
        {
 | 
			
		||||
            if (tau > 0.0) computeTimestep(&solver);
 | 
			
		||||
            setBoundaryConditions(&solver);
 | 
			
		||||
            setSpecialBoundaryCondition(&solver);
 | 
			
		||||
            computeFG(&solver);
 | 
			
		||||
            computeRHS(&solver);
 | 
			
		||||
            if (nt % 100 == 0) normalizePressure(&solver);
 | 
			
		||||
            solveRB(&solver);
 | 
			
		||||
            adaptUV(&solver);
 | 
			
		||||
            t += solver.dt;
 | 
			
		||||
            nt++;
 | 
			
		||||
 | 
			
		||||
        #ifdef VERBOSE
 | 
			
		||||
                printf("TIME %f , TIMESTEP %f\n", t, solver.dt);
 | 
			
		||||
        #else
 | 
			
		||||
                printProgress(t);
 | 
			
		||||
        #endif
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
    case RBA:
 | 
			
		||||
        printf("Red-black SOR with acceleration\n");
 | 
			
		||||
        while (t <= te) 
 | 
			
		||||
        {
 | 
			
		||||
            if (tau > 0.0) computeTimestep(&solver);
 | 
			
		||||
            setBoundaryConditions(&solver);
 | 
			
		||||
            setSpecialBoundaryCondition(&solver);
 | 
			
		||||
            computeFG(&solver);
 | 
			
		||||
            computeRHS(&solver);
 | 
			
		||||
            if (nt % 100 == 0) normalizePressure(&solver);
 | 
			
		||||
            solveRBA(&solver);
 | 
			
		||||
            adaptUV(&solver);
 | 
			
		||||
            t += solver.dt;
 | 
			
		||||
            nt++;
 | 
			
		||||
 | 
			
		||||
        #ifdef VERBOSE
 | 
			
		||||
                printf("TIME %f , TIMESTEP %f\n", t, solver.dt);
 | 
			
		||||
        #else
 | 
			
		||||
                printProgress(t);
 | 
			
		||||
        #endif
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
    while (t <= te) 
 | 
			
		||||
    {
 | 
			
		||||
        if (tau > 0.0) computeTimestep(&solver);
 | 
			
		||||
        setBoundaryConditions(&solver);
 | 
			
		||||
        setSpecialBoundaryCondition(&solver);
 | 
			
		||||
        computeFG(&solver);
 | 
			
		||||
        computeRHS(&solver);
 | 
			
		||||
        if (nt % 100 == 0) normalizePressure(&solver);
 | 
			
		||||
        (*solver_generic[variant - 1])(&solver);
 | 
			
		||||
        adaptUV(&solver);
 | 
			
		||||
        t += solver.dt;
 | 
			
		||||
        nt++;
 | 
			
		||||
    
 | 
			
		||||
    #ifdef VERBOSE
 | 
			
		||||
            printf("TIME %f , TIMESTEP %f\n", t, solver.dt);
 | 
			
		||||
    #else
 | 
			
		||||
            printProgress(t);
 | 
			
		||||
    #endif
 | 
			
		||||
    
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    E = getTimeStamp();
 | 
			
		||||
 
 | 
			
		||||
@@ -24,7 +24,7 @@
 | 
			
		||||
0.59 0.01 -0.008094 -0.000200 0.008096
 | 
			
		||||
0.61 0.01 -0.007642 -0.000251 0.007647
 | 
			
		||||
0.64 0.01 -0.007095 -0.000297 0.007101
 | 
			
		||||
0.66 0.01 -0.006463 -0.000335 0.006471
 | 
			
		||||
0.66 0.01 -0.006463 -0.000335 0.006472
 | 
			
		||||
0.69 0.01 -0.005762 -0.000365 0.005774
 | 
			
		||||
0.71 0.01 -0.005011 -0.000386 0.005026
 | 
			
		||||
0.74 0.01 -0.004229 -0.000396 0.004248
 | 
			
		||||
@@ -76,7 +76,7 @@
 | 
			
		||||
0.89 0.04 -0.001666 -0.000909 0.001898
 | 
			
		||||
0.91 0.04 -0.000758 -0.000580 0.000954
 | 
			
		||||
0.94 0.04 -0.000202 -0.000248 0.000320
 | 
			
		||||
0.96 0.04 0.000029 0.000027 0.000039
 | 
			
		||||
0.96 0.04 0.000029 0.000026 0.000039
 | 
			
		||||
0.99 0.04 0.000035 0.000132 0.000136
 | 
			
		||||
0.01 0.06 -0.000034 -0.000123 0.000127
 | 
			
		||||
0.04 0.06 -0.000273 0.000256 0.000374
 | 
			
		||||
@@ -268,7 +268,7 @@
 | 
			
		||||
0.69 0.16 -0.061532 -0.022524 0.065525
 | 
			
		||||
0.71 0.16 -0.055295 -0.023898 0.060238
 | 
			
		||||
0.74 0.16 -0.048728 -0.024670 0.054617
 | 
			
		||||
0.76 0.16 -0.041987 -0.024793 0.048760
 | 
			
		||||
0.76 0.16 -0.041986 -0.024793 0.048760
 | 
			
		||||
0.79 0.16 -0.035235 -0.024238 0.042766
 | 
			
		||||
0.81 0.16 -0.028644 -0.022992 0.036731
 | 
			
		||||
0.84 0.16 -0.022386 -0.021072 0.030744
 | 
			
		||||
@@ -294,7 +294,7 @@
 | 
			
		||||
0.34 0.19 -0.075708 0.026077 0.080073
 | 
			
		||||
0.36 0.19 -0.081370 0.023110 0.084588
 | 
			
		||||
0.39 0.19 -0.086279 0.019648 0.088488
 | 
			
		||||
0.41 0.19 -0.090340 0.015772 0.091707
 | 
			
		||||
0.41 0.19 -0.090340 0.015773 0.091707
 | 
			
		||||
0.44 0.19 -0.093475 0.011565 0.094187
 | 
			
		||||
0.46 0.19 -0.095621 0.007112 0.095885
 | 
			
		||||
0.49 0.19 -0.096736 0.002500 0.096768
 | 
			
		||||
@@ -389,7 +389,7 @@
 | 
			
		||||
0.71 0.24 -0.077691 -0.046320 0.090451
 | 
			
		||||
0.74 0.24 -0.068991 -0.048114 0.084111
 | 
			
		||||
0.76 0.24 -0.059958 -0.048721 0.077257
 | 
			
		||||
0.79 0.24 -0.050796 -0.048075 0.069939
 | 
			
		||||
0.79 0.24 -0.050796 -0.048075 0.069938
 | 
			
		||||
0.81 0.24 -0.041727 -0.046141 0.062210
 | 
			
		||||
0.84 0.24 -0.032981 -0.042925 0.054132
 | 
			
		||||
0.86 0.24 -0.024797 -0.038478 0.045776
 | 
			
		||||
@@ -408,7 +408,7 @@
 | 
			
		||||
0.19 0.26 -0.045674 0.054903 0.071418
 | 
			
		||||
0.21 0.26 -0.055333 0.056832 0.079320
 | 
			
		||||
0.24 0.26 -0.065054 0.057332 0.086712
 | 
			
		||||
0.26 0.26 -0.074620 0.056461 0.093574
 | 
			
		||||
0.26 0.26 -0.074621 0.056461 0.093574
 | 
			
		||||
0.29 0.26 -0.083835 0.054302 0.099885
 | 
			
		||||
0.31 0.26 -0.092517 0.050954 0.105620
 | 
			
		||||
0.34 0.26 -0.100504 0.046530 0.110752
 | 
			
		||||
@@ -606,7 +606,7 @@
 | 
			
		||||
0.14 0.39 -0.040517 0.098443 0.106455
 | 
			
		||||
0.16 0.39 -0.053081 0.106833 0.119293
 | 
			
		||||
0.19 0.39 -0.066194 0.112215 0.130284
 | 
			
		||||
0.21 0.39 -0.079501 0.114706 0.139563
 | 
			
		||||
0.21 0.39 -0.079502 0.114706 0.139563
 | 
			
		||||
0.24 0.39 -0.092687 0.114466 0.147287
 | 
			
		||||
0.26 0.39 -0.105476 0.111690 0.153623
 | 
			
		||||
0.29 0.39 -0.117633 0.106594 0.158744
 | 
			
		||||
@@ -630,7 +630,7 @@
 | 
			
		||||
0.74 0.39 -0.111319 -0.114027 0.159355
 | 
			
		||||
0.76 0.39 -0.098068 -0.117318 0.152908
 | 
			
		||||
0.79 0.39 -0.084249 -0.117805 0.144830
 | 
			
		||||
0.81 0.39 -0.070186 -0.115275 0.134960
 | 
			
		||||
0.81 0.39 -0.070185 -0.115275 0.134960
 | 
			
		||||
0.84 0.39 -0.056251 -0.109576 0.123171
 | 
			
		||||
0.86 0.39 -0.042866 -0.100636 0.109385
 | 
			
		||||
0.89 0.39 -0.030488 -0.088477 0.093583
 | 
			
		||||
@@ -696,7 +696,7 @@
 | 
			
		||||
0.39 0.44 -0.170816 0.082592 0.189735
 | 
			
		||||
0.41 0.44 -0.177729 0.066561 0.189784
 | 
			
		||||
0.44 0.44 -0.183191 0.049483 0.189756
 | 
			
		||||
0.46 0.44 -0.187155 0.031606 0.189805
 | 
			
		||||
0.46 0.44 -0.187155 0.031605 0.189805
 | 
			
		||||
0.49 0.44 -0.189584 0.013174 0.190041
 | 
			
		||||
0.51 0.44 -0.190442 -0.005565 0.190523
 | 
			
		||||
0.54 0.44 -0.189701 -0.024360 0.191258
 | 
			
		||||
@@ -763,7 +763,7 @@
 | 
			
		||||
0.06 0.49 -0.013496 0.088857 0.089876
 | 
			
		||||
0.09 0.49 -0.024333 0.115469 0.118005
 | 
			
		||||
0.11 0.49 -0.037314 0.136818 0.141815
 | 
			
		||||
0.14 0.49 -0.051761 0.152957 0.161477
 | 
			
		||||
0.14 0.49 -0.051761 0.152956 0.161477
 | 
			
		||||
0.16 0.49 -0.067064 0.164072 0.177249
 | 
			
		||||
0.19 0.49 -0.082692 0.170453 0.189452
 | 
			
		||||
0.21 0.49 -0.098201 0.172458 0.198457
 | 
			
		||||
@@ -797,7 +797,7 @@
 | 
			
		||||
0.91 0.49 -0.027263 -0.120196 0.123249
 | 
			
		||||
0.94 0.49 -0.015090 -0.091937 0.093167
 | 
			
		||||
0.96 0.49 -0.006161 -0.058588 0.058911
 | 
			
		||||
0.99 0.49 -0.001306 -0.020753 0.020794
 | 
			
		||||
0.99 0.49 -0.001307 -0.020753 0.020794
 | 
			
		||||
0.01 0.51 -0.001267 0.022927 0.022962
 | 
			
		||||
0.04 0.51 -0.005931 0.063665 0.063941
 | 
			
		||||
0.06 0.51 -0.014434 0.098757 0.099806
 | 
			
		||||
@@ -818,7 +818,7 @@
 | 
			
		||||
0.44 0.51 -0.197267 0.063695 0.207295
 | 
			
		||||
0.46 0.51 -0.201225 0.041450 0.205450
 | 
			
		||||
0.49 0.51 -0.203822 0.018572 0.204666
 | 
			
		||||
0.51 0.51 -0.205038 -0.004702 0.205092
 | 
			
		||||
0.51 0.51 -0.205038 -0.004703 0.205092
 | 
			
		||||
0.54 0.51 -0.204841 -0.028133 0.206764
 | 
			
		||||
0.56 0.51 -0.203186 -0.051464 0.209603
 | 
			
		||||
0.59 0.51 -0.200018 -0.074415 0.213412
 | 
			
		||||
@@ -930,7 +930,7 @@
 | 
			
		||||
0.24 0.59 -0.127806 0.228465 0.261784
 | 
			
		||||
0.26 0.59 -0.140687 0.218257 0.259671
 | 
			
		||||
0.29 0.59 -0.152059 0.204463 0.254808
 | 
			
		||||
0.31 0.59 -0.161946 0.187726 0.247927
 | 
			
		||||
0.31 0.59 -0.161947 0.187726 0.247927
 | 
			
		||||
0.34 0.59 -0.170423 0.168596 0.239726
 | 
			
		||||
0.36 0.59 -0.177595 0.147530 0.230879
 | 
			
		||||
0.39 0.59 -0.183579 0.124907 0.222043
 | 
			
		||||
@@ -1022,7 +1022,7 @@
 | 
			
		||||
0.54 0.64 -0.176772 -0.028584 0.179068
 | 
			
		||||
0.56 0.64 -0.177447 -0.056962 0.186366
 | 
			
		||||
0.59 0.64 -0.177740 -0.085477 0.197226
 | 
			
		||||
0.61 0.64 -0.177485 -0.113961 0.210922
 | 
			
		||||
0.61 0.64 -0.177485 -0.113961 0.210921
 | 
			
		||||
0.64 0.64 -0.176458 -0.142170 0.226604
 | 
			
		||||
0.66 0.64 -0.174383 -0.169764 0.243370
 | 
			
		||||
0.69 0.64 -0.170939 -0.196274 0.260276
 | 
			
		||||
@@ -1058,7 +1058,7 @@
 | 
			
		||||
0.44 0.66 -0.153866 0.082763 0.174713
 | 
			
		||||
0.46 0.66 -0.154549 0.055784 0.164308
 | 
			
		||||
0.49 0.66 -0.155334 0.028385 0.157906
 | 
			
		||||
0.51 0.66 -0.156288 0.000597 0.156290
 | 
			
		||||
0.51 0.66 -0.156288 0.000597 0.156289
 | 
			
		||||
0.54 0.66 -0.157423 -0.027557 0.159817
 | 
			
		||||
0.56 0.66 -0.158690 -0.056046 0.168296
 | 
			
		||||
0.59 0.66 -0.159981 -0.084810 0.181071
 | 
			
		||||
@@ -1125,7 +1125,7 @@
 | 
			
		||||
0.11 0.71 -0.064931 0.286424 0.293692
 | 
			
		||||
0.14 0.71 -0.081730 0.303029 0.313857
 | 
			
		||||
0.16 0.71 -0.095581 0.307708 0.322211
 | 
			
		||||
0.19 0.71 -0.106003 0.303115 0.321115
 | 
			
		||||
0.19 0.71 -0.106002 0.303115 0.321115
 | 
			
		||||
0.21 0.71 -0.113003 0.291579 0.312711
 | 
			
		||||
0.24 0.71 -0.116908 0.275028 0.298844
 | 
			
		||||
0.26 0.71 -0.118215 0.254982 0.281053
 | 
			
		||||
@@ -1186,7 +1186,7 @@
 | 
			
		||||
0.64 0.74 -0.077679 -0.130864 0.152182
 | 
			
		||||
0.66 0.74 -0.085621 -0.160050 0.181513
 | 
			
		||||
0.69 0.74 -0.093957 -0.189964 0.211930
 | 
			
		||||
0.71 0.74 -0.102094 -0.220307 0.242814
 | 
			
		||||
0.71 0.74 -0.102095 -0.220307 0.242814
 | 
			
		||||
0.74 0.74 -0.109290 -0.250517 0.273319
 | 
			
		||||
0.76 0.74 -0.114650 -0.279666 0.302255
 | 
			
		||||
0.79 0.74 -0.117166 -0.306352 0.327993
 | 
			
		||||
@@ -1486,7 +1486,7 @@
 | 
			
		||||
0.14 0.94 0.236018 0.149848 0.279569
 | 
			
		||||
0.16 0.94 0.308503 0.117843 0.330244
 | 
			
		||||
0.19 0.94 0.370556 0.093841 0.382253
 | 
			
		||||
0.21 0.94 0.422981 0.075644 0.429691
 | 
			
		||||
0.21 0.94 0.422980 0.075644 0.429691
 | 
			
		||||
0.24 0.94 0.467064 0.061599 0.471109
 | 
			
		||||
0.26 0.94 0.504083 0.050535 0.506610
 | 
			
		||||
0.29 0.94 0.535145 0.041634 0.536762
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user