# Fluid Structure Interaction - Workflow

Fluid-Structure Interaction involves working with two different software's, OptiStruct (the structural solver) and AcuSolve (the fluid solver).

Models in both OptiStruct and AcuSolve will be set up separately. The following workflow is strongly recommended for running FSI simulations:
1. Develop the OptiStruct structural model and the AcuSolve-only fluid model, and ensure that the uncoupled analyses run successfully on the corresponding solver.
2. After each model runs successfully, identify the fluid-structure interface, and include FSI commands to the individual standalone models (see corresponding sections below).
3. Run the coupled analysis.
4. Post-process the FSI solution (Output).

This workflow ensures that both the OptiStruct and the AcuSolve models are defined properly prior to performing a coupled simulation. OptiStruct and AcuSolve do not require that the analysis be run with a particular unit system, but both analyses require you to use a consistent unit system. As a rule, all quantities exchanged between the two solvers will be in dimensional form, and the components of all vector quantities will be resolved in the inertial frame. For consistency, identical inertial frames must be selected for OptiStruct and AcuSolve.

## OptiStruct Model

Preparing the OptiStruct model for FSI involves the following recommendations:
1. Create an OptiStruct input file.
2. Identify the interface region and the solution variables exchanged between OptiStruct and AcuSolve (this depends on the type of coupled solution you are running, for example, SFSI or TFSI. For SFSI, the nodal displacements are provided as input to AcuSolve, which in turn provides pressure as input to OptiStruct).
3. Define the port number to be used by OptiStruct and AcuSolve for communication. The OptiStruct input data is described by the FSI Bulk Data Entry (which is referenced by the FSI Subcase Information Entry). Each of the data fields are discussed below in their relevant sections.

## AcuSolve Model

This section provides an overview for preparing the AcuSolve model for FSI. For detailed information on the commands, refer to the AcuSolve Command Reference Manual. The recommendations to prepare the AcuSolve model are:
1. Create an AcuSolve input file.
2. Set the analysis parameters to include an external field.
3. Define the solution strategy.
4. Define the external surface definition.

## Set Analysis Parameters to Include an External Field

In the AcuSolve model, use the EQUATION command to specify the solution fields available or the system of equation that are present in the problem.

To include a field that is computed with an external solver, for OptiStruct, set the external_code parameter to ON.
EQUATION {
flow= <flow type>
mesh= <mesh type>
external_code= on
}

The mesh parameter determines the type of mesh at the interface. This depends on the type of information exchanged at the interface and the boundary conditions. For Thermal FSI, currently, only heat transfer is supported, and therefore, this parameter should be set to Eulerian since the mesh is fixed. For Structural FSI, there is an exchange of displacements and pressure at the interface and in addition, mesh displacement and velocity boundary conditions are present. Therefore, the mesh parameter should be set to Arbitrary Lagrangian Eulerian. For more information on boundary conditions at the interface, refer to Fluid-Structure Interface.

## Fluid-Structure Interface

### Structure

The structural interface of the solid model that is in contact with the fluid domain is known as a damp surface. The damp surface of the structural mesh must be selected in the OptiStruct input data (FSI Bulk Data Entry). The damp surface can either be specified by a surface (SURFID field) or a group of elements (ELSET field). The structural mesh on the damp surface does not have to match the interfacing fluid mesh. AcuSolve will internally project the flow variables (pressure for SFSI, heat flux for TFSI) from the fluid interface mesh onto a non-matching damp surface structural mesh to formulate loading. The mapping of nodal data (pressure or flux) is also supported for structural beam elements. For example, a rod, pipe or blade can be modeled with simple beam elements in the structural mesh. The corresponding fluid mesh will contain the actual three-dimensional geometry of these beam elements.

The damp surface can be specified by a group of elements (ELSET field) or the OptiStruct SURF entry (referenced on the SURFID field). The SURF entry has many options that can be used to specify a surface. The surface can be either the surface of a shell structure or the surface of a solid mesh.
Note: Beam elements cannot be specified using the SURF data. If the damp surface consists of beam elements, then these must be specified as a beam element set.

The matching fluid interface is specified in the AcuSolve data using the EXTERNAL_CODE_SURFACE command. For further information on AcuSolve data, refer to the AcuSolve Command Reference Manual.

### Fluid

Use the EXTERNAL_CODE_SURFACE command to define the interface between the fluid interface and corresponding parameters. The command specifies the surface topology, as well as the interface proprieties.

Depending on the problem being solved (SFSI or TFSI), various parameters are available to define the interface behavior. A few of them that are relevant to the corresponding solution type are discussed in the respective SFSI and TFSI Users Guide pages. For detailed information on the different parameters, refer to the AcuSolve Command Reference Manual.

### Scaling of Quantities

You may apply a multiplier function in AcuSolve to the solution variables (displacement/temperature) from OptiStruct. Scaling fields may be useful when starting a fluid-structure interaction simulation with high inertial effects. Specify a multiplier function on the EXTERNAL_CODE command. An example of ramping multiplier function and its usage:
MULTIPLIER_FUNCTION("ramp" ) {
type= <piecewise_linear>
curve_fit_values= { 1, 0.0 ; 10 , 1 }
curve_fit_variable= time_step
}
EXTERNAL_CODE {
...
multiplier_function
= "ramp"
...
}