Loading examples/hamilton-jacobi-parallel/run 0 → 100755 +64 −0 Original line number Diff line number Diff line #!/bin/bash #GRID_SIZES="0897" GRID_SIZES="0008 0015 0029 0057 0113 0225 0449" #GRID_SIZES="1793" dimensions=2 size=2 time=3 for grid_size in $GRID_SIZES; do rm -r grid-${grid_size} mkdir grid-${grid_size} cd grid-${grid_size} tnl-grid-setup --dimensions $dimensions \ --origin-x -1.0 \ --origin-y -1.0 \ --origin-z -1.0 \ --proportions-x $size \ --proportions-y $size \ --proportions-z $size \ --size-x ${grid_size} \ --size-y ${grid_size} \ --size-z ${grid_size} tnl-init --test-function sdf-para \ --offset 0.25 \ --output-file init.tnl \ --final-time 0.0 \ --snapshot-period 0.1 \ tnl-init --test-function sdf-para-sdf \ --offset 0.25 \ --output-file sdf.tnl \ --final-time 0.0 \ --snapshot-period 0.1 hamilton-jacobi-parallel --initial-condition init.tnl \ --cfl-condition 1.0e-1 \ --mesh mesh.tnl \ --initial-tau 1.0e-3 \ --epsilon 1.0 \ --delta 0.0 \ --stop-time $time \ --scheme godunov \ --subgrid-size 8 tnl-diff --mesh mesh.tnl --mode sequence --input-files sdf.tnl u-00001.tnl --write-difference yes --output-file ../${grid_size}.diff cd .. done ./tnl-err2eoc-2.py --format txt --size $size *.diff examples/hamilton-jacobi-parallel/tnl-err2eoc-2.py 0 → 100755 +141 −0 Original line number Diff line number Diff line #!/usr/bin/env python import sys, string, math arguments = sys. argv[1:] format = "txt" output_file_name = "eoc-table.txt" input_files = [] verbose = 1 size = 1.0 i = 0 while i < len( arguments ): if arguments[ i ] == "--format": format = arguments[ i + 1 ] i = i + 2 continue if arguments[ i ] == "--output-file": output_file_name = arguments[ i + 1 ] i = i + 2 continue if arguments[ i ] == "--verbose": verbose = float( arguments[ i + 1 ] ) i = i +2 continue if arguments[ i ] == "--size": size = float( arguments[ i + 1 ] ) i = i +2 continue input_files. append( arguments[ i ] ) i = i + 1 if not verbose == 0: print "Writing to " + output_file_name + " in " + format + "." h_list = [] l1_norm_list = [] l2_norm_list = [] max_norm_list = [] items = 0 for file_name in input_files: if not verbose == 0: print "Processing file " + file_name file = open( file_name, "r" ) l1_max = 0.0 l_max_max = 0.0 file.readline(); file.readline(); for line in file. readlines(): data = string. split( line ) h_list. append( size/(float(file_name[0:len(file_name)-5] ) - 1.0) ) l1_norm_list. append( float( data[ 1 ] ) ) l2_norm_list. append( float( data[ 2 ] ) ) max_norm_list. append( float( data[ 3 ] ) ) items = items + 1 if not verbose == 0: print line file. close() h_width = 12 err_width = 15 file = open( output_file_name, "w" ) if format == "latex": file. write( "\\begin{tabular}{|r|l|l|l|l|l|l|}\\hline\n" ) file. write( "\\raisebox{-1ex}[0ex]{$h$}& \n" ) file. write( "\\multicolumn{2}{|c|}{\\raisebox{1ex}[3.5ex]{$\\left\| \\cdot \\right\\|_{L_1\\left(\\omega_h;\\left[0,T\\right]\\right)}^{h,\\tau}$}}& \n" ) file. write( "\\multicolumn{2}{|c|}{\\raisebox{1ex}[3.5ex]{$\\left\| \\cdot \\right\\|_{L_2\\left(\\omega_h;\left[0,T\\right]\\right)}^{h,\\tau}$}}& \n" ) file. write( "\\multicolumn{2}{|c|}{\\raisebox{1ex}[3.5ex]{$\\left\| \\cdot \\right\\|_{L_\\infty\\left(\\omega_h;\\left[0,T\\right]\\right)}^{h,\\tau}$}}\\\\ \\cline{2-7} \n" ) file. write( " " + string. rjust( " ", h_width ) + "&" + string. rjust( "Error", err_width ) + "&" + string. rjust( "{\\bf EOC}", err_width ) + "&" + string. rjust( "Error", err_width ) + "&" + string. rjust( "{\\bf EOC}", err_width ) + "&" + string. rjust( "Error.", err_width ) + "&" + string. rjust( "{\\bf EOC}", err_width ) + "\\\\ \\hline \\hline \n") if format == "txt": file. write( "+--------------+----------------+----------------+----------------+----------------+----------------+----------------+\n" ) file. write( "| h | L1 Err. | L1 EOC. | L2 Err. | L2 EOC | MAX Err. | MAX EOC |\n" ) file. write( "+==============+================+================+================+================+================+================+\n" ) i = 0 while i < items: if i == 0: if format == "latex": file. write( " " + string. ljust( str( h_list[ i ] ), h_width ) + "&" + string. rjust( "%.2g" % l1_norm_list[ i ], err_width ) + "&" + string. rjust( " ", err_width ) + "&"+ string. rjust( "%.2g" % l2_norm_list[ i ], err_width ) + "&" + string. rjust( " ", err_width ) + "&" + string. rjust( "%.2g" % max_norm_list[ i ], err_width ) + "&" + string. rjust( " ", err_width ) + "\\\\\n" ) if format == "txt": file. write( "| " + string. ljust( str( h_list[ i ] ), h_width ) + " |" + string. rjust( "%.2g" % l1_norm_list[ i ], err_width ) + " |" + string. rjust( " ", err_width ) + " |" + string. rjust( "%.2g" % l2_norm_list[ i ], err_width ) + " |" + string. rjust( " ", err_width ) + " |" + string. rjust( "%.2g" % max_norm_list[ i ], err_width ) + " |" + string. rjust( " ", err_width ) + " |\n" ) file. write( "+--------------+----------------+----------------+----------------+----------------+----------------+----------------+\n" ) i = i + 1; continue if h_list[ i ] == h_list[ i - 1 ]: print "Unable to count eoc since h[ " + \ str( i ) + " ] = h[ " + str( i - 1 ) + \ " ] = " + str( h_list[ i ] ) + ". \n" file. write( " eoc error: h[ " + \ str( i ) + " ] = h[ " + str( i - 1 ) + \ " ] = " + str( h_list[ i ] ) + ". \n" ) else: h_ratio = math. log( h_list[ i ] / h_list[ i - 1 ] ) l1_ratio = math. log( l1_norm_list[ i ] / l1_norm_list[ i - 1 ] ) l2_ratio = math. log( l2_norm_list[ i ] / l2_norm_list[ i - 1 ] ) max_ratio = math. log( max_norm_list[ i ] / max_norm_list[ i - 1 ] ) if format == "latex": file. write( " " + string. ljust( str( h_list[ i ] ), h_width ) + "&" + string. rjust( "%.2g" % l1_norm_list[ i ], err_width ) + "&" + string. rjust( "{\\bf " + "%.2g" % ( l1_ratio / h_ratio ) + "}", err_width ) + "&" + string. rjust( "%.2g" % l2_norm_list[ i ], err_width ) + "&" + string. rjust( "{\\bf " + "%.2g" % ( l2_ratio / h_ratio ) + "}", err_width ) + "&" + string. rjust( "%.2g" % max_norm_list[ i ], err_width ) + "&" + string. rjust( "{\\bf " + "%.2g" % ( max_ratio / h_ratio ) + "}", err_width ) + "\\\\\n" ) if format == "txt": file. write( "| " + string. ljust( str( h_list[ i ] ), h_width ) + " |" + string. rjust( "%.2g" % l1_norm_list[ i ], err_width ) + " |" + string. rjust( "**" + "%.2g" % ( l1_ratio / h_ratio ) + "**", err_width ) + " |" + string. rjust( "%.2g" % l2_norm_list[ i ], err_width ) + " |" + string. rjust( "**" + "%.2g" % ( l2_ratio / h_ratio ) + "**", err_width ) + " |" + string. rjust( "%.2g" % max_norm_list[ i ], err_width ) + " |" + string. rjust( "**" + "%.2g" % ( max_ratio / h_ratio ) + "**", err_width ) + " |\n" ) file. write( "+--------------+----------------+----------------+----------------+----------------+----------------+----------------+\n" ) i = i + 1 if format == "latex": file. write( "\\hline \n" ) file. write( "\\end{tabular} \n" ) examples/hamilton-jacobi-parallel/tnlParallelEikonalSolver_impl.h +128 −13 Original line number Diff line number Diff line Loading @@ -157,6 +157,30 @@ void tnlParallelEikonalSolver<Scheme, double, tnlHost, int>::run() { insertSubgrid( runSubgrid(8, getSubgrid(i),i), i); } if( (getBoundaryCondition(i) & 1) || (getBoundaryCondition(i) & 2) ) { //cout << "3 @ " << getBoundaryCondition(i) << endl; insertSubgrid( runSubgrid(3, getSubgrid(i),i), i); } if( (getBoundaryCondition(i) & 1) || (getBoundaryCondition(i) & 4) ) { //cout << "5 @ " << getBoundaryCondition(i) << endl; insertSubgrid( runSubgrid(5, getSubgrid(i),i), i); } if( (getBoundaryCondition(i) & 8) || (getBoundaryCondition(i) & 2) ) { //cout << "10 @ " << getBoundaryCondition(i) << endl; insertSubgrid( runSubgrid(10, getSubgrid(i),i), i); } if( (getBoundaryCondition(i) & 8) || (getBoundaryCondition(i) & 4) ) { //cout << "12 @ " << getBoundaryCondition(i) << endl; insertSubgrid( runSubgrid(12, getSubgrid(i),i), i); } /*if(getBoundaryCondition(i)) { insertSubgrid( runSubgrid(15, getSubgrid(i),i), i); Loading Loading @@ -513,7 +537,7 @@ tnlParallelEikonalSolver<Scheme, double, tnlHost, int>::runSubgrid( int boundary /**/ bool tmp = false; /* bool tmp = false; for(int i = 0; i < u.getSize(); i++) { if(u[0]*u[i] <= 0.0) Loading @@ -525,44 +549,131 @@ tnlParallelEikonalSolver<Scheme, double, tnlHost, int>::runSubgrid( int boundary {} else if(boundaryCondition == 4) { for(int i = 0; i < u.getSize(); i=subMesh.getCellYSuccessor(i)) int i; for(i = 0; i < u.getSize() - subMesh.getDimensions().x() ; i=subMesh.getCellYSuccessor(i)) { for(int j = i; j < subMesh.getDimensions().x(); j=subMesh.getCellXSuccessor(j)) int j; for(j = i; j < subMesh.getDimensions().x() - 1; j=subMesh.getCellXSuccessor(j)) { u[j] = u[i]; } u[j] = u[i]; } int j; for(j = i; j < subMesh.getDimensions().x() - 1; j=subMesh.getCellXSuccessor(j)) { u[j] = u[i]; } u[j] = u[i]; } else if(boundaryCondition == 8) { for(int i = 0; i < subMesh.getDimensions().x(); i=subMesh.getCellXSuccessor(i)) int i; for(i = 0; i < subMesh.getDimensions().x() - 1; i=subMesh.getCellXSuccessor(i)) { for(int j = i; j < u.getSize(); j=subMesh.getCellYSuccessor(j)) int j; for(j = i; j < u.getSize() - subMesh.getDimensions().x(); j=subMesh.getCellYSuccessor(j)) { u[j] = u[i]; } u[j] = u[i]; } int j; for(j = i; j < u.getSize() - subMesh.getDimensions().x(); j=subMesh.getCellYSuccessor(j)) { u[j] = u[i]; } u[j] = u[i]; } else if(boundaryCondition == 2) { for(int i = subMesh.getDimensions().x() - 1; i < u.getSize(); i=subMesh.getCellYSuccessor(i)) int i; for(i = subMesh.getDimensions().x() - 1; i < u.getSize() - subMesh.getDimensions().x() ; i=subMesh.getCellYSuccessor(i)) { for(int j = i; j > (i-1)*subMesh.getDimensions().x(); j=subMesh.getCellXPredecessor(j)) int j; for(j = i; j > (i-1)*subMesh.getDimensions().x(); j=subMesh.getCellXPredecessor(j)) { u[j] = u[i]; } u[j] = u[i]; } int j; for(j = i; j > (i-1)*subMesh.getDimensions().x(); j=subMesh.getCellXPredecessor(j)) { u[j] = u[i]; } u[j] = u[i]; } else if(boundaryCondition == 1) { for(int i = (subMesh.getDimensions().y() - 1)*subMesh.getDimensions().x(); i < u.getSize(); i=subMesh.getCellXSuccessor(i)) int i; for(i = (subMesh.getDimensions().y() - 1)*subMesh.getDimensions().x(); i < u.getSize() - 1; i=subMesh.getCellXSuccessor(i)) { for(int j = i; j > 0; j=subMesh.getCellYPredecessor(j)) int j; for(j = i; j >=subMesh.getDimensions().x(); j=subMesh.getCellYPredecessor(j)) { u[j] = u[i]; } u[j] = u[i]; } int j; for(j = i; j >=subMesh.getDimensions().x(); j=subMesh.getCellYPredecessor(j)) { u[j] = u[i]; } u[j] = u[i]; } */ /**/ bool tmp = false; for(int i = 0; i < u.getSize(); i++) { if(u[0]*u[i] <= 0.0) tmp=true; } //if(this->currentStep + 3 < getSubgridValue(subGridID)) //tmp = true; if(tmp) {} //north - 1, east - 2, west - 4, south - 8 else if(boundaryCondition == 4) { for(int i = 0; i < this->n; i++) for(int j = 1;j < this->n; j++) if(fabs(u[i*this->n + j]) < fabs(u[i*this->n])) u[i*this->n + j] = u[i*this->n]; } else if(boundaryCondition == 2) { for(int i = 0; i < this->n; i++) for(int j =0 ;j < this->n -1; j++) if(fabs(u[i*this->n + j]) < fabs(u[(i+1)*this->n - 1])) u[i*this->n + j] = u[(i+1)*this->n - 1]; } else if(boundaryCondition == 1) { for(int j = 0; j < this->n; j++) for(int i = 0;i < this->n - 1; i++) if(fabs(u[i*this->n + j]) < fabs(u[j + this->n*(this->n - 1)])) u[i*this->n + j] = u[j + this->n*(this->n - 1)]; } else if(boundaryCondition == 8) { for(int j = 0; j < this->n; j++) for(int i = 1;i < this->n; i++) if(fabs(u[i*this->n + j]) < fabs(u[j])) u[i*this->n + j] = u[j]; } /**/ Loading @@ -575,8 +686,9 @@ tnlParallelEikonalSolver<Scheme, double, tnlHost, int>::runSubgrid( int boundary double finalTime = this->stopTime;// + 3.0*(u.max() - u.min()); if( time + currentTau > finalTime ) currentTau = finalTime - time; double maxResidue( 0.0 ); while( time < finalTime) double maxResidue( 1.0 ); double lastResidue( 10000.0 ); while( time < finalTime /*|| maxResidue > subMesh.getHx()*/) { /**** * Compute the RHS Loading @@ -591,6 +703,8 @@ tnlParallelEikonalSolver<Scheme, double, tnlHost, int>::runSubgrid( int boundary if( this -> cflCondition * maxResidue != 0.0) currentTau = this -> cflCondition / maxResidue; /*if(maxResidue > lastResidue) currentTau *=(1.0/10.0);*/ if( time + currentTau > finalTime ) currentTau = finalTime - time; Loading @@ -611,8 +725,9 @@ tnlParallelEikonalSolver<Scheme, double, tnlHost, int>::runSubgrid( int boundary //cout << '\r' << flush; //cout << maxResidue << " " << currentTau << " @ " << time << flush; lastResidue = maxResidue; } //cout << "Time: " << time << ", Res: " << maxResidue <<endl; /*if (u.max() > 0.0) this->stopTime /=(double) this->gridCols;*/ Loading Loading
examples/hamilton-jacobi-parallel/run 0 → 100755 +64 −0 Original line number Diff line number Diff line #!/bin/bash #GRID_SIZES="0897" GRID_SIZES="0008 0015 0029 0057 0113 0225 0449" #GRID_SIZES="1793" dimensions=2 size=2 time=3 for grid_size in $GRID_SIZES; do rm -r grid-${grid_size} mkdir grid-${grid_size} cd grid-${grid_size} tnl-grid-setup --dimensions $dimensions \ --origin-x -1.0 \ --origin-y -1.0 \ --origin-z -1.0 \ --proportions-x $size \ --proportions-y $size \ --proportions-z $size \ --size-x ${grid_size} \ --size-y ${grid_size} \ --size-z ${grid_size} tnl-init --test-function sdf-para \ --offset 0.25 \ --output-file init.tnl \ --final-time 0.0 \ --snapshot-period 0.1 \ tnl-init --test-function sdf-para-sdf \ --offset 0.25 \ --output-file sdf.tnl \ --final-time 0.0 \ --snapshot-period 0.1 hamilton-jacobi-parallel --initial-condition init.tnl \ --cfl-condition 1.0e-1 \ --mesh mesh.tnl \ --initial-tau 1.0e-3 \ --epsilon 1.0 \ --delta 0.0 \ --stop-time $time \ --scheme godunov \ --subgrid-size 8 tnl-diff --mesh mesh.tnl --mode sequence --input-files sdf.tnl u-00001.tnl --write-difference yes --output-file ../${grid_size}.diff cd .. done ./tnl-err2eoc-2.py --format txt --size $size *.diff
examples/hamilton-jacobi-parallel/tnl-err2eoc-2.py 0 → 100755 +141 −0 Original line number Diff line number Diff line #!/usr/bin/env python import sys, string, math arguments = sys. argv[1:] format = "txt" output_file_name = "eoc-table.txt" input_files = [] verbose = 1 size = 1.0 i = 0 while i < len( arguments ): if arguments[ i ] == "--format": format = arguments[ i + 1 ] i = i + 2 continue if arguments[ i ] == "--output-file": output_file_name = arguments[ i + 1 ] i = i + 2 continue if arguments[ i ] == "--verbose": verbose = float( arguments[ i + 1 ] ) i = i +2 continue if arguments[ i ] == "--size": size = float( arguments[ i + 1 ] ) i = i +2 continue input_files. append( arguments[ i ] ) i = i + 1 if not verbose == 0: print "Writing to " + output_file_name + " in " + format + "." h_list = [] l1_norm_list = [] l2_norm_list = [] max_norm_list = [] items = 0 for file_name in input_files: if not verbose == 0: print "Processing file " + file_name file = open( file_name, "r" ) l1_max = 0.0 l_max_max = 0.0 file.readline(); file.readline(); for line in file. readlines(): data = string. split( line ) h_list. append( size/(float(file_name[0:len(file_name)-5] ) - 1.0) ) l1_norm_list. append( float( data[ 1 ] ) ) l2_norm_list. append( float( data[ 2 ] ) ) max_norm_list. append( float( data[ 3 ] ) ) items = items + 1 if not verbose == 0: print line file. close() h_width = 12 err_width = 15 file = open( output_file_name, "w" ) if format == "latex": file. write( "\\begin{tabular}{|r|l|l|l|l|l|l|}\\hline\n" ) file. write( "\\raisebox{-1ex}[0ex]{$h$}& \n" ) file. write( "\\multicolumn{2}{|c|}{\\raisebox{1ex}[3.5ex]{$\\left\| \\cdot \\right\\|_{L_1\\left(\\omega_h;\\left[0,T\\right]\\right)}^{h,\\tau}$}}& \n" ) file. write( "\\multicolumn{2}{|c|}{\\raisebox{1ex}[3.5ex]{$\\left\| \\cdot \\right\\|_{L_2\\left(\\omega_h;\left[0,T\\right]\\right)}^{h,\\tau}$}}& \n" ) file. write( "\\multicolumn{2}{|c|}{\\raisebox{1ex}[3.5ex]{$\\left\| \\cdot \\right\\|_{L_\\infty\\left(\\omega_h;\\left[0,T\\right]\\right)}^{h,\\tau}$}}\\\\ \\cline{2-7} \n" ) file. write( " " + string. rjust( " ", h_width ) + "&" + string. rjust( "Error", err_width ) + "&" + string. rjust( "{\\bf EOC}", err_width ) + "&" + string. rjust( "Error", err_width ) + "&" + string. rjust( "{\\bf EOC}", err_width ) + "&" + string. rjust( "Error.", err_width ) + "&" + string. rjust( "{\\bf EOC}", err_width ) + "\\\\ \\hline \\hline \n") if format == "txt": file. write( "+--------------+----------------+----------------+----------------+----------------+----------------+----------------+\n" ) file. write( "| h | L1 Err. | L1 EOC. | L2 Err. | L2 EOC | MAX Err. | MAX EOC |\n" ) file. write( "+==============+================+================+================+================+================+================+\n" ) i = 0 while i < items: if i == 0: if format == "latex": file. write( " " + string. ljust( str( h_list[ i ] ), h_width ) + "&" + string. rjust( "%.2g" % l1_norm_list[ i ], err_width ) + "&" + string. rjust( " ", err_width ) + "&"+ string. rjust( "%.2g" % l2_norm_list[ i ], err_width ) + "&" + string. rjust( " ", err_width ) + "&" + string. rjust( "%.2g" % max_norm_list[ i ], err_width ) + "&" + string. rjust( " ", err_width ) + "\\\\\n" ) if format == "txt": file. write( "| " + string. ljust( str( h_list[ i ] ), h_width ) + " |" + string. rjust( "%.2g" % l1_norm_list[ i ], err_width ) + " |" + string. rjust( " ", err_width ) + " |" + string. rjust( "%.2g" % l2_norm_list[ i ], err_width ) + " |" + string. rjust( " ", err_width ) + " |" + string. rjust( "%.2g" % max_norm_list[ i ], err_width ) + " |" + string. rjust( " ", err_width ) + " |\n" ) file. write( "+--------------+----------------+----------------+----------------+----------------+----------------+----------------+\n" ) i = i + 1; continue if h_list[ i ] == h_list[ i - 1 ]: print "Unable to count eoc since h[ " + \ str( i ) + " ] = h[ " + str( i - 1 ) + \ " ] = " + str( h_list[ i ] ) + ". \n" file. write( " eoc error: h[ " + \ str( i ) + " ] = h[ " + str( i - 1 ) + \ " ] = " + str( h_list[ i ] ) + ". \n" ) else: h_ratio = math. log( h_list[ i ] / h_list[ i - 1 ] ) l1_ratio = math. log( l1_norm_list[ i ] / l1_norm_list[ i - 1 ] ) l2_ratio = math. log( l2_norm_list[ i ] / l2_norm_list[ i - 1 ] ) max_ratio = math. log( max_norm_list[ i ] / max_norm_list[ i - 1 ] ) if format == "latex": file. write( " " + string. ljust( str( h_list[ i ] ), h_width ) + "&" + string. rjust( "%.2g" % l1_norm_list[ i ], err_width ) + "&" + string. rjust( "{\\bf " + "%.2g" % ( l1_ratio / h_ratio ) + "}", err_width ) + "&" + string. rjust( "%.2g" % l2_norm_list[ i ], err_width ) + "&" + string. rjust( "{\\bf " + "%.2g" % ( l2_ratio / h_ratio ) + "}", err_width ) + "&" + string. rjust( "%.2g" % max_norm_list[ i ], err_width ) + "&" + string. rjust( "{\\bf " + "%.2g" % ( max_ratio / h_ratio ) + "}", err_width ) + "\\\\\n" ) if format == "txt": file. write( "| " + string. ljust( str( h_list[ i ] ), h_width ) + " |" + string. rjust( "%.2g" % l1_norm_list[ i ], err_width ) + " |" + string. rjust( "**" + "%.2g" % ( l1_ratio / h_ratio ) + "**", err_width ) + " |" + string. rjust( "%.2g" % l2_norm_list[ i ], err_width ) + " |" + string. rjust( "**" + "%.2g" % ( l2_ratio / h_ratio ) + "**", err_width ) + " |" + string. rjust( "%.2g" % max_norm_list[ i ], err_width ) + " |" + string. rjust( "**" + "%.2g" % ( max_ratio / h_ratio ) + "**", err_width ) + " |\n" ) file. write( "+--------------+----------------+----------------+----------------+----------------+----------------+----------------+\n" ) i = i + 1 if format == "latex": file. write( "\\hline \n" ) file. write( "\\end{tabular} \n" )
examples/hamilton-jacobi-parallel/tnlParallelEikonalSolver_impl.h +128 −13 Original line number Diff line number Diff line Loading @@ -157,6 +157,30 @@ void tnlParallelEikonalSolver<Scheme, double, tnlHost, int>::run() { insertSubgrid( runSubgrid(8, getSubgrid(i),i), i); } if( (getBoundaryCondition(i) & 1) || (getBoundaryCondition(i) & 2) ) { //cout << "3 @ " << getBoundaryCondition(i) << endl; insertSubgrid( runSubgrid(3, getSubgrid(i),i), i); } if( (getBoundaryCondition(i) & 1) || (getBoundaryCondition(i) & 4) ) { //cout << "5 @ " << getBoundaryCondition(i) << endl; insertSubgrid( runSubgrid(5, getSubgrid(i),i), i); } if( (getBoundaryCondition(i) & 8) || (getBoundaryCondition(i) & 2) ) { //cout << "10 @ " << getBoundaryCondition(i) << endl; insertSubgrid( runSubgrid(10, getSubgrid(i),i), i); } if( (getBoundaryCondition(i) & 8) || (getBoundaryCondition(i) & 4) ) { //cout << "12 @ " << getBoundaryCondition(i) << endl; insertSubgrid( runSubgrid(12, getSubgrid(i),i), i); } /*if(getBoundaryCondition(i)) { insertSubgrid( runSubgrid(15, getSubgrid(i),i), i); Loading Loading @@ -513,7 +537,7 @@ tnlParallelEikonalSolver<Scheme, double, tnlHost, int>::runSubgrid( int boundary /**/ bool tmp = false; /* bool tmp = false; for(int i = 0; i < u.getSize(); i++) { if(u[0]*u[i] <= 0.0) Loading @@ -525,44 +549,131 @@ tnlParallelEikonalSolver<Scheme, double, tnlHost, int>::runSubgrid( int boundary {} else if(boundaryCondition == 4) { for(int i = 0; i < u.getSize(); i=subMesh.getCellYSuccessor(i)) int i; for(i = 0; i < u.getSize() - subMesh.getDimensions().x() ; i=subMesh.getCellYSuccessor(i)) { for(int j = i; j < subMesh.getDimensions().x(); j=subMesh.getCellXSuccessor(j)) int j; for(j = i; j < subMesh.getDimensions().x() - 1; j=subMesh.getCellXSuccessor(j)) { u[j] = u[i]; } u[j] = u[i]; } int j; for(j = i; j < subMesh.getDimensions().x() - 1; j=subMesh.getCellXSuccessor(j)) { u[j] = u[i]; } u[j] = u[i]; } else if(boundaryCondition == 8) { for(int i = 0; i < subMesh.getDimensions().x(); i=subMesh.getCellXSuccessor(i)) int i; for(i = 0; i < subMesh.getDimensions().x() - 1; i=subMesh.getCellXSuccessor(i)) { for(int j = i; j < u.getSize(); j=subMesh.getCellYSuccessor(j)) int j; for(j = i; j < u.getSize() - subMesh.getDimensions().x(); j=subMesh.getCellYSuccessor(j)) { u[j] = u[i]; } u[j] = u[i]; } int j; for(j = i; j < u.getSize() - subMesh.getDimensions().x(); j=subMesh.getCellYSuccessor(j)) { u[j] = u[i]; } u[j] = u[i]; } else if(boundaryCondition == 2) { for(int i = subMesh.getDimensions().x() - 1; i < u.getSize(); i=subMesh.getCellYSuccessor(i)) int i; for(i = subMesh.getDimensions().x() - 1; i < u.getSize() - subMesh.getDimensions().x() ; i=subMesh.getCellYSuccessor(i)) { for(int j = i; j > (i-1)*subMesh.getDimensions().x(); j=subMesh.getCellXPredecessor(j)) int j; for(j = i; j > (i-1)*subMesh.getDimensions().x(); j=subMesh.getCellXPredecessor(j)) { u[j] = u[i]; } u[j] = u[i]; } int j; for(j = i; j > (i-1)*subMesh.getDimensions().x(); j=subMesh.getCellXPredecessor(j)) { u[j] = u[i]; } u[j] = u[i]; } else if(boundaryCondition == 1) { for(int i = (subMesh.getDimensions().y() - 1)*subMesh.getDimensions().x(); i < u.getSize(); i=subMesh.getCellXSuccessor(i)) int i; for(i = (subMesh.getDimensions().y() - 1)*subMesh.getDimensions().x(); i < u.getSize() - 1; i=subMesh.getCellXSuccessor(i)) { for(int j = i; j > 0; j=subMesh.getCellYPredecessor(j)) int j; for(j = i; j >=subMesh.getDimensions().x(); j=subMesh.getCellYPredecessor(j)) { u[j] = u[i]; } u[j] = u[i]; } int j; for(j = i; j >=subMesh.getDimensions().x(); j=subMesh.getCellYPredecessor(j)) { u[j] = u[i]; } u[j] = u[i]; } */ /**/ bool tmp = false; for(int i = 0; i < u.getSize(); i++) { if(u[0]*u[i] <= 0.0) tmp=true; } //if(this->currentStep + 3 < getSubgridValue(subGridID)) //tmp = true; if(tmp) {} //north - 1, east - 2, west - 4, south - 8 else if(boundaryCondition == 4) { for(int i = 0; i < this->n; i++) for(int j = 1;j < this->n; j++) if(fabs(u[i*this->n + j]) < fabs(u[i*this->n])) u[i*this->n + j] = u[i*this->n]; } else if(boundaryCondition == 2) { for(int i = 0; i < this->n; i++) for(int j =0 ;j < this->n -1; j++) if(fabs(u[i*this->n + j]) < fabs(u[(i+1)*this->n - 1])) u[i*this->n + j] = u[(i+1)*this->n - 1]; } else if(boundaryCondition == 1) { for(int j = 0; j < this->n; j++) for(int i = 0;i < this->n - 1; i++) if(fabs(u[i*this->n + j]) < fabs(u[j + this->n*(this->n - 1)])) u[i*this->n + j] = u[j + this->n*(this->n - 1)]; } else if(boundaryCondition == 8) { for(int j = 0; j < this->n; j++) for(int i = 1;i < this->n; i++) if(fabs(u[i*this->n + j]) < fabs(u[j])) u[i*this->n + j] = u[j]; } /**/ Loading @@ -575,8 +686,9 @@ tnlParallelEikonalSolver<Scheme, double, tnlHost, int>::runSubgrid( int boundary double finalTime = this->stopTime;// + 3.0*(u.max() - u.min()); if( time + currentTau > finalTime ) currentTau = finalTime - time; double maxResidue( 0.0 ); while( time < finalTime) double maxResidue( 1.0 ); double lastResidue( 10000.0 ); while( time < finalTime /*|| maxResidue > subMesh.getHx()*/) { /**** * Compute the RHS Loading @@ -591,6 +703,8 @@ tnlParallelEikonalSolver<Scheme, double, tnlHost, int>::runSubgrid( int boundary if( this -> cflCondition * maxResidue != 0.0) currentTau = this -> cflCondition / maxResidue; /*if(maxResidue > lastResidue) currentTau *=(1.0/10.0);*/ if( time + currentTau > finalTime ) currentTau = finalTime - time; Loading @@ -611,8 +725,9 @@ tnlParallelEikonalSolver<Scheme, double, tnlHost, int>::runSubgrid( int boundary //cout << '\r' << flush; //cout << maxResidue << " " << currentTau << " @ " << time << flush; lastResidue = maxResidue; } //cout << "Time: " << time << ", Res: " << maxResidue <<endl; /*if (u.max() > 0.0) this->stopTime /=(double) this->gridCols;*/ Loading