Giter VIP home page Giter VIP logo

foam-fsi's Introduction

FOAM-FSI

wercker status

Travis CI status

Features

  • Partitioned Fluid-Structure Interaction solvers build with standard foam-extend fluid and solid solvers.

  • Algorithms for strongly coupled FSI: Aitken under relaxation, IQN-ILS or Anderson acceleration, manifold mapping acceleration, and space mapping acceleration.

  • Consistent first and second order time integration schemes for incompressible flow, structural dynamics and FSI.

  • Efficient implementation of mesh motion solver based on radial basis function interpolation.

  • Run fluid-structure-acoustics simulations with the coupling tool preCICE.

  • Block-coupled transient incompressible flow solver.

  • Arbitrary high order time discretization for incompressible flow, solid mechanics and FSI simulations.

  • Adaptive radial basis mesh deformation based on coarsening of the boundary points.

  • Tested on high performance computing systems, i.e. the SuperMUC Petascale System located in Munich. Scalability results show good scaling until approximately 2000 MPI ranks.

Installation

First, compile foam-extend-3.2. A detailed description for the compilation of foam-extend-3.2 can be found here: https://openfoamwiki.net/index.php/Installation/Linux/foam-extend-3.2. Clone the repository as follows:

git clone git://git.code.sf.net/p/foam-extend/foam-extend-3.2

It is highly advised to the use the system installed gcc (>= 4.8) and OpenMPI library for foam-extend and FOAM-FSI. This is due to the fact that the bundled OpenMPI version of foam-extend disables the fortran compiler, and a set of MPI routines which are needed when running a fluid-structure-acoustics simulation with preCICE.

On Ubuntu, the following environment variables should be set before compiling foam-extend-3.2:

# Use the system installed libraries
export PARAVIEW_SYSTEM=1
export CUDA_IGNORE=1
export SWAK4FOAM_SYSTEM=1
export WM_MPLIB=SYSTEMOPENMPI
export OPENMPI_DIR=/usr
export OPENMPI_BIN_DIR=$OPENMPI_DIR/bin

With this grep command, you can ensure that the mpicxx compiler is used during compilation:

sed -i s/"CC          = g++ -m64"/"CC          = mpicxx -m64"/g foam-extend-3.2/wmake/rules/linux64Gcc/c++

In case foam-extend is installed in a non-standard location, the environment variable $FOAM_INST_DIR needs to be set to the directory where foam-extend-3.2 is present. So if foam-extend-3.2 is installed at /home/davidblom/foam-extend-3.2, then set $FOAM_INST_DIR to /home/davidblom like this:

export FOAM_INST_DIR=/home/davidblom

You can make a distinction between a debug build and a release build. Generally, it is advised to first setup a test case with a debug build, and then do the production run with the production build. By default, foam-extend is configured to build the release version. With the environment variable WM_COMPILE_OPTION you can switch between debug and release builds. So for a debug build:

export WM_COMPILE_OPTION=Debug

and for a release build:

export WM_COMPILE_OPTION=Opt

For optimal performance of the production run, it is advised to add the NDEBUG compiler flag in order to disable all assertions as follows:

sed -i s/"c++OPT      = -O3"/"c++OPT      = -O3 -DNDEBUG"/g foam-extend-3.2/wmake/rules/linux64Gcc/c++Opt

Finally, the compilation process of foam-extend is started with

cd foam-extend-3.2
source etc/bashrc
./Allwmake.firstInstall

To compile the FOAM-FSI library:

git clone --recursive https://github.com/davidsblom/FOAM-FSI.git
cd FOAM-FSI
./Allwmake.firstInstall

The first time the library is compiled, use the Allwmake_firstInstall script which installs the necessary settings in foam-extend-3.2/etc/prefs.sh, and compiles several third party packages. Thereafter, you can use the Allwmake script.

Prerequisites

gcc 4.8 or higher due to C++11 features. The gfortran compiler is used for the compilation of the deal.II library, and is therefore also needed.

MPI: in case the OpenMPI library is used, at least version 1.10 is required by the linear algebra package elemental. Note that foam-extend also needs to be compiled with the same version. The environment variable OPENMPI_DIR as noted above also needs to point to the location where the correct version of OpenMPI is installed.

OS: Currently only Linux based distributions are supported, patches for other operating systems are welcome.

list of needed packages: scons, openblas (libopenblas-dev on Ubuntu)

Test suite

Multiple test suite executables are available implementing a large number of unit and functional tests within the googletest framework. In case you run into problems with the FSI solver, preferably run the test suite and attach a log of the test results to your bug report. The following test suites are available:

  • testsuite-dealii
  • testsuite-fsi
  • testsuite-rbf
  • testsuite-sdc
  • testsuite-sdc-fsi
  • testsuite-spacemapping

To run one set of tests:

testsuite-fsi

Credits

The FOAM-FSI project has been started by David Blom. Many other people have also contributed. Here is an alphabetical list:

Philip Cardiff
Thijs Gillebaart
Eline ter Hofstede
Vahid Kazemi-Kamyab

foam-fsi's People

Contributors

davidsblom avatar eterhofstede avatar screambeard avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

foam-fsi's Issues

RBFMeshMotionSolver: perform the greedy algorithm in parallel

idea of @thijsgillebaart:

  1. Perform the interpolation procedure and error estimation in parallel. The control points for the interpolation are the same on each processor. The positions to be interpolated to are different on each processor, and are the local face centers.
  2. Broadcast the error and the position with the largest error. The residuals list is generated.
  3. Select the point with the largest error, and add this to the selected points.

precice: initialize data on the interface for parallel coupling with ateles

email from verena:

For explicit timestepping, where you need to exchange in every timestep, the correct boundary condition at the interface is important! If you don't write data to precice in the init, the solver reads 0 from precice and the results of the first timestep is wrong ( for me, sometimes it also crashes since p=0 where actually p=10000 yield NAN calculation)

RBFMeshMotionSolver: add parameter fixedPatches

The displacement of the vertices of the staticPatches are manually set to zero. Add a list of fixedPatches for which the displacement is interpolated, i.e. zero displacement on the faces is interpolated to the vertices.

preCICE FSI solver

  1. compare a preCICE simulation with fsiFoam with the 3dTube test case.
  2. Move the call to moveMesh() from foamFluidSolver::setDisplacementLocal() to PreciceFluidSolver::run()

mapMesh

Create a mapMesh utility which reads the displacement of the solid domain, and applies this displacement to the fluid mesh. Thereafter, save this displacement to disk in order to read this displacement at the start of the simulation.

SDC use convergence tolerance for implicit solves

example code of ESDIRK scheme:

volVectorField resU = -(1 / _imA[k][k]) * fvc::ddt( U ) + fvc::laplacian( nu, U ) - fvc::div( phi, U ) - fvc::grad( p ) + 1 / _imA[k][k] * sumStageResidual;

scalarField magResU = mag( resU.internalField() );
momentumResidual = ::sqrt( sum( sqr( magResU ) ) / mesh.nCells() );

bool convergence = momentumResidual <= convTol;

labelList convergenceList( Pstream::nProcs(), 0 );
convergenceList[Pstream::myProcNo()] = convergence;
reduce( convergenceList, sumOp<labelList>() );

convergence = min( convergenceList );

Info << "root mean square residual norm = " << momentumResidual << ", tolerance = " << convTol;
Info << ", convergence = ";

if ( convergence )
  Info << "true";
else
  Info << "false";

Info << endl;

if ( convergence )
  break;

Manifold mapping: implement an interpolation method between a 1d and 3d code

Task: implement an interpolation method between the 1d code for the tube flow FSI test case and the 3d Navier-Stokes solver.
The idea is to use the 1d solver to accelerate the convergence of the 3d FSI solver for the tube flow test case.
The development of this functionality will only be available in a separate branch tubeflow-1d-3d, and not be merged to the master branch.

Manifold mapping with 3 levels: large number of fine model iterations

The fluid and solid solvers are already converged up to machine tolerance, but the manifold mapping iterations are not. An excerpt of a log file of the 3dTube test case:

Time = 0.0066, iteration = 1, level = 1
Solve fluid domain
BiCGStab:  Solving for Up, Initial residual = (3.29293e-17 3.94544e-17 2.31537e-16 3.74489e-17), Final residual = (1.76859e-17 1.99345e-17 1.79129e-17 2.06413e-17), No Iterations 5
BiCGStab:  Solving for Up, Initial residual = (3.34161e-16 3.55892e-16 4.24103e-16 6.44722e-17), Final residual = (1.73116e-18 1.73226e-18 1.648e-18 2.06298e-18), No Iterations 5
BiCGStab:  Solving for Up, Initial residual = (1.55044e-16 1.75201e-16 3.30495e-16 7.05358e-17), Final residual = (1.23175e-18 1.21964e-18 1.13944e-18 1.40031e-18), No Iterations 5
Solving for Up, Initial residual = 2.31537e-16, Final residual = 3.30495e-16, No outer iterations = 3
time step continuity errors : sum local = 1.94402e-18, global = 7.29156e-21, cumulative = -3.6381e-13
runtime = 0.17 s
average runtime = 0.318654 s
total runtime = 8233.69 s
Solve solid domain
Solving for U, Initial residual = 1.93332e-15, Final residual = 1.93332e-15, No outer iterations 0
runtime = 0.01 s
average runtime = 0.0204319 s
total runtime = 527.941 s
min iteration convergence measure: #it = 1 of 1, conv = true
relative convergence measure: two-norm diff = 0, limit = 9.5549e-09, conv = true
All converged

Time = 0.0066, iteration = 2, level = 1
Solve fluid domain
BiCGStab:  Solving for Up, Initial residual = (4.91373e-17 5.3566e-17 2.72578e-16 3.99232e-17), Final residual = (9.96037e-19 9.92349e-19 1.02335e-18 1.09952e-18), No Iterations 5
BiCGStab:  Solving for Up, Initial residual = (4.46073e-17 5.00284e-17 2.67466e-16 3.80326e-17), Final residual = (8.8987e-19 8.93842e-19 8.70143e-19 9.7926e-19), No Iterations 5
BiCGStab:  Solving for Up, Initial residual = (4.30096e-17 4.52048e-17 2.56103e-16 3.82921e-17), Final residual = (5.5446e-19 5.78717e-19 5.26587e-19 6.53819e-19), No Iterations 5
Solving for Up, Initial residual = 2.72578e-16, Final residual = 2.56103e-16, No outer iterations = 3
time step continuity errors : sum local = 1.95636e-18, global = 9.80706e-21, cumulative = -3.6381e-13
runtime = 0.16 s
average runtime = 0.318647 s
total runtime = 8233.85 s
Solve solid domain
Solving for U, Initial residual = 1.9464e-15, Final residual = 1.9464e-15, No outer iterations 0
runtime = 0.01 s
average runtime = 0.0204315 s
total runtime = 527.951 s

Time = 0.0066, iteration = 133, level = 2
Solve fluid domain
BiCGStab:  Solving for Up, Initial residual = (1.40557e-13 1.33763e-13 3.61489e-15 3.48316e-14), Final residual = (2.52696e-15 2.55136e-15 1.9036e-15 5.85339e-15), No Iterations 5
BiCGStab:  Solving for Up, Initial residual = (4.75592e-14 4.69653e-14 2.23402e-15 3.96292e-14), Final residual = (9.98382e-16 1.02703e-15 7.72781e-16 2.35533e-15), No Iterations 5
BiCGStab:  Solving for Up, Initial residual = (2.79412e-14 2.94418e-14 1.57002e-15 1.22542e-14), Final residual = (8.13957e-15 8.12176e-15 6.00566e-15 1.84811e-14), No Iterations 5
Solving for Up, Initial residual = 1.40557e-13, Final residual = 2.94418e-14, No outer iterations = 3
time step continuity errors : sum local = 4.63249e-16, global = 1.21308e-17, cumulative = 1.64197e-11
runtime = 1.85 s
average runtime = 4.62109 s
total runtime = 59787.7 s
Solve solid domain
Solving for U, Initial residual = 1.13374e-14, Final residual = 1.13374e-14, No outer iterations 0
runtime = 0.05 s
average runtime = 0.187119 s
total runtime = 2420.94 s
min iteration convergence measure: #it = 133 of 1, conv = true
relative convergence measure: two-norm diff = 0.00860931, limit = 1.24669e-08, conv = false

RBF coarsening: add parameter to coarsening class to optionally keep track of the values

The values are added at each call to rbf->interpolate(). In order to be able to reuse the realtime selection functionality, the addition should be optionally. The goal is to reuse the live selection for the interpolation between the fluid and the structure.
Early tests showed the computational efficiency of the selection based on the actual values.

OSM-1: assertion error

PBS Job Id: 6663.hpc12.hpc 
Job Name: cylinderFlap_FSI3_spaceMapping_11_typeh_nbLevels_2_fsiFoam_output-space-mapping_parallel_False_reuse_0_sync_True_order_1 
Exec host: n12-14/12+n12-14/13+n12-14/14+n12-14/15 
Execution terminated 
Exit_status=134 resources_used.cput=24:15:38 resources_used.mem=435580kb resources_used.vmem=2250744kb resources_used.walltime=06:03:59 
Error_Path: hpc12:/home/davidblom/Research/OpenFOAM/testcases/cylinderFlap_FSI3_spaceMapping_11/cylinderFlap_FSI3_spaceMapping_11_typeh_nbLevels_2_fsiFoam_output-space-mapping_parallel_False_reuse_0_sync_True_order_1/qsub.${PBS_JOBID}.log 
Output_Path: hpc12:/home/davidblom/Research/OpenFOAM/testcases/cylinderFlap_FSI3_spaceMapping_11/cylinderFlap_FSI3_spaceMapping_11_typeh_nbLevels_2_fsiFoam_output-space-mapping_parallel_False_reuse_0_sync_True_order_1/qsub.${PBS_JOBID}.log 
Solve solid domain
fsiFoam: OutputSpaceMapping.C:162: virtual void fsi::OutputSpaceMapping::performPostProcessing(const vector&, const vector&, fsi::vector&, bool): Assertion `sols.size() == fineResiduals.size()' failed.
[n12-14:13419] *** Process received signal ***
[n12-14:13419] Signal: Aborted (6)
[n12-14:13419] Signal code:  (-6)
fsiFoam: OutputSpaceMapping.C:162: virtual void fsi::OutputSpaceMapping::performPostProcessing(const vector&, const vector&, fsi::vector&, bool): Assertion `sols.size() == fineResiduals.size()' failed.
[n12-14:13421] *** Process received signal ***
[n12-14:13421] Signal: Aborted (6)
[n12-14:13421] Signal code:  (-6)
fsiFoam: OutputSpaceMapping.C:162: virtual void fsi::OutputSpaceMapping::performPostProcessing(const vector&, const vector&, fsi::vector&, bool): Assertion `sols.size() == fineResiduals.size()' failed.
[n12-14:13410] *** Process received signal ***
[n12-14:13410] Signal: Aborted (6)
[n12-14:13410] Signal code:  (-6)
fsiFoam: OutputSpaceMapping.C:162: virtual void fsi::OutputSpaceMapping::performPostProcessing(const vector&, const vector&, fsi::vector&, bool): Assertion `sols.size() == fineResiduals.size()' failed.
[n12-14:13414] *** Process received signal ***
[n12-14:13414] Signal: Aborted (6)
[n12-14:13414] Signal code:  (-6)
Solving for U, Initial residual = 0.85349366, Final residual = 9.3724422e-12, No outer iterations 415
runtime = 0.47999999 s
average runtime = 0.66628706 s
total runtime = 134.58998 s
min iteration convergence measure: #it = 2 of 1, conv = true
relative convergence measure: two-norm diff = 6.815587e-09, limit = 5.9845209e-13, conv = false
[n12-14:13410] [ 0] /lib64/libc.so.6(+0x326a0) [0x2b71fd23e6a0]

RBFMeshMotionSolver: use PETSc for the matrix inversion of the RBF interpolation

The matrix inversion step is the most expensive step of the greedy algorithm for the RBF mesh motion solver. Current implementations only allow for a serial execution of the RBF interpolation.

PETSc has the ability to create distributed matrices and vectors, and provides interfaces to parallel LU decomposition implementations.

The best approach would be to reimplement the radial basis function interpolation class with PETSc, and use it thereafter for the RBF mesh motion solver. The RBFCoarsening class needs to be reimplemented as well.

Manual of PETSc: http://www.mcs.anl.gov/petsc/petsc-current/docs/manual.pdf

Output space mapping: assertion error

fsiFoam: OutputSpaceMapping.C:49: virtual void fsi::OutputSpaceMapping::finalizeTimeStep(): Assertion `solsTimeList.size() == coarseResidualsTimeList.size()' failed.

Allwmake.firstInstall does not compile consistent at first go.

Bashrc file of foam must be reloaded before compiling the consistent solvers. Kinda hard to make this work well. At the beginning a warning is given that you must reload foam extend 3.1 again before compiling, but script continues and does not compile everything correctly. Make a install script and compile script? Install needs to be run ones and compile is for compilation. A bit like configure and make with normal programs?

formatting C++ code of the consistent solvers

@thijsgillebaart I try to be consistent with the code structure. Note whether you're familiar with it, but the tool uncrustify is quite handy in formatting code consistently.

How to use uncrustify:

uncrustify --no-backup -c uncrustify.cfg -l CPP src/fsi/*.C src/fsi/*.H

My uncrustify.cfg configuration file:

# Uncrustify 0.59
newlines                                 = auto
input_tab_size                           = 8
output_tab_size                          = 8
string_escape_char                       = 92
string_escape_char2                      = 0
tok_split_gte                            = false
utf8_bom                                 = ignore
utf8_byte                                = false
utf8_force                               = false
indent_columns                           = 2
indent_continue                          = 2
indent_with_tabs                         = 0
indent_cmt_with_tabs                     = false
indent_align_string                      = false
indent_xml_string                        = 0
indent_brace                             = 0
indent_braces                            = false
indent_braces_no_func                    = false
indent_braces_no_class                   = false
indent_braces_no_struct                  = false
indent_brace_parent                      = false
indent_namespace                         = true
indent_namespace_level                   = 2
indent_namespace_limit                   = 0
indent_extern                            = false
indent_class                             = true
indent_class_colon                       = false
indent_ctor_init                         = 0
indent_else_if                           = false
indent_var_def_blk                       = 0
indent_var_def_cont                      = true
indent_func_call_param                   = false
indent_func_def_param                    = false
indent_func_proto_param                  = false
indent_func_class_param                  = false
indent_func_ctor_var_param               = false
indent_template_param                    = false
indent_func_param_double                 = false
indent_func_const                        = 0
indent_func_throw                        = 0
indent_member                            = 0
indent_sing_line_comments                = 0
indent_relative_single_line_comments     = false
indent_switch_case                       = 0
indent_case_shift                        = 0
indent_case_brace                        = 0
indent_col1_comment                      = true
indent_label                             = 1
indent_access_spec                       = 1
indent_access_spec_body                  = false
indent_paren_nl                          = false
indent_paren_close                       = 0
indent_comma_paren                       = false
indent_bool_paren                        = false
indent_first_bool_expr                   = false
indent_square_nl                         = false
indent_preserve_sql                      = false
indent_align_assign                      = true
sp_arith                                 = force
sp_assign                                = force
sp_assign_default                        = force
sp_before_assign                         = force
sp_after_assign                          = force
sp_enum_assign                           = force
sp_enum_before_assign                    = ignore
sp_enum_after_assign                     = ignore
sp_pp_concat                             = force
sp_pp_stringify                          = remove
sp_bool                                  = force
sp_compare                               = force
sp_inside_paren                          = remove
sp_paren_paren                           = force
sp_balance_nested_parens                 = true
sp_paren_brace                           = force
sp_before_ptr_star                       = force
sp_before_unnamed_ptr_star               = ignore
sp_between_ptr_star                      = remove
sp_after_ptr_star                        = force
sp_after_ptr_star_func                   = ignore
sp_before_ptr_star_func                  = ignore
sp_before_byref                          = force
sp_before_unnamed_byref                  = ignore
sp_after_byref                           = force
sp_after_byref_func                      = ignore
sp_before_byref_func                     = ignore
sp_after_type                            = force
sp_template_angle                        = ignore
sp_before_angle                          = ignore
sp_inside_angle                          = ignore
sp_after_angle                           = ignore
sp_angle_paren                           = ignore
sp_angle_word                            = ignore
sp_angle_shift                           = force
sp_before_sparen                         = force
sp_inside_sparen                         = force
sp_inside_sparen_close                   = ignore
sp_after_sparen                          = ignore
sp_sparen_brace                          = ignore
sp_invariant_paren                       = ignore
sp_after_invariant_paren                 = ignore
sp_special_semi                          = remove
sp_before_semi                           = remove
sp_before_semi_for                       = remove
sp_before_semi_for_empty                 = remove
sp_after_semi                            = force
sp_after_semi_for                        = force
sp_after_semi_for_empty                  = ignore
sp_before_square                         = ignore
sp_before_squares                        = ignore
sp_inside_square                         = remove
sp_after_comma                           = force
sp_before_comma                          = remove
sp_paren_comma                           = force
sp_before_ellipsis                       = ignore
sp_after_class_colon                     = force
sp_before_class_colon                    = force
sp_before_case_colon                     = remove
sp_after_operator                        = ignore
sp_after_operator_sym                    = ignore
sp_after_cast                            = ignore
sp_inside_paren_cast                     = ignore
sp_cpp_cast_paren                        = remove
sp_sizeof_paren                          = remove
sp_after_tag                             = ignore
sp_inside_braces_enum                    = ignore
sp_inside_braces_struct                  = ignore
sp_inside_braces                         = ignore
sp_inside_braces_empty                   = ignore
sp_type_func                             = ignore
sp_func_proto_paren                      = remove
sp_func_def_paren                        = remove
sp_inside_fparens                        = remove
sp_inside_fparen                         = force
sp_square_fparen                         = remove
sp_fparen_brace                          = ignore
sp_func_call_paren                       = remove
sp_func_call_paren_empty                 = ignore
sp_func_call_user_paren                  = ignore
sp_func_class_paren                      = ignore
sp_return_paren                          = ignore
sp_attribute_paren                       = ignore
sp_defined_paren                         = ignore
sp_throw_paren                           = ignore
sp_catch_paren                           = ignore
sp_version_paren                         = ignore
sp_scope_paren                           = ignore
sp_macro                                 = ignore
sp_macro_func                            = ignore
sp_else_brace                            = ignore
sp_brace_else                            = ignore
sp_brace_typedef                         = ignore
sp_catch_brace                           = ignore
sp_brace_catch                           = ignore
sp_finally_brace                         = ignore
sp_brace_finally                         = ignore
sp_try_brace                             = ignore
sp_getset_brace                          = ignore
sp_before_dc                             = remove
sp_after_dc                              = remove
sp_d_array_colon                         = ignore
sp_not                                   = remove
sp_inv                                   = remove
sp_addr                                  = remove
sp_member                                = remove
sp_deref                                 = remove
sp_sign                                  = remove
sp_incdec                                = remove
sp_before_nl_cont                        = force
sp_after_oc_scope                        = ignore
sp_after_oc_colon                        = ignore
sp_before_oc_colon                       = ignore
sp_after_send_oc_colon                   = ignore
sp_before_send_oc_colon                  = ignore
sp_after_oc_type                         = ignore
sp_after_oc_return_type                  = ignore
sp_after_oc_at_sel                       = ignore
sp_after_oc_at_sel_parens                = ignore
sp_inside_oc_at_sel_parens               = ignore
sp_before_oc_block_caret                 = ignore
sp_after_oc_block_caret                  = ignore
sp_cond_colon                            = ignore
sp_cond_question                         = ignore
sp_case_label                            = ignore
sp_range                                 = ignore
sp_cmt_cpp_start                         = force
sp_endif_cmt                             = ignore
sp_after_new                             = ignore
sp_before_tr_emb_cmt                     = ignore
sp_num_before_tr_emb_cmt                 = 0
align_keep_tabs                          = false
align_with_tabs                          = false
align_on_tabstop                         = false
align_number_left                        = false
align_func_params                        = false
align_same_func_call_params              = false
align_var_def_span                       = 0
align_var_def_star_style                 = 0
align_var_def_amp_style                  = 0
align_var_def_thresh                     = 0
align_var_def_gap                        = 0
align_var_def_colon                      = false
align_var_def_attribute                  = false
align_var_def_inline                     = false
align_assign_span                        = 0
align_assign_thresh                      = 0
align_enum_equ_span                      = 0
align_enum_equ_thresh                    = 0
align_var_struct_span                    = 0
align_var_struct_thresh                  = 0
align_var_struct_gap                     = 0
align_struct_init_span                   = 0
align_typedef_gap                        = 0
align_typedef_span                       = 0
align_typedef_func                       = 0
align_typedef_star_style                 = 0
align_typedef_amp_style                  = 0
align_right_cmt_span                     = 0
align_right_cmt_mix                      = false
align_right_cmt_gap                      = 0
align_right_cmt_at_col                   = 0
align_func_proto_span                    = 0
align_func_proto_gap                     = 0
align_on_operator                        = false
align_mix_var_proto                      = false
align_single_line_func                   = false
align_single_line_brace                  = false
align_single_line_brace_gap              = 0
align_oc_msg_spec_span                   = 0
align_nl_cont                            = false
align_pp_define_gap                      = 0
align_pp_define_span                     = 0
align_left_shift                         = true
align_oc_msg_colon_span                  = 0
align_oc_decl_colon                      = false
nl_collapse_empty_body                   = true
nl_assign_leave_one_liners               = false
nl_class_leave_one_liners                = false
nl_enum_leave_one_liners                 = false
nl_getset_leave_one_liners               = false
nl_func_leave_one_liners                 = false
nl_if_leave_one_liners                   = false
nl_start_of_file                         = force
nl_start_of_file_min                     = 1
nl_end_of_file                           = force
nl_end_of_file_min                       = 1
nl_assign_brace                          = ignore
nl_assign_square                         = ignore
nl_after_square_assign                   = ignore
nl_func_var_def_blk                      = 0
nl_fcall_brace                           = ignore
nl_enum_brace                            = ignore
nl_struct_brace                          = ignore
nl_union_brace                           = ignore
nl_if_brace                              = force
nl_brace_else                            = force
nl_elseif_brace                          = force
nl_else_brace                            = force
nl_else_if                               = force
nl_brace_finally                         = force
nl_finally_brace                         = force
nl_try_brace                             = force
nl_getset_brace                          = ignore
nl_for_brace                             = force
nl_catch_brace                           = force
nl_brace_catch                           = force
nl_while_brace                           = force
nl_using_brace                           = ignore
nl_brace_brace                           = ignore
nl_do_brace                              = force
nl_brace_while                           = force
nl_switch_brace                          = force
nl_multi_line_cond                       = false
nl_multi_line_define                     = false
nl_before_case                           = false
nl_before_throw                          = ignore
nl_after_case                            = false
nl_case_colon_brace                      = ignore
nl_namespace_brace                       = ignore
nl_template_class                        = ignore
nl_class_brace                           = force
nl_class_init_args                       = ignore
nl_func_type_name                        = ignore
nl_func_type_name_class                  = ignore
nl_func_scope_name                       = ignore
nl_func_proto_type_name                  = ignore
nl_func_paren                            = remove
nl_func_def_paren                        = ignore
nl_func_decl_start                       = force
nl_func_def_start                        = force
nl_func_decl_start_single                = remove
nl_func_def_start_single                 = remove
nl_func_decl_args                        = force
nl_func_def_args                         = force
nl_func_decl_end                         = force
nl_func_def_end                          = force
nl_func_decl_end_single                  = remove
nl_func_def_end_single                   = remove
nl_func_decl_empty                       = remove
nl_func_def_empty                        = remove
nl_fdef_brace                            = force
nl_after_return                          = false
nl_return_expr                           = ignore
nl_after_semicolon                       = true
nl_after_brace_open                      = true
nl_after_brace_open_cmt                  = false
nl_after_vbrace_open                     = false
nl_after_vbrace_open_empty               = false
nl_after_brace_close                     = false
nl_after_vbrace_close                    = false
nl_define_macro                          = false
nl_squeeze_ifdef                         = false
nl_before_if                             = force
nl_after_if                              = force
nl_before_for                            = force
nl_after_for                             = force
nl_before_while                          = force
nl_after_while                           = force
nl_before_switch                         = force
nl_after_switch                          = force
nl_before_do                             = force
nl_after_do                              = force
nl_ds_struct_enum_cmt                    = false
nl_ds_struct_enum_close_brace            = false
nl_class_colon                           = ignore
nl_create_if_one_liner                   = false
nl_create_for_one_liner                  = false
nl_create_while_one_liner                = false
pos_arith                                = ignore
pos_assign                               = ignore
pos_bool                                 = ignore
pos_compare                              = ignore
pos_conditional                          = ignore
pos_comma                                = ignore
pos_class_comma                          = ignore
pos_class_colon                          = ignore
code_width                               = 0
ls_for_split_full                        = false
ls_func_split_full                       = false
nl_max                                   = 0
nl_after_func_proto                      = 2
nl_after_func_proto_group                = 2
nl_after_func_body                       = 2
nl_after_func_body_class                 = 2
nl_after_func_body_one_liner             = 2
nl_before_block_comment                  = 2
nl_before_c_comment                      = 2
nl_before_cpp_comment                    = 2
nl_after_multiline_comment               = true
nl_after_struct                          = 0
nl_after_class                           = 2
nl_before_access_spec                    = 2
nl_after_access_spec                     = 2
nl_comment_func_def                      = 1
nl_after_try_catch_finally               = 1
nl_around_cs_property                    = 1
nl_between_get_set                       = 1
nl_property_brace                        = ignore
eat_blanks_after_open_brace              = true
eat_blanks_before_close_brace            = true
mod_full_brace_do                        = ignore
mod_full_brace_for                       = ignore
mod_full_brace_function                  = ignore
mod_full_brace_if                        = ignore
mod_full_brace_if_chain                  = false
mod_full_brace_nl                        = 0
mod_full_brace_while                     = ignore
mod_full_brace_using                     = ignore
mod_paren_on_return                      = ignore
mod_pawn_semicolon                       = false
mod_full_paren_if_bool                   = false
mod_remove_extra_semicolon               = false
mod_add_long_function_closebrace_comment = 0
mod_add_long_switch_closebrace_comment   = 0
mod_add_long_ifdef_endif_comment         = 0
mod_add_long_ifdef_else_comment          = 0
mod_sort_import                          = false
mod_sort_using                           = false
mod_sort_include                         = false
mod_move_case_break                      = false
mod_case_brace                           = ignore
mod_remove_empty_return                  = true
cmt_width                                = 0
cmt_reflow_mode                          = 2
cmt_indent_multi                         = true
cmt_c_group                              = true
cmt_c_nl_start                           = true
cmt_c_nl_end                             = true
cmt_cpp_group                            = true
cmt_cpp_nl_start                         = true
cmt_cpp_nl_end                           = true
cmt_cpp_to_c                             = false
cmt_star_cont                            = true
cmt_sp_before_star_cont                  = 0
cmt_sp_after_star_cont                   = 0
cmt_multi_check_last                     = true
cmt_insert_file_header                   = ""
cmt_insert_file_footer                   = ""
cmt_insert_func_header                   = ""
cmt_insert_class_header                  = ""
cmt_insert_oc_msg_header                 = ""
cmt_insert_before_preproc                = false
pp_indent                                = force
pp_indent_at_level                       = true
pp_indent_count                          = 1
pp_space                                 = ignore
pp_space_count                           = 0
pp_indent_region                         = 0
pp_region_indent_code                    = false
pp_indent_if                             = 0
pp_if_indent_code                        = false
pp_define_at_level                       = false

Allow to use multiple patches for FSI

Use the cylinder flap benchmark as a test case. Currently, the flap consists of one patch, split it into three patches in order to test the functionality.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.