diff --git a/documentation/multi_physics.html b/documentation/multi_physics.html index 28551d70..ca385097 100644 --- a/documentation/multi_physics.html +++ b/documentation/multi_physics.html @@ -251,9 +251,36 @@

SimVascular MultiPhysics Tool

-

User Guide

+
+

Introduction

+
+
+

Example 1: Steady Rigid Simulation

+
+

Loading Mesh and Geometry into svMultiPhysics

+

Defining Equations and Fluid Properties

+

Assigning Boundary Conditions

+

Specifying Output Quantities

+

Time Marching Parameters

+

Specifying Output Quantities

+

Linear Solver Parameters

+

Output Control and File Management

+

Running svMultiPhysics from Terminal

+

Checking Simulation during Runtime

+

Checking Simulation Outputs

+
+

Example 2: Unsteady Rigid Simulation with RCR Outlets

+
+

Unsteady Inflow Boundary Conditions

+

RCR Outlet Boundary Conditions

+

Other Parameters

+

Running svMultiPhysics in Parallel

+

Simulation Outputs

+
+

Cardiac electrophysiology

Computational Hemodynamics

@@ -266,7 +293,9 @@

User Guide

Nonlinear Solid Dynamics

- --> + + +
@@ -470,6 +499,63 @@

Appendix

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/documentation/multi_physics/user-guide/cfd/example_1_steady_rigid_simulation/boundary_conditions/readme.md b/documentation/multi_physics/user-guide/cfd/example_1_steady_rigid_simulation/boundary_conditions/readme.md new file mode 100644 index 00000000..c72e0b36 --- /dev/null +++ b/documentation/multi_physics/user-guide/cfd/example_1_steady_rigid_simulation/boundary_conditions/readme.md @@ -0,0 +1,70 @@ + +### Assigning Boundary Conditions + +The next step is to establish the boundary conditions. Boundary conditions specify the solution behavior at the exterior surfaces of the model that will be used to drive the solution. Recall from the `` section that we labeled each of the exterior surfaces according to the .vtp surface mesh files. We can now use these labels to define the boundary conditions. The figure below shows the boundary conditions we wish to specify for this model: + +
+ +
Descending Aorta model with inflow and outflow boundary conditions labeled.
+
+ +Boundary conditions are specified further down in the `` section of the .xml file: + + + + ... + + + Dirichlet + Steady + -100 + Parabolic + true + true + + + + Neumann + Resistance + 2600 + Flat + + + + Neumann + Resistance + 2600 + Flat + + + + Dirichlet + Steady + 0 + Flat + true + + + + Dirichlet + Steady + 0 + Flat + true + + +Notice how there is a separate `` section for each of the surfaces we defined earlier. The inlet face is `cap_aorta` where we wish to specify an inlet flow rate of $100 \ mL/s$. This value of $100 \ mL/s$ is slightly higher than the typical cardiac output of a healthy individual, but we round up for simplicity. Generally, you want to choose the values of your boundary conditions to match the physiologic data of the patient you are simulating. If you do not have data on specific patients, then using population average values is a reasonable assumption. + +Boundary conditions that specify velocity or flow are classified as “Dirichlet” `` boundary conditions. The flow rate at the inlet is not changing with time, so we specify its `` to “Steady”. The `` for this boundary condition is set to $-100$. We use a negative sign for the value here to specify that the flow is going into the domain. A positive flow value would have the flow exiting the domain. The `` setting specifies the spatial profile for the velocity on the face. We set this to “Parabolic” for this case to model the Hagan-Poisuelle solution for flow of a viscous fluid in a pipe. The Hagan-Poisuelle solution has the highest fluid velocity in the center of the vessel and decreases smoothly to a value of zero at the walls. To enforce the no-slip boundary condition at the walls, we set the `` setting to “true”. Finally, to specify that this boundary condition is for the flow (and not velocity), we set the `` setting to “true”. + +Next, we specify the resistance outlet boundary conditions at the two other caps of the model. Resistance outlet boundary conditions assign a pressure that is proportional to the flowrate of blood passing through the face. Resistance outlet boundary conditions are common for vascular simulations to model the vascular resistance of all smaller vessels downstream. This pressure represents the force needed to push a viscous fluid through the microvasculature: + +$$ P = QR $$ + +Where $R$ is the vascular resistance of the vessels downstream of the outlet face. Pressure boundary conditions are considered “Neumann” `` and do not change with time. We specify a resistance outlet boundary condition by assigning “Resistance” in the `` field in the boundary condition. The value of $2600 \ dynes/cm^5$ was chosen to ensure physiologic pressure values within the model. For this example, we assume both outlet resistances are equal. Thus, we can conclude the two outlets will receive roughly equal flow of about $50 \ mL/s$. We assumed an even flow split for simplicity. Later in the User Guide, we will discuss strategies for assigning a more realistic flow split between vessels by adjusting the relative resistances of the outlets. Using the equation above, we can compute the assigned outlet pressure to be: + +$$ P=(50 \ mL/s)*(2600 \ dynes/cm^5)=130000 \ dyne/cm^2 \approx 100 \ mmHg $$ + +$100 \ mmHg$ of pressure is roughly the average blood pressure in a healthy individual. If you have more specific physiologic data on your patient, you will want to choose your boundary condition values to match your patient data. + +The last boundary conditions we need to specify are the wall conditions. This simple simulation assumes the walls are **rigid** which means they are fixed in space. For these cases, we apply the **no slip** boundary condition which states that any fluid in direct contact with the wall will have zero velocity. For both the wall surfaces, we assign them as “Dirichlet” type boundary conditions with a value of $0 \ m/s$. We wish to apply this to the velocity directly, thus the `` setting, which was present for the inlet face, is missing here. \ No newline at end of file diff --git a/documentation/multi_physics/user-guide/cfd/example_1_steady_rigid_simulation/equations/readme.md b/documentation/multi_physics/user-guide/cfd/example_1_steady_rigid_simulation/equations/readme.md new file mode 100644 index 00000000..9965d8c5 --- /dev/null +++ b/documentation/multi_physics/user-guide/cfd/example_1_steady_rigid_simulation/equations/readme.md @@ -0,0 +1,26 @@ + +### Defining Equations and Fluid Properties + +The next step to running an *svMultiPhysics* simulation is to establish the type of equation that will be solved and to define all material properties needed. This is done in the top part of the `` section of the .xml file: + + + + true + + 1 + + 10 + + 1e-4 + + 0.3 + + 1 + + + 0.04 + + +A pure fluids simulation like this example only requires a solution to the “fluid” equation, which is specified in the `` XML command. The fluid equation only requires three properties to be defined: (1) fluid density, (2) fluid viscosity, and (3) backflow stabilization coefficient. The fluid density is assumed to be $1 \ g/cm^3$. Note that all numerical parameters in the .xml file are assumed to be consistent with each other, which should be consistent with the unit of measure established in the mesh. Based on the input mesh data for this example, we are using the CGS unit of measure. The fluid viscosity is defined within its own block where users are also able to select the viscosity model. For this simulation, we use a simple constant viscosity model with a value of $0.04 \ Poise$ for simplicity. Blood flow in the large arteries like this model can be safely assumed to be Newtonian with a constant viscosity. Blood is considered to be a non-Newtonian fluid, but the non-Newtonian behavior is typically only observed in the microvasculature where the diameter of the vessel becomes comparable to the size of the blood cells. The backflow stabilization coefficient is a parameter unique to the *svMultiPhysics* flow solver and should be kept at $0.3$. + +The other parameters in this section specify settings for the nonlinear solution of the fluids governing equations. `` and `` specify how many nonlinear iterations you wish the solver to perform in each timestep. Specifying a larger amount of iterations can help the solver converge on a solution at the cost of additional simulation time. `` defines the threshold for the solution residual needed for the solver to reach convergence. If the solver achieves a solution residual at or below the tolerance, it can move onto the next timestep before reaching the maximum nonlinear iterations. Making the tolerance a smaller number will produce more accurate simulation results at the cost of additional simulation time, and vice-versa for increasing the tolerance. \ No newline at end of file diff --git a/documentation/multi_physics/user-guide/cfd/example_1_steady_rigid_simulation/file_management_and_miscellaneous/readme.md b/documentation/multi_physics/user-guide/cfd/example_1_steady_rigid_simulation/file_management_and_miscellaneous/readme.md new file mode 100644 index 00000000..2865e2e3 --- /dev/null +++ b/documentation/multi_physics/user-guide/cfd/example_1_steady_rigid_simulation/file_management_and_miscellaneous/readme.md @@ -0,0 +1,45 @@ + +### Output Control and File Management + +The final batch of settings that need to be set for a CFD simulation have to do with file management and control. *svMultiPhysics* simulations can produce a lot of output files, so it is important to specify the type and number of output files produced. These settings are located in the `` section at the top of the .xml file: + + + + ... + + results + 10 + 1 + + false + + true + + true + + results + + 10 + + 0.2 + + STOP_SIM + + false + + true + + true + + false + + + +Because of the amount and variety of settings in this section, the most useful and important settings for a general user will be listed below: + +1. `` - This specifies how often you want to save simulation outputs in terms of number of timesteps. Usually, you do not want to save results too often otherwise it will take up too much space and overwhelm a file system. But you also want to have enough time resolution to adequately analyze your results. This setting is more relevant for unsteady cases since for a steady case like this, we only need the results at the final timestep. +2. `` - Allows the simulation to skip saving results for the first few timesteps. Usually, the first few timesteps only contain initial conditions or transient results so you can skip some to save a bit of space. +3. `` - This flag will tell *svMultiPhysics* to save one file that contains time-averaged results. This can be convenient if you wish to perform time averaging across all timesteps in an unsteady simulation. +4. `` - This flag will tell *svMultiPhysics* to automatically convert simulation results to VTK format which is convenient for viewing in Paraview. + +The other settings in this section can be adjusted for more niche cases, but these are the most useful to know for a general *svMultiPhysics* simulation. \ No newline at end of file diff --git a/documentation/multi_physics/user-guide/cfd/example_1_steady_rigid_simulation/intro/readme.md b/documentation/multi_physics/user-guide/cfd/example_1_steady_rigid_simulation/intro/readme.md new file mode 100644 index 00000000..b8a0ff5b --- /dev/null +++ b/documentation/multi_physics/user-guide/cfd/example_1_steady_rigid_simulation/intro/readme.md @@ -0,0 +1,9 @@ + +## Example 1: Steady Fluids Simulation on Descending Aorta with Rigid Walls + +This first example will go through the steps needed to set up a steady fluids simulation on a patient-specific geometry with rigid walls and connect these with the associated commands and settings in the svMultiPhysics .xml file. All conditions in this example are assumed to be steady, meaning that the flowrate of blood coming into the model will be constant as well as all other boundary conditions. Rigid walls mean that the vessel walls are assumed to be fixed with time and thus have zero velocity for the entire simulation. Both of these assumptions are not physiologically consistent with blood flow in a real patient. Flowrates and pressures fluctuate with time due to the pulsatility of cardiac contraction and blood vessel walls are flexible that inflate and deflate along with the oscillating pressures. But we choose to start with the simplest example possible to introduce the process and format of using *svMultiPhysics*. These assumptions will be relaxed in future examples. Even if your goal is to run a more complex simulation, running a steady rigid wall simulation is still useful to help debug other issues with the model or simulation setup. The subject for this example is the following patient-specific model of the descending aorta and iliac arteries. The figure below also includes the names of the exterior surfaces that we will use when assigning boundary conditions: + +
+ +
Descending Aorta model with mesh surfaces labeled.
+
\ No newline at end of file diff --git a/documentation/multi_physics/user-guide/cfd/example_1_steady_rigid_simulation/linear_solver/readme.md b/documentation/multi_physics/user-guide/cfd/example_1_steady_rigid_simulation/linear_solver/readme.md new file mode 100644 index 00000000..0813c40d --- /dev/null +++ b/documentation/multi_physics/user-guide/cfd/example_1_steady_rigid_simulation/linear_solver/readme.md @@ -0,0 +1,25 @@ + +### Linear Solver Parameters + +Next is to specify the parameters of the linear solver. Part of the process of numerically solving the equations of fluid mechanics involves forming a very large system of linear algebraic equations. This system of equations is too large to solve directly, so an approximate numerical solution is required. The type and settings for the linear solver can have dramatic impacts on the performance and accuracy of the simulation. More detailed information about the different linear solvers and their settings included in *svMultiPhysics* can be found ***LINK_TBD***. For this simple example, we cover just the basics to get an idea of what each setting does. Linear solver settings are specified in a subsection in the `` section: + + + + ... + + + 10 + 1e-4 + 50 + 5 + 1e-4 + 500 + 1e-4 + + fsils + + + +This simulation utilizes the specialized “NS” linear solver, which is specialized for rigid wall simulations in *svMultiPhysics*. First, we consider all the “tolerance” parameters which each specify the acceptable amount of error in each stages of the linear solver. The approximate solutions to the linear system can only be solved up to a tolerance. As the value of the tolerance is decreased, the accuracy of the computed solution will increase but it will take more time to solve for the solution. For linear solvers with multiple tolerances like this, using the same tolerance for all steps is recommended. We use a tolerance of 0.0001 for this simulation which gives fairly accurate results for a reasonable cost in cardiovascular settings. + +The number of iterations specifies how many times the linear solver will iterate to find a solution. Linear solver algorithms require several iterations to reach their solution. The more the linear solver is allowed to iterate, the more accurate a solution it can find at additional computational cost. But increasing the number of iterations does not necessarily mean the cost will increase. If the linear solver is able to obtain a solution that satisfies the tolerance criteria before it reaches the maximum iterations, it will cut the iterations short and move to the next step. Increasing the maximum iterations only allows it to iterate more times if it needs to. Unless your simulation is having trouble converging, we recommend keeping the number of iterations at their default values. \ No newline at end of file diff --git a/documentation/multi_physics/user-guide/cfd/example_1_steady_rigid_simulation/mesh/readme.md b/documentation/multi_physics/user-guide/cfd/example_1_steady_rigid_simulation/mesh/readme.md new file mode 100644 index 00000000..b1e71480 --- /dev/null +++ b/documentation/multi_physics/user-guide/cfd/example_1_steady_rigid_simulation/mesh/readme.md @@ -0,0 +1,39 @@ + + +### Loading Mesh and Geometry into svMultiPhysics + +The first step to running an *svMultiPhysics* simulation is to establish your geometry and mesh. You will need a volumetric mesh file (typically .vtu format) that contains the coordinates of all the nodes in the mesh as well as the element connectivity. You will also need separate mesh files for each of the exterior surfaces (typically .vtp format) that will be used to identify regions to apply boundary conditions. In the .xml input file, reading the mesh takes place in the `` section: + + + + demomesh-mesh-complete/mesh-complete.mesh.vtu + + + demomesh-mesh-complete/mesh-surfaces/cap_aorta.vtp + + + + demomesh-mesh-complete/mesh-surfaces/cap_aorta_2.vtp + + + + demomesh-mesh-complete/mesh-surfaces/cap_right_iliac.vtp + + + + demomesh-mesh-complete/mesh-surfaces/wall_aorta.vtp + + + + demomesh-mesh-complete/mesh-surfaces/wall_right_iliac.vtp + + + 0 + + + +First, the .vtu file for the volumetric mesh is loaded using the `` command. This loads in all of the nodal coordinates and connectivities for the mesh nodes and elements. Next, each of the exterior face meshes are loaded with `` commands. These are used to label certain exterior surfaces on the mesh so that we can apply boundary conditions on them later on. Notice how each of these commands references a specific file inside a folder called “mesh-complete”. When running *svMultiPhysics*, it is important that the relative path to the mesh files stays consistent with how they are defined in the .xml file. In other words, if you wish to run the simulation from a different directory on your system, you must move BOTH the .xml file and the folder with all required input files. + +The last command in this section labels this section of the domain as “0”. For a pure fluids simulation, there is only one domain where the fluid resides. In multi-physics problems that have different domains for the solid and fluid, you can label different domains accordingly. + +At this point, we pause to discuss units. The unit system used by *svMultiPhysics* is determined by the units used when creating the geometric model and mesh. To be more specific, the units of the coordinates of all of the nodes in the mesh determine what units you should use for the rest of the parameters in *svMultiPhysics*. For example, if your model and mesh were created using centimeters as the unit of length, then you should use CGS (centimeters-grams-seconds) for all other parameters in *svMultiPhysics*. \ No newline at end of file diff --git a/documentation/multi_physics/user-guide/cfd/example_1_steady_rigid_simulation/outputs/readme.md b/documentation/multi_physics/user-guide/cfd/example_1_steady_rigid_simulation/outputs/readme.md new file mode 100644 index 00000000..c2ae8819 --- /dev/null +++ b/documentation/multi_physics/user-guide/cfd/example_1_steady_rigid_simulation/outputs/readme.md @@ -0,0 +1,14 @@ + +### Specifying Output Quantities + +After the boundary conditions and time marching parameters are specified, the next step is to specify the types of output quantities we would like from the simulation. Different output quantities can be selected based on the information you are aiming to obtain from the simulation. By default, the velocity and pressure fields are output since they are the primary outputs from a fluids simulation. Wall shear stress (WSS) is also a common output for cardiovascular simulations due to its correlation with vascular cell growth and remodeling. The outputs are specified within a subsection of the `` section of the .xml file: + + + + ... + + + true + true + true + diff --git a/documentation/multi_physics/user-guide/cfd/example_1_steady_rigid_simulation/running_svmp/readme.md b/documentation/multi_physics/user-guide/cfd/example_1_steady_rigid_simulation/running_svmp/readme.md new file mode 100644 index 00000000..36b0efb4 --- /dev/null +++ b/documentation/multi_physics/user-guide/cfd/example_1_steady_rigid_simulation/running_svmp/readme.md @@ -0,0 +1,18 @@ + +### Running svMultiPhysics from Terminal + +When the .xml input file is ready, you can run your simulation from the command line terminal by running the *svMultiPhysics* application. If you have installed *svMultiPhysics* from the .deb installation package, the application should be found in the following location: + + /usr/local/sv/svMultiPhysics/2026-06-11/bin/svmultiphysics + +This example uses the version of *svMultiPhysics* published on 2026-06-11. Note that if you installed a different version of *svMultiPhysics*, the path to the executable will have a different date. If you are having trouble locating your *svMultiPhysics* executable, you can try the following command to search for the installation folder: + + ls /usr/local/sv/svMultiPhysics/ + +This should show you the installation folders for the version of *svMultiPhysics* that you have. If you have multiple versions, they should be denoted by their dates. Replace the date in your application path to the appropriate one. After you have identified your *svMultiPhysics* application, you can run the simulation by running it from the folder where the .xml input file is located. Navigate to the folder where your .xml file is, then run the following command: + + [svmultiphysics_executable] [name_of_xml_input_file] + +For example, if your input file were called `demo_simulation.xml` and if you are using the 2026-06-11 version, the command to run the simulation would be: + + /usr/local/sv/svMultiPhysics/2026-06-11/bin/svmultiphysics demo_simulation.xml \ No newline at end of file diff --git a/documentation/multi_physics/user-guide/cfd/example_1_steady_rigid_simulation/runtime/readme.md b/documentation/multi_physics/user-guide/cfd/example_1_steady_rigid_simulation/runtime/readme.md new file mode 100644 index 00000000..ac07940e --- /dev/null +++ b/documentation/multi_physics/user-guide/cfd/example_1_steady_rigid_simulation/runtime/readme.md @@ -0,0 +1,17 @@ + +### Checking Simulation during Runtime + +After launching your simulation, you can check the terminal window to see how it is doing. If the simulation is diverging or taking too long, you can stop the simulation and address any issues instead of waiting until it reaches the end: + +
+ +
Sample Terminal Output when running svMultiPhysics.
+
+ +Each column has different information about the simulation as it progresses. We will list some of the most important columns here and how to interpret them. + +1. NS xx-xx - The first two letters in this column expresses the current equation that is being solved. Since this simulation is purely fluids, the only equation that gets solved is the Navier-Stokes (NS) equation. The next two numbers next to this show the current timestep and the nonlinear iterations within that timestep. The screenshot above reaches convergence in four nonlinear iterations so it moves onto the next timestep instead of going to the maximum of ten. The simulation will reach its conclusion when the timestep reaches the maximum specified under the `` +2. The next number immediately to the right of this column shows the amount of walltime that has elapsed since the simulation began in seconds. The 30th timestep in the simulation above started at 1892 real life seconds since the simulation began. +3. The second number inside the [] square brackets expresses the **residual** of the current solution. The residual is an expression of the error in the current numerical solution. More specifically, it shows the discrepancy when plugging in the current numerical solution into the governing equations. Since the numerical solution is not exact, there will always be a difference when plugging back into the governing equation. This number starts at 1.0 at the beginning of each timestep and should reduce upon each nonlinear iteration within that timestep. When this number dips below the tolerance specified in the .xml file, the simulation moves onto the next timestep. The first number in the square brackets shows the decrease in the residual in dB format. + +Keeping an eye on the simulation residual is the most important to make sure the simulation is adequately converging. If you observe the residual is not decreasing fast enough within a timestep or even starts to increase, it would be best to stop the simulation and **decrease the timestep size** to help the simulation converge. If you do reduce the timestep size, make sure to also adjust the number of timesteps to ensure the amount of simulated time stays the same. For example, if you halve the timestep size, you need to double the number of timesteps. To stop a simulation from the command line terminal, hit `Ctrl+C` on the keyboard. \ No newline at end of file diff --git a/documentation/multi_physics/user-guide/cfd/example_1_steady_rigid_simulation/sim_outputs/readme.md b/documentation/multi_physics/user-guide/cfd/example_1_steady_rigid_simulation/sim_outputs/readme.md new file mode 100644 index 00000000..35523a5d --- /dev/null +++ b/documentation/multi_physics/user-guide/cfd/example_1_steady_rigid_simulation/sim_outputs/readme.md @@ -0,0 +1,32 @@ + +### Checking Simulation Outputs + +When your simulation finishes, the results can be viewed by loading the .vtu result files into a 3D viewing software like Paraview. Paraview is an open-source software that you can download to view 3D model data like *svMultiPhysics* simulation results. More information about downloading and running Paraview can be found on their website. To view your *svMultiPhysics* results, open Paraview then click “Open”. Navigate to the folder where your results are saved (which should be `1-procs`) and open the file `results_100.vtu`. Since we ran a steady simulation, we only need to view the results at the final timestep where steady-state has been achieved. After opening the file, click the green “Apply” button on the left-hand side of the screen to load the results. You should now see your geometry in the 3D viewing window: + +
+ +
Paraview interface after loading .vtu results.
+
+ +To view a specific result field, it needs to be loaded into the 3D viewer. There is a dropdown menu near the top of the screen which lets you select the field for viewing. By default, no field is selected and the model is displayed as a `Solid Color`. Clicking on this dropdown menu will allow you to view results like the velocity or pressure fields. While each simulation job will have different results that depend on the patient geometry and boundary conditions, there are certain expected solution characteristics that should be present in most simulations. It is usually a good idea to do some quick sanity checks to ensure the simulation ran properly. First, let’s check the velocity field to ensure our velocity boundary conditions were applied correctly: + +
+ +
Velocity field results on the walls from svMultiPhysics simulation with rigid walls.
+
+ +Notice how the entire model appears blue, which is zero velocity according to the color legend. This makes sense since we assumed our simulation to have rigid walls and no slip. If a deformable wall simulation were performed, the wall would have motion and velocity. If you rotate the model to view the caps, you should see there is nonzero velocity there. These nonzero velocities show that blood flow is coming out at these caps. + +
+ +
Velocity field results on the outlet caps from svMultiPhysics simulation.
+
+ +Next, it is useful to check the pressure distribution in the model. In general, we expect pressure to be highest at the inlets of the model and lowest at the outlets of the model. The decrease in pressure from the inlets to the outlets is a result of the energy needed to overcome viscous friction in the 3D domain: + +
+ +
Pressure field results on the from a svMultiPhysics simulation.
+
+ +There may be other factors that produce local increases or decreases in pressure like sudden changes in the vessel radius or deformable walls. But you should observe a general decrease of pressure from inlets to outlets. These general solution characteristics should be present for any rigid wall simulation and are good to check before performing any further analysis. If you do not observe these solution behaviors, it could be an indication that something went wrong with the simulation and you need to re-run it with adjusted parameters. \ No newline at end of file diff --git a/documentation/multi_physics/user-guide/cfd/example_1_steady_rigid_simulation/time_marching/readme.md b/documentation/multi_physics/user-guide/cfd/example_1_steady_rigid_simulation/time_marching/readme.md new file mode 100644 index 00000000..4b9da48c --- /dev/null +++ b/documentation/multi_physics/user-guide/cfd/example_1_steady_rigid_simulation/time_marching/readme.md @@ -0,0 +1,18 @@ + +### Time Marching Parameters ### + +Our next step is to specify the time marching parameters. This is done in the `` section at the top of the .xml file. *svMultiPhysics* simulations are solved one discrete timestep at a time, with each timestep separated by a fixed amount of time. This is analogous to how a digital video is shown one frame at a time where each frame is separated by a fixed amount of time. We need to specify how many timesteps we wish to solve in our simulation as well as the timestep size: + + + + 3 + 100 + 1e-3 + +The timestep size specifies how much time will pass in between timesteps. This parameter should be chosen to give enough time resolution for the results. It should also be sufficiently small to ensure accurate simulation results. Similar to the mesh size, simulation accuracy goes up as the timestep size decreases (at additional computational time and cost). We choose a timestep size of $1 \ ms$ ($0.001 \ seconds$) for this example, which is a good starting point for cardiovascular simulations. Another good rule of thumb for selecting the timestep size is to use the CFL condition: + +$$ CFL = v * \Delta t / \Delta x < 1 $$ + +Here, $v$ is a characteristic velocity in the simulation, $\Delta x$ is the grid spacing for the mesh, and $\Delta t$ is the timestep size. The CFL number should be less than 1 at all points and all times for solution stability. An unstable solution will *diverge*, meaning the errors will grow exponentially until the simulation eventually crashes. The stability of a simulation can be checked in real time by observing the *residual*, which will be explained in a future section. The CFL number is normally hard to compute exactly for a given simulation since the grid spacing is not uniform and the velocity changes at different locations in a simulation. But it is useful to know that smaller grid sizes (which are sometimes needed for more accurate results) require a smaller timestep size for a stable solution. If you find that your simulations are diverging, try **reducing the timestep size** and re-running the simulation to see if that helps. + +The number of timesteps then ultimately determines the total simulation time. For this simple simulation, we are simulating $100$ timesteps at $0.001$ seconds each, so the total simulation time is $(100 \ timesteps)(0.001 \ s/timestep) = 0.1 \ s$. Since all our boundary conditions are steady, we only need to simulate a small amount of time to eliminate transient effects from the initial conditions. But if your boundary conditions are changing with time (i.e. you have a pulsatile inflow), you will need to simulate a larger number of timesteps to run multiple cardiac cycles. This will be expanded upon in future examples with pulsatile inflow boundary conditions. \ No newline at end of file diff --git a/documentation/multi_physics/user-guide/cfd/example_2_unsteady_rigid_simulation/intro/readme.md b/documentation/multi_physics/user-guide/cfd/example_2_unsteady_rigid_simulation/intro/readme.md new file mode 100644 index 00000000..06e6e64c --- /dev/null +++ b/documentation/multi_physics/user-guide/cfd/example_2_unsteady_rigid_simulation/intro/readme.md @@ -0,0 +1,16 @@ + +## Example 2: Unsteady Rigid Simulation on Descending Aorta with RCR Outlets + +This example will describe how to set up a typical unsteady simulation in *svMultiPhysics*. Blood flow rates and pressure naturally fluctuate along with cardiac contractions. These fluctuations create local flow patterns and behavior that cannot be captured in a steady simulation. Compared to a steady simulation, unsteady pulsatile simulations take much more time to complete since they require more timesteps and sometimes a smaller timestep size. There are some applications where a steady simulation is enough to produce useful results. But for most applications in the cardiovascular system, unsteady pulsatile conditions are needed for accurate results. + +Besides the changes to the timestepping, there are two main changes are made to the boundary conditions for an unsteady simulation: + +1. Inflow boundary condition adjusted to change with time by incorporating a .flow file. +2. Outflow boundary conditions changed to RCR which incorporates the compliance of the downstream vasculature. + +All other settings regarding the mesh, equations, and outputs are the same compared to a rigid simulation, and the reader is referred to our previous example for information on these aspects. We will use the same geometric model as the previous example but adjust the settings to run an unsteady pulsatile simulation. The geometry and face names are repeated below for clarity: + +
+ +
Descending Aorta model with mesh surfaces labeled.
+
\ No newline at end of file diff --git a/documentation/multi_physics/user-guide/cfd/example_2_unsteady_rigid_simulation/other_parameters/readme.md b/documentation/multi_physics/user-guide/cfd/example_2_unsteady_rigid_simulation/other_parameters/readme.md new file mode 100644 index 00000000..5d06ad64 --- /dev/null +++ b/documentation/multi_physics/user-guide/cfd/example_2_unsteady_rigid_simulation/other_parameters/readme.md @@ -0,0 +1,31 @@ + +### Other Parameter Changes for Unsteady Simulation + +Besides the boundary conditions, minor adjustments to a couple other settings are required for an unsteady simulation. First, the `` and `` must be set to capture multiple cardiac cycles in the simulation. When a new *svMultiPhysics* simulation is started, all velocity and pressure values in the domain are set to initial values of zero. Due to the inertia of the fluid in the 3D domain, the velocities and pressures do not immediately “react” to changes in the boundary conditions. That is why we had to run our steady simulation for 100 timesteps in the previous example. This initial phase of a flow simulation is often called the *transient* part and is merely an artifact of the numerical procedure, not representative of physiological behavior. + +Because the boundary conditions for unsteady simulations are changing rapidly with time, the transient part of the solution persists for longer. More specifically, it often takes several cardiac cycles for an unsteady simulation to represent true physiologic conditions. It is thus recommended to run at least **four** cardiac cycles in the simulation to ensure the transient part of the solution does not affect our results. Then the results are analyzed for only the last cycle. Note that for deformable wall simulations, transient effects take even longer to decay so more cycles are recommended for those. + +Based on the .flow file used for the inlet boundary conditions, this patient has a heart period of one second (i.e. heart rate of 60 bpm). If we set the timestep size to $1 \ ms$ as we typically do, then we need to run at least $4000$ timesteps to simulate four full cardiac cycles: + + … + 4000 + 1e-3 + … + +Since we will be running many more timesteps compared to our steady simulation, it is even more important to confirm the frequency *svMultiPhysics* is saving results. The save frequency needs to be often enough to give adequate time resolution for results but not too often otherwise too many files will be produced: + + … + + 10 + 3000 + + … + + true + true + results + 10 + + … + +Since we only want to save results for the final cycle, we do not save results until after timestep $3000$. We also make sure to activate the flag for saving averaged results which will be convenient when doing our analysis. diff --git a/documentation/multi_physics/user-guide/cfd/example_2_unsteady_rigid_simulation/rcr_outlets/readme.md b/documentation/multi_physics/user-guide/cfd/example_2_unsteady_rigid_simulation/rcr_outlets/readme.md new file mode 100644 index 00000000..2752660a --- /dev/null +++ b/documentation/multi_physics/user-guide/cfd/example_2_unsteady_rigid_simulation/rcr_outlets/readme.md @@ -0,0 +1,91 @@ + +### RCR Outlet Boundary Conditions and Resistance Scaling + +The other common major change made for unsteady simulations is RCR outlet boundary conditions as opposed to resistance. All blood vessels have the ability to temporarily store blood due to the flexibility of the vessel walls. Blood vessels will locally inflate and deflate in response to fluctuations in blood pressure caused by cardiac contractions. This behavior is called as vessel compliance and affects the flow and pressure waveforms at different parts of the cardiovascular system. For modeling purposes, the main consequence of vessel compliance is that it allows for pressure waveforms at different locations in the cardiovascular system to be “out of phase” with each other. If the walls were rigid, then changes in the flow or pressure at one location would immediately cause a change at all distant locations. For example, a sudden increase in flow at the inlet of a rigid pipe system will cause an instantaneous increase in flow at all other locations due to conservation of mass. But flexible walls have the ability to temporarily “absorb” these changes and propagate them at a finite speed to distal locations, causing the characteristic “out of phase” behavior. This phenomenon is better known as “wave propagation”. + +We can account for vessel compliance in *svMultiPhysics* in two places. Compliance can be added directly into the 3D geometry by running a deformable wall simulation. These simulations allow the vessel walls in the 3D model to deform in response to changes in flow and pressure. Deformable wall simulations will be the subject of a future tutorial. + +Compliance can also be added to the boundary conditions through the inclusion of capacitors to model the compliance of all vessels downstream of the 3D geometry. Capacitors are lumped parameter representations for vessel compliance, similar to how resistances are lumped parameter representations for viscous resistance. svMultiPhysics incorporates capacitance through an RCR (i.e. resistance, capacitance, resistance) boundary condition at the outlets. RCR outlet boundary conditions are also often called Windkessel boundary conditions: + +
+ +
RCR Windkessel Outlet Boundary Condition.
+
+ +RCR boundary conditions require specifying the values of all three parameters (proximal resistance $(R_p)$, Capacitance $(C)$, and distal resistance $(R_d)$). We need to select values for these parameters to run the simulation. Just like the previous example, we start with selecting values for the resistances to set the overall pressure in the 3D domain: + +$$ R_{outlet} = P/Q $$ + +Here, $R_{outlet}$ is the overall resistance of the outlet, $P$ is the target pressure that we wish to specify, and $Q$ is the flowrate of blood through that outlet. In the previous example, we assumed the inlet flowrate of $100 \ mL/s$ was split evenly between the two outlets at $50 \ mL/s$ each. We also wished to have a target pressure of $100 \ mmHg$ (or $133300 \ dyne/cm^2$). Normally, the flow split between outlets is not assumed but instead determined by the anatomy. While it is practically impossible to get an accurate measurement of the viscous resistance of all vessels downstream of a 3D model, we can adjust the relative resistances of different outlets based on their area. Vessels with larger cross-sectional areas are assumed to have less viscous resistance downstream than vessels with smaller areas. + +Taking this into account, we can first compute an overall vascular resistance for the whole model based on the total flowrate at the inlet and the target pressure: + +$$ R_{total} = P_{avg}/Q_{avg} $$ + +Here, $P_{avg}$ is the average blood pressure in the patient and $Q_{avg}$ is the average flowrate of blood coming in at the inlet. The resistance calculated here must then be split in parallel among all the different outlets. The splitting scales the resistance for a specific outlet based on its area: + +$$ R_{outlet} = R_{total} \frac{\sum_{i}^{n} A_i}{A_{outlet}} $$ + +Here, $R_{outlet}$ is the resistance of that specific outlet, $A_{outlet}$ is the area of that specific outlet, and $\sum_{i}^{n} A_i$ is the sum of all outlet areas. This resistance can then be split between the proximal and distal resistances by following a general ratio rule. Generally, most of the vascular resistance is held in the distal vessels so we can use a simple ratio like the following: + +$$ R_p = (1/10)R_{outlet}; R_d = (9/10)R_{outlet} $$ + +For this example, we have an average inlet flowrate of $83.295 \ mL/s$ and we wish to have an average pressure of $93 \ mmHg$. This gives us a total vascular resistance of $1488.3 \ dyne \cdot s/cm^5$. We have two outlets in the model with areas of $0.791 \ cm^2$ for `cap_aorta_2` and $0.976 \ cm^2$ for `cap_right_iliac`. Using the formula above, we can compute the outlet resistance for each outlet: + +$$ R_{aorta2} = (1488.3 \ dyne \cdot s/cm^5) * (0.791 \ cm^2 + 0.976 \ cm^2) / (0.791 \ cm^2) = 3324.7 \ dyne \cdot s/cm^5 $$ +$$ R_{iliac} = (1488.3 \ dyne \cdot s/cm^5) * (0.791 \ cm^2 + 0.976 \ cm^2) / (0.976 \ cm^2) = 2694.5 \ dyne \cdot s/cm^5 $$ + +Now we split each outlet resistance into proximal and distal resistances using the ratio formula: + +$$ R_{p,aorta2} = (1/10)*R_{aorta2} = 332.47 \ dyne \cdot s/cm^5 $$ + +$$ R_{d,aorta2} = (9/10)*R_{aorta2} = 2992.2 \ dyne \cdot s/cm^5 $$ + +$$ R_{p,iliac} = (1/10)*R_{iliac} = 269.45 \ dyne \cdot s/cm^5 $$ + +$$ R_{d,iliac} = (9/10)*R_{iliac} = 2425.1 \ dyne \cdot s/cm^5 $$ + +The other component of the RCR Windkessel outlet boundary conditions is the capacitor. This component represents the compliance of all vessels downstream of the 3D model. Just like how a circuit capacitor can temporarily store electric charge, the capacitor here can temporarily store blood as it exits the 3D domain outlets. The pressure (i.e. voltage) on the capacitor rises with the amount of blood stored and decreases when the capacitor releases the flow. For a typical cardiovascular pulsatile waveform (like the one used in this example), the capacitor will fill when the flow rate is high during systole and discharge when the flow rate is low during diastole. The net effect of this behavior alters the shape and reduces the peak-to-peak amplitudes of the pressure waveform applied at the outlets of the 3D model. With pure resistance outlet boundary conditions, the pressure waveform mimics the exact shape of the inlet flow waveform since the pressure is just a scalar multiple of the flow coming out of the outlet. Capacitances cause peaks in the pressure waveforms to lag behind peaks in the inflow waveform: + +
+ +
Compliance causes pressure waveforms to lag behind velocity waveforms with reduced peak-to-peak amplitudes.
+
+ +The value of the capacitance for each outlet needs to be chosen to run the simulation. This value represents how elastic the downstream vessels are and how much blood they can store. As the value of capacitance is increased, it is expected that the peak-to-peak pressure amplitude will decrease. Ideally, the capacitance value should be chosen so that the maximum and minimum pressure exhibited by the simulation matches the systolic and diastolic pressures of the patient. Unfortunately, choosing the capacitance value is not as easy as the resistance values. For resistances, we can use the Ohm’s Law relationship between average flowrate and average pressure to get an initial estimate for the resistance. The relationship between pressure and flowrate on a capacitor is a differential equation: + +$$ \frac{dP}{dt} = \frac{1}{C}Q $$ + +For this reason, it is recommended to start with a default value of capacitance and iteratively adjust it until the outlet pressure waveform matches your target pressures. For this example, we start with a nominal value of $1*10-4 \ mL/(dyne/cm^2)$ for each outlet. If you have an idea of the overall vessel compliance for your patients, you can split this overall compliance between your outlets based on the outlet cap area. But unlike resistance which scales inversely with area, outlet compliance scales proportionally with area. + +To set RCR Windkessel outlet boundary conditions, we adjust the specification of the `` sections for each outlet cap: + + … + + + Neumann + RCR + + 1e-4 + 2992.2 + 332.47 + 0 + 0 + + + + + Neumann + RCR + + 1e-4 + 2425.1 + 269.45 + 0 + 0 + + + + … + +Note how the values for the resistances and capacitances are exactly as we computed. The RCR boundary conditions in *svMultiPhysics* also gives you the option to specify distal and initial pressures. The distal pressure adds a pressure offset to represent the pressure downstream of the RCR elements and the initial pressure is the pressure on the capacitor when the simulation begins. In most cases, we can assume both of these are zero. \ No newline at end of file diff --git a/documentation/multi_physics/user-guide/cfd/example_2_unsteady_rigid_simulation/running_svmp_in_parallel/readme.md b/documentation/multi_physics/user-guide/cfd/example_2_unsteady_rigid_simulation/running_svmp_in_parallel/readme.md new file mode 100644 index 00000000..d698fd60 --- /dev/null +++ b/documentation/multi_physics/user-guide/cfd/example_2_unsteady_rigid_simulation/running_svmp_in_parallel/readme.md @@ -0,0 +1,16 @@ + +### Running *svMultiPhysics* in Parallel + +At this point, the .xml input file is ready and we can run *svMultiPhysics* like we did in the previous example. But since we are running many more timesteps for the unsteady simulation, it may take a long time for the simulation to finish. We can speed up the simulation run time by making use of multiple cores on your computer. Most modern computers have multiple processing cores that it can use for its operations. But by default, individual programs run through the command line only utilize a single core. These programs are said to be running in *series*. We can utilize multiple cores for a single program to run it in *parallel* by using MPI (message passing interface). + +A detailed explanation of MPI is beyond the scope of this User Guide. A basic explanation is that MPI provides a framework for different computer cores to communicate instructions and data with each other. Applications can use this to coordinate tasks between cores to complete tasks more quickly, similar to how multiple human workers can combine their efforts to complete a large task. *svMultiPhysics* can be run using MPI to split the mesh into partitions that it assigns to each core. Each core is then responsible for computing the solution of its partition, only communicating information with other cores for overlapping nodes. This can significantly reduce the amount of time it takes to run a simulation since each would only be responsible for a small portion of the domain instead of the entire mesh. Parallel processing is practically necessary for large *svMultiPhysics* jobs with large meshes. + +To use MPI, we first need to install the libraries for it if you have not done so already on your machine. Run the following command from the command line terminal: + + sudo apt install -y build-essential openmpi-bin libopenmpi-dev + +After these install, you should have access to the program called `mpirun` to run another program in parallel. Using `mpirun` requires that you specify the number of cores that you want to use as well as the program that you wish to run in parallel. For example, let’s run *svMultiPhysics* for this unsteady case using two cores: + + mpirun -n 2 /usr/local/sv/svMultiPhysics/2026-06-11/bin/svmultiphysics unsteady_simulation.xml + +The `-n 2` flag specifies the number of cores to use for the simulation. If your computer has more cores you can increase this number to speed up the simulation further. Note that we named our input file `unsteady_simulation.xml` but if you named your input file something else then you would need to change that. As the simulation runs, your results will be stored in a folder called `n-procs` where `n` is the number of processors you specified for the simulation. diff --git a/documentation/multi_physics/user-guide/cfd/example_2_unsteady_rigid_simulation/sim_outputs/readme.md b/documentation/multi_physics/user-guide/cfd/example_2_unsteady_rigid_simulation/sim_outputs/readme.md new file mode 100644 index 00000000..f620fa99 --- /dev/null +++ b/documentation/multi_physics/user-guide/cfd/example_2_unsteady_rigid_simulation/sim_outputs/readme.md @@ -0,0 +1,36 @@ + +### Checking Unsteady Simulation Outputs + +Once the simulation finishes, we can load the results into Paraview. Since *svMultiPhysics* saved a separate .vtu file for each timestep, we need to load the entire *stack* of results into Paraview. Click “Open” in Paraview then navigate to the folder where your results are saved. You should notice that all of your `results_*.vtu` files are grouped together. You can click the down arrow to expand the list and open individual files, but for our case we would like to load them all as a stack. Click on the header for the results then click “OK” to load them all. + +
+ +
Loading a stack of .vtu results in Paraview.
+
+ +Click “Apply” on the left hand side to load all of the data. By default, *svMultiPhysics* results load in as a `Solid Color’. Just like the previous example, you can view different result fields like the velocity and pressure by selecting them from the dropdown menu at the top. It is once again a good idea to verify general solution characteristics of the pressure and velocity fields before continuing. Your simulation results are shown in the 3D viewer one timestep at a time. Results at a different timestep can be viewed by using the time bar near the top of the screen: + +
+ +
Selecting different timesteps to view results in Paraview.
+
+ +Since we saved our results every $10$ timesteps, we have a total of $100$ result files per cycle. You can manually select the index of the result field you want to look at, or use the arrow buttons on the left. Observing the results at different timesteps should show the velocity and pressure fields evolving with time as the boundary conditions change. Often, it can be helpful to display the velocity and pressure fields at certain key points in the cardiac cycle (i.e. at peak systole or mid diastole) when performing analysis. + +It can also be useful to make line plots of certain simulation outputs over time. To do this, we will make use of “Filters” within Paraview which allow for manipulating and analyzing .vtu data. Paraview offers many useful filters for analyzing simulation outputs like clipping, slicing, integrating, vector glyphs, streamlines, and more. More information about the filters in Paraview can be found in their documentation. For this example, we will focus on the filter called “Plot Selection Over Time” which will allow us to select a point on the model and plot all simulation outputs at that point over time. At the top of the Paraview window, click the menu option for “Filters”. You will have the option of either searching for the filter by name or seeing the full list by alphabetical order. Find the “Plot Selection Over Time” filter to add it to your window. + +Now, we need to select the part of the 3D model where we want to plot the results over time. Left-click anywhere in the 3D viewer then hit `d` on your keyboard to enter selection mode. The mouse cursor should change to a “+” to indicate your switch. You can now click on anywhere in the model to select a point, but for this example let’s select one of the outlet caps so we can observe the velocity and pressure at the outlets. Select a point as close to the middle of the cap as possible which is where we expect the maximum velocity to be: + +
+ +
Selecting a point for plotting in Paraview.
+
+ +The selected point should highlight purple to show where you have selected. This point will now act like a probe and record simulation output data at that point for all times. Return to the left-hand side of the screen to the “PlotSectionOverTime” filter then hit “Apply” to apply the filter. It may take a few moments for Paraview to compile all the data. There is a progress bar in the bottom of the screen which can show you what Paraview is working on at the moment. Once it completes, a line graph should appear on the right-hand side of the 3D viewing window which should show the pressure, velocity, and wall shear stress at that point as a function of time: + +
+ +
Plotting simulation outputs at a point over time.
+
+ +Note that the plot only has a single vertical axis, so outputs with much smaller magnitudes like the velocity and wall shear stress may not be viewable initially. You can change which outputs appear in the graph by selecting them from a menu on the bottom-left of the screen. Note that the pressure at this outlet changes with time due to our unsteady boundary conditions. It can also be helpful to export the data from this graph to a file for further analysis and plotting. To do this, click on either the “Split Horizontal Axis” or “Split Vertical Axis” buttons on the top right of the line graph. This will open a new window for you to create a new view. Select “Spreadsheet View” from the bottom of the list to show a data table of all results that were plotted with time. With this spreadsheet selected (there should be a faint blue border around the active window), go to “File > Save Data” then export the data to a .csv format. This .csv file can then be loaded into a spreadsheet program or MATLAB for further plotting and analysis. \ No newline at end of file diff --git a/documentation/multi_physics/user-guide/cfd/example_2_unsteady_rigid_simulation/unsteady_inflow/readme.md b/documentation/multi_physics/user-guide/cfd/example_2_unsteady_rigid_simulation/unsteady_inflow/readme.md new file mode 100644 index 00000000..342e701b --- /dev/null +++ b/documentation/multi_physics/user-guide/cfd/example_2_unsteady_rigid_simulation/unsteady_inflow/readme.md @@ -0,0 +1,46 @@ + +### Unsteady Inflow Boundary Conditions + +Typically, unsteady inflow conditions in the cardiovascular system come from the pulsatile nature of blood flow. Flow and pressure increase when the heart contracts during systole then decrease when the heart relaxes during diastole. This pattern then repeats on the next cardiac cycle. svMultiPhysics thus assumes that unsteady inflow conditions are periodic as well and only require the flow waveform to be defined for the first cycle. This is typically specified in a .flow file. The .flow file is a simple text file that has the following format: + + N_datapoints n_fourier_modes + T0 Q0 + T1 Q1 + T2 Q2 + … + Tn Qn + +The first line of the .flow file has two integers on it, separated by a space. The first number, `N_datapoints`, specifies the number of datapoints below which describes the flow waveform. This number informs *svMultiPhysics* how many lines it needs to read. The second number, `n_fourier_modes`, specifies the number of Fourier modes that will be used for the waveform reconstruction. Because of the periodic nature of the flow waveforms, *svMultiPhysics* uses a Fourier approximation of the waveform to interpolate its value at any desired timepoint. Having less Fourier modes will result in a smoother waveform that may not be as accurate, while having a higher number of modes will increase the approximation’s accuracy but make it more susceptible to noise. Flow measurements for cardiovascular patients are often taken in the clinic using methods like *pcMRI*. These methods naturally produce noise in the flow measurement that is undesirable to include in a simulation. Reducing the number of Fourier modes in the .flow file will help smooth noise out. If you are unsure, then 10 Fourier modes usually is a good amount that works for most waveforms. + +Each line after the first contains the flowrate data. The first entry on each line is the time (in seconds) that the measurement was taken followed by the flowrate. The units for the flowrate are assumed to be consistent with the units used to construct the model. Typically, cardiovascular models are created in centimeters so *svMultiPhysics* uses the CGS (centimeters-grams-seconds) unit system. The CGS unit for flowrate is $mL/s$ or $cm^3/s$. Make sure to check the units used in your medical image data file or mesh file. Below is a sample flow waveform taken at the root of the aorta: + +
+ +
Pulsatile flow waveform in descending aorta.
+
+ +Flow reaches its maximum magnitude during systole in the early part of the heart cycle then comes back near zero during diastole when the heart is relaxing. We note that the flow is negative due to the sign convention in *svMultiPhysics* to ensure flow enters the domain. From the horizontal axis, we can see that the period is one second showing that the heart rate for this patient is 60 beats per minute (BPM). Ideally, the inflow waveform would use data directly measured from the patient. But in the absence of such data, a generic waveform like this can be used. The .flow file for the above waveform is available here for you to download as a reference: [Download Sample Unsteady .flow File](/documentation/multi_physics/user-guide/cfd/files/cap_aorta.flow). + +The average flowrate of the above waveform can be computed by taking the average of all of the flow values in the second column. This gives a value of $83.295 \ mL/s$. If you have data on the average flowrate on your patient, you can consider scaling the above waveform to match. In many cases, average flowrate is easier to measure for most patients than exact flow waveforms. To scale a waveform to match a target flowrate, you would first need to divide every entry in the second column by the original average flowrate of $83.295 \ mL/s$. This will normalize the flow waveform to have a average flowrate of $1 mL/s$. You would then multiply this new column by the desired flowrate of your patient, then output the results to a new .flow file along with the first row and time column to keep the formatting consistent. This can be done in a spreadsheet program or simple programming language like Python or MATLAB. + +To specify this unsteady inlet boundary condition in *svMultiPhysics*, we modify the `` section of the .xml file corresponding to the inlet surface: + + ... + + + Dirichlet + Unsteady + cap_aorta.flow + Flat + true + true + + + ... + +There are two main changes to this section compared to the steady simulation: + +1. `` is changed to *Unsteady* +2. `` is added to reference the .flow file containing the flow data. + +Note that the name of the .flow file is not required to be ‘cap_aorta.flow’. It is recommended that you change the name of the file to be more specific for your model, especially if you have multiple unsteady inlets. \ No newline at end of file diff --git a/documentation/multi_physics/user-guide/cfd/files/cap_aorta.flow b/documentation/multi_physics/user-guide/cfd/files/cap_aorta.flow new file mode 100644 index 00000000..f4a763a7 --- /dev/null +++ b/documentation/multi_physics/user-guide/cfd/files/cap_aorta.flow @@ -0,0 +1,1002 @@ +1000 10 +0.0000000000 -48.28648 +0.0010000000 -50.61342 +0.0020000000 -52.94037 +0.0030000000 -55.26731 +0.0040000000 -57.59425 +0.0050000000 -59.92119 +0.0060000000 -62.24813 +0.0070000000 -64.57508 +0.0080000000 -66.90202 +0.0090000000 -69.22896 +0.0100000000 -71.55590 +0.0110000000 -73.88284 +0.0120000000 -76.20979 +0.0130000000 -78.53673 +0.0140000000 -80.86367 +0.0150000000 -83.19061 +0.0160000000 -85.51755 +0.0170000000 -87.84450 +0.0180000000 -90.17144 +0.0190000000 -92.49838 +0.0200000000 -94.82532 +0.0210000000 -97.15227 +0.0220000000 -99.47921 +0.0230000000 -101.80615 +0.0240000000 -104.13309 +0.0250000000 -106.46003 +0.0260000000 -108.78698 +0.0270000000 -111.11392 +0.0280000000 -113.44086 +0.0290000000 -115.76780 +0.0300000000 -118.09474 +0.0310000000 -120.42169 +0.0320000000 -122.74863 +0.0330000000 -125.07557 +0.0340000000 -127.40251 +0.0350000000 -129.72946 +0.0360000000 -132.05640 +0.0370000000 -134.38334 +0.0380000000 -136.71028 +0.0390000000 -139.03722 +0.0400000000 -141.36417 +0.0410000000 -143.74964 +0.0420000000 -146.13512 +0.0430000000 -148.52060 +0.0440000000 -150.90608 +0.0450000000 -153.29155 +0.0460000000 -155.67703 +0.0470000000 -158.06251 +0.0480000000 -160.44799 +0.0490000000 -162.83346 +0.0500000000 -165.21894 +0.0510000000 -167.60442 +0.0520000000 -169.98990 +0.0530000000 -172.37537 +0.0540000000 -174.76085 +0.0550000000 -177.14633 +0.0560000000 -179.53181 +0.0570000000 -181.91728 +0.0580000000 -184.30276 +0.0590000000 -186.68824 +0.0600000000 -189.07372 +0.0610000000 -191.45919 +0.0620000000 -193.84467 +0.0630000000 -196.23015 +0.0640000000 -198.61563 +0.0650000000 -201.00110 +0.0660000000 -203.38658 +0.0670000000 -205.77206 +0.0680000000 -208.15754 +0.0690000000 -210.54301 +0.0700000000 -212.92849 +0.0710000000 -215.31397 +0.0720000000 -217.69945 +0.0730000000 -220.08492 +0.0740000000 -222.47040 +0.0750000000 -224.85588 +0.0760000000 -227.24136 +0.0770000000 -229.62684 +0.0780000000 -232.01231 +0.0790000000 -234.39779 +0.0800000000 -236.78327 +0.0810000000 -238.07117 +0.0820000000 -239.35908 +0.0830000000 -240.64699 +0.0840000000 -241.93489 +0.0850000000 -243.22280 +0.0860000000 -244.51071 +0.0870000000 -245.79861 +0.0880000000 -247.08652 +0.0890000000 -248.37443 +0.0900000000 -249.66233 +0.0910000000 -250.95024 +0.0920000000 -252.23815 +0.0930000000 -253.52605 +0.0940000000 -254.81396 +0.0950000000 -256.10187 +0.0960000000 -257.38977 +0.0970000000 -258.67768 +0.0980000000 -259.96559 +0.0990000000 -261.25349 +0.1000000000 -262.54140 +0.1010000000 -263.82931 +0.1020000000 -265.11721 +0.1030000000 -266.40512 +0.1040000000 -267.69303 +0.1050000000 -268.98093 +0.1060000000 -270.26884 +0.1070000000 -271.55675 +0.1080000000 -272.84465 +0.1090000000 -274.13256 +0.1100000000 -275.42047 +0.1110000000 -276.70837 +0.1120000000 -277.99628 +0.1130000000 -279.28419 +0.1140000000 -280.57209 +0.1150000000 -281.86000 +0.1160000000 -283.14791 +0.1170000000 -284.43581 +0.1180000000 -285.72372 +0.1190000000 -287.01163 +0.1200000000 -288.29953 +0.1210000000 -288.80897 +0.1220000000 -289.31840 +0.1230000000 -289.82784 +0.1240000000 -290.33727 +0.1250000000 -290.84671 +0.1260000000 -291.35614 +0.1270000000 -291.86557 +0.1280000000 -292.37501 +0.1290000000 -292.88444 +0.1300000000 -293.39388 +0.1310000000 -293.90331 +0.1320000000 -294.41275 +0.1330000000 -294.92218 +0.1340000000 -295.43161 +0.1350000000 -295.94105 +0.1360000000 -296.45048 +0.1370000000 -296.95992 +0.1380000000 -297.46935 +0.1390000000 -297.97878 +0.1400000000 -298.48822 +0.1410000000 -298.99765 +0.1420000000 -299.50709 +0.1430000000 -300.01652 +0.1440000000 -300.52596 +0.1450000000 -301.03539 +0.1460000000 -301.54482 +0.1470000000 -302.05426 +0.1480000000 -302.56369 +0.1490000000 -303.07313 +0.1500000000 -303.58256 +0.1510000000 -304.09200 +0.1520000000 -304.60143 +0.1530000000 -305.11086 +0.1540000000 -305.62030 +0.1550000000 -306.12973 +0.1560000000 -306.63917 +0.1570000000 -307.14860 +0.1580000000 -307.65803 +0.1590000000 -308.16747 +0.1600000000 -308.67690 +0.1610000000 -308.60571 +0.1620000000 -308.53451 +0.1630000000 -308.46331 +0.1640000000 -308.39211 +0.1650000000 -308.32092 +0.1660000000 -308.24972 +0.1670000000 -308.17852 +0.1680000000 -308.10733 +0.1690000000 -308.03613 +0.1700000000 -307.96493 +0.1710000000 -307.89373 +0.1720000000 -307.82254 +0.1730000000 -307.75134 +0.1740000000 -307.68014 +0.1750000000 -307.60894 +0.1760000000 -307.53775 +0.1770000000 -307.46655 +0.1780000000 -307.39535 +0.1790000000 -307.32416 +0.1800000000 -307.25296 +0.1810000000 -307.18176 +0.1820000000 -307.11056 +0.1830000000 -307.03937 +0.1840000000 -306.96817 +0.1850000000 -306.89697 +0.1860000000 -306.82578 +0.1870000000 -306.75458 +0.1880000000 -306.68338 +0.1890000000 -306.61218 +0.1900000000 -306.54099 +0.1910000000 -306.46979 +0.1920000000 -306.39859 +0.1930000000 -306.32739 +0.1940000000 -306.25620 +0.1950000000 -306.18500 +0.1960000000 -306.11380 +0.1970000000 -306.04261 +0.1980000000 -305.97141 +0.1990000000 -305.90021 +0.2000000000 -305.82901 +0.2010000000 -305.11988 +0.2020000000 -304.41074 +0.2030000000 -303.70160 +0.2040000000 -302.99246 +0.2050000000 -302.28332 +0.2060000000 -301.57418 +0.2070000000 -300.86504 +0.2080000000 -300.15590 +0.2090000000 -299.44677 +0.2100000000 -298.73763 +0.2110000000 -298.02849 +0.2120000000 -297.31935 +0.2130000000 -296.61021 +0.2140000000 -295.90107 +0.2150000000 -295.19193 +0.2160000000 -294.48279 +0.2170000000 -293.77366 +0.2180000000 -293.06452 +0.2190000000 -292.35538 +0.2200000000 -291.64624 +0.2210000000 -290.93710 +0.2220000000 -290.22796 +0.2230000000 -289.51882 +0.2240000000 -288.80968 +0.2250000000 -288.10055 +0.2260000000 -287.39141 +0.2270000000 -286.68227 +0.2280000000 -285.97313 +0.2290000000 -285.26399 +0.2300000000 -284.55485 +0.2310000000 -283.84571 +0.2320000000 -283.13657 +0.2330000000 -282.42743 +0.2340000000 -281.71830 +0.2350000000 -281.00916 +0.2360000000 -280.30002 +0.2370000000 -279.59088 +0.2380000000 -278.88174 +0.2390000000 -278.17260 +0.2400000000 -277.46346 +0.2410000000 -276.28477 +0.2420000000 -275.10607 +0.2430000000 -273.92737 +0.2440000000 -272.74867 +0.2450000000 -271.56997 +0.2460000000 -270.39127 +0.2470000000 -269.21257 +0.2480000000 -268.03388 +0.2490000000 -266.85518 +0.2500000000 -265.67648 +0.2510000000 -264.49778 +0.2520000000 -263.31908 +0.2530000000 -262.14038 +0.2540000000 -260.96169 +0.2550000000 -259.78299 +0.2560000000 -258.60429 +0.2570000000 -257.42559 +0.2580000000 -256.24689 +0.2590000000 -255.06819 +0.2600000000 -253.88949 +0.2610000000 -252.71080 +0.2620000000 -251.53210 +0.2630000000 -250.35340 +0.2640000000 -249.17470 +0.2650000000 -247.99600 +0.2660000000 -246.81730 +0.2670000000 -245.63861 +0.2680000000 -244.45991 +0.2690000000 -243.28121 +0.2700000000 -242.10251 +0.2710000000 -240.92381 +0.2720000000 -239.74511 +0.2730000000 -238.56642 +0.2740000000 -237.38772 +0.2750000000 -236.20902 +0.2760000000 -235.03032 +0.2770000000 -233.85162 +0.2780000000 -232.67292 +0.2790000000 -231.49422 +0.2800000000 -230.31553 +0.2810000000 -228.51333 +0.2820000000 -226.71114 +0.2830000000 -224.90895 +0.2840000000 -223.10676 +0.2850000000 -221.30457 +0.2860000000 -219.50238 +0.2870000000 -217.70019 +0.2880000000 -215.89800 +0.2890000000 -214.09581 +0.2900000000 -212.29361 +0.2910000000 -210.49142 +0.2920000000 -208.68923 +0.2930000000 -206.88704 +0.2940000000 -205.08485 +0.2950000000 -203.28266 +0.2960000000 -201.48047 +0.2970000000 -199.67828 +0.2980000000 -197.87608 +0.2990000000 -196.07389 +0.3000000000 -194.27170 +0.3010000000 -192.46951 +0.3020000000 -190.66732 +0.3030000000 -188.86513 +0.3040000000 -187.06294 +0.3050000000 -185.26075 +0.3060000000 -183.45856 +0.3070000000 -181.65636 +0.3080000000 -179.85417 +0.3090000000 -178.05198 +0.3100000000 -176.24979 +0.3110000000 -174.44760 +0.3120000000 -172.64541 +0.3130000000 -170.84322 +0.3140000000 -169.04103 +0.3150000000 -167.23883 +0.3160000000 -165.43664 +0.3170000000 -163.63445 +0.3180000000 -161.83226 +0.3190000000 -160.03007 +0.3200000000 -158.22788 +0.3210000000 -155.97698 +0.3220000000 -153.72609 +0.3230000000 -151.47519 +0.3240000000 -149.22430 +0.3250000000 -146.97341 +0.3260000000 -144.72251 +0.3270000000 -142.47162 +0.3280000000 -140.22072 +0.3290000000 -137.96983 +0.3300000000 -135.71893 +0.3310000000 -133.46804 +0.3320000000 -131.21714 +0.3330000000 -128.96625 +0.3340000000 -126.71535 +0.3350000000 -124.46446 +0.3360000000 -122.21356 +0.3370000000 -119.96267 +0.3380000000 -117.71178 +0.3390000000 -115.46088 +0.3400000000 -113.20999 +0.3410000000 -110.95909 +0.3420000000 -108.70820 +0.3430000000 -106.45730 +0.3440000000 -104.20641 +0.3450000000 -101.95551 +0.3460000000 -99.70462 +0.3470000000 -97.45372 +0.3480000000 -95.20283 +0.3490000000 -92.95193 +0.3500000000 -90.70104 +0.3510000000 -88.45015 +0.3520000000 -86.19925 +0.3530000000 -83.94836 +0.3540000000 -81.69746 +0.3550000000 -79.44657 +0.3560000000 -77.19567 +0.3570000000 -74.94478 +0.3580000000 -72.69388 +0.3590000000 -70.44299 +0.3600000000 -68.19209 +0.3610000000 -66.56482 +0.3620000000 -64.93755 +0.3630000000 -63.31027 +0.3640000000 -61.68300 +0.3650000000 -60.05572 +0.3660000000 -58.42845 +0.3670000000 -56.80117 +0.3680000000 -55.17390 +0.3690000000 -53.54663 +0.3700000000 -51.91935 +0.3710000000 -50.29208 +0.3720000000 -48.66480 +0.3730000000 -47.03753 +0.3740000000 -45.41026 +0.3750000000 -43.78298 +0.3760000000 -42.15571 +0.3770000000 -40.52843 +0.3780000000 -38.90116 +0.3790000000 -37.27388 +0.3800000000 -35.64661 +0.3810000000 -34.01934 +0.3820000000 -32.39206 +0.3830000000 -30.76479 +0.3840000000 -29.13751 +0.3850000000 -27.51024 +0.3860000000 -25.88296 +0.3870000000 -24.25569 +0.3880000000 -22.62842 +0.3890000000 -21.00114 +0.3900000000 -19.37387 +0.3910000000 -17.74659 +0.3920000000 -16.11932 +0.3930000000 -14.49205 +0.3940000000 -12.86477 +0.3950000000 -11.23750 +0.3960000000 -9.61022 +0.3970000000 -7.98295 +0.3980000000 -6.35567 +0.3990000000 -4.72840 +0.4000000000 -3.10113 +0.4010000000 -2.69549 +0.4020000000 -2.28985 +0.4030000000 -1.88421 +0.4040000000 -1.47857 +0.4050000000 -1.07294 +0.4060000000 -0.66730 +0.4070000000 -0.26166 +0.4080000000 0.14398 +0.4090000000 0.54962 +0.4100000000 0.95525 +0.4110000000 1.36089 +0.4120000000 1.76653 +0.4130000000 2.17217 +0.4140000000 2.57780 +0.4150000000 2.98344 +0.4160000000 3.38908 +0.4170000000 3.79472 +0.4180000000 4.20036 +0.4190000000 4.60599 +0.4200000000 5.01163 +0.4210000000 5.41727 +0.4220000000 5.82291 +0.4230000000 6.22855 +0.4240000000 6.63418 +0.4250000000 7.03982 +0.4260000000 7.44546 +0.4270000000 7.85110 +0.4280000000 8.25673 +0.4290000000 8.66237 +0.4300000000 9.06801 +0.4310000000 9.47365 +0.4320000000 9.87929 +0.4330000000 10.28492 +0.4340000000 10.69056 +0.4350000000 11.09620 +0.4360000000 11.50184 +0.4370000000 11.90748 +0.4380000000 12.31311 +0.4390000000 12.71875 +0.4400000000 13.12439 +0.4410000000 12.91690 +0.4420000000 12.70941 +0.4430000000 12.50192 +0.4440000000 12.29443 +0.4450000000 12.08694 +0.4460000000 11.87945 +0.4470000000 11.67196 +0.4480000000 11.46447 +0.4490000000 11.25697 +0.4500000000 11.04948 +0.4510000000 10.84199 +0.4520000000 10.63450 +0.4530000000 10.42701 +0.4540000000 10.21952 +0.4550000000 10.01203 +0.4560000000 9.80454 +0.4570000000 9.59705 +0.4580000000 9.38956 +0.4590000000 9.18207 +0.4600000000 8.97458 +0.4610000000 8.76709 +0.4620000000 8.55960 +0.4630000000 8.35211 +0.4640000000 8.14462 +0.4650000000 7.93713 +0.4660000000 7.72964 +0.4670000000 7.52214 +0.4680000000 7.31465 +0.4690000000 7.10716 +0.4700000000 6.89967 +0.4710000000 6.69218 +0.4720000000 6.48469 +0.4730000000 6.27720 +0.4740000000 6.06971 +0.4750000000 5.86222 +0.4760000000 5.65473 +0.4770000000 5.44724 +0.4780000000 5.23975 +0.4790000000 5.03226 +0.4800000000 4.82477 +0.4810000000 4.61442 +0.4820000000 4.40407 +0.4830000000 4.19372 +0.4840000000 3.98337 +0.4850000000 3.77302 +0.4860000000 3.56267 +0.4870000000 3.35232 +0.4880000000 3.14197 +0.4890000000 2.93162 +0.4900000000 2.72127 +0.4910000000 2.51092 +0.4920000000 2.30057 +0.4930000000 2.09022 +0.4940000000 1.87987 +0.4950000000 1.66952 +0.4960000000 1.45917 +0.4970000000 1.24882 +0.4980000000 1.03847 +0.4990000000 0.82812 +0.5000000000 0.61777 +0.5010000000 0.40742 +0.5020000000 0.19708 +0.5030000000 -0.01327 +0.5040000000 -0.22362 +0.5050000000 -0.43397 +0.5060000000 -0.64432 +0.5070000000 -0.85467 +0.5080000000 -1.06502 +0.5090000000 -1.27537 +0.5100000000 -1.48572 +0.5110000000 -1.69607 +0.5120000000 -1.90642 +0.5130000000 -2.11677 +0.5140000000 -2.32712 +0.5150000000 -2.53747 +0.5160000000 -2.74782 +0.5170000000 -2.95817 +0.5180000000 -3.16852 +0.5190000000 -3.37887 +0.5200000000 -3.58922 +0.5210000000 -3.78943 +0.5220000000 -3.98965 +0.5230000000 -4.18986 +0.5240000000 -4.39008 +0.5250000000 -4.59029 +0.5260000000 -4.79051 +0.5270000000 -4.99072 +0.5280000000 -5.19094 +0.5290000000 -5.39115 +0.5300000000 -5.59137 +0.5310000000 -5.79158 +0.5320000000 -5.99180 +0.5330000000 -6.19202 +0.5340000000 -6.39223 +0.5350000000 -6.59245 +0.5360000000 -6.79266 +0.5370000000 -6.99288 +0.5380000000 -7.19309 +0.5390000000 -7.39331 +0.5400000000 -7.59352 +0.5410000000 -7.79374 +0.5420000000 -7.99395 +0.5430000000 -8.19417 +0.5440000000 -8.39438 +0.5450000000 -8.59460 +0.5460000000 -8.79481 +0.5470000000 -8.99503 +0.5480000000 -9.19524 +0.5490000000 -9.39546 +0.5500000000 -9.59567 +0.5510000000 -9.79589 +0.5520000000 -9.99610 +0.5530000000 -10.19632 +0.5540000000 -10.39653 +0.5550000000 -10.59675 +0.5560000000 -10.79696 +0.5570000000 -10.99718 +0.5580000000 -11.19739 +0.5590000000 -11.39761 +0.5600000000 -11.59782 +0.5610000000 -11.68309 +0.5620000000 -11.76835 +0.5630000000 -11.85361 +0.5640000000 -11.93888 +0.5650000000 -12.02414 +0.5660000000 -12.10940 +0.5670000000 -12.19466 +0.5680000000 -12.27993 +0.5690000000 -12.36519 +0.5700000000 -12.45045 +0.5710000000 -12.53572 +0.5720000000 -12.62098 +0.5730000000 -12.70624 +0.5740000000 -12.79151 +0.5750000000 -12.87677 +0.5760000000 -12.96203 +0.5770000000 -13.04730 +0.5780000000 -13.13256 +0.5790000000 -13.21782 +0.5800000000 -13.30308 +0.5810000000 -13.38835 +0.5820000000 -13.47361 +0.5830000000 -13.55887 +0.5840000000 -13.64414 +0.5850000000 -13.72940 +0.5860000000 -13.81466 +0.5870000000 -13.89993 +0.5880000000 -13.98519 +0.5890000000 -14.07045 +0.5900000000 -14.15572 +0.5910000000 -14.24098 +0.5920000000 -14.32624 +0.5930000000 -14.41150 +0.5940000000 -14.49677 +0.5950000000 -14.58203 +0.5960000000 -14.66729 +0.5970000000 -14.75256 +0.5980000000 -14.83782 +0.5990000000 -14.92308 +0.6000000000 -15.00835 +0.6010000000 -14.87164 +0.6020000000 -14.73494 +0.6030000000 -14.59824 +0.6040000000 -14.46154 +0.6050000000 -14.32484 +0.6060000000 -14.18814 +0.6070000000 -14.05143 +0.6080000000 -13.91473 +0.6090000000 -13.77803 +0.6100000000 -13.64133 +0.6110000000 -13.50463 +0.6120000000 -13.36793 +0.6130000000 -13.23122 +0.6140000000 -13.09452 +0.6150000000 -12.95782 +0.6160000000 -12.82112 +0.6170000000 -12.68442 +0.6180000000 -12.54772 +0.6190000000 -12.41101 +0.6200000000 -12.27431 +0.6210000000 -12.13761 +0.6220000000 -12.00091 +0.6230000000 -11.86421 +0.6240000000 -11.72750 +0.6250000000 -11.59080 +0.6260000000 -11.45410 +0.6270000000 -11.31740 +0.6280000000 -11.18070 +0.6290000000 -11.04400 +0.6300000000 -10.90729 +0.6310000000 -10.77059 +0.6320000000 -10.63389 +0.6330000000 -10.49719 +0.6340000000 -10.36049 +0.6350000000 -10.22379 +0.6360000000 -10.08708 +0.6370000000 -9.95038 +0.6380000000 -9.81368 +0.6390000000 -9.67698 +0.6400000000 -9.54028 +0.6410000000 -9.39349 +0.6420000000 -9.24671 +0.6430000000 -9.09992 +0.6440000000 -8.95314 +0.6450000000 -8.80635 +0.6460000000 -8.65956 +0.6470000000 -8.51278 +0.6480000000 -8.36599 +0.6490000000 -8.21921 +0.6500000000 -8.07242 +0.6510000000 -7.92564 +0.6520000000 -7.77885 +0.6530000000 -7.63207 +0.6540000000 -7.48528 +0.6550000000 -7.33850 +0.6560000000 -7.19171 +0.6570000000 -7.04493 +0.6580000000 -6.89814 +0.6590000000 -6.75136 +0.6600000000 -6.60457 +0.6610000000 -6.45779 +0.6620000000 -6.31100 +0.6630000000 -6.16422 +0.6640000000 -6.01743 +0.6650000000 -5.87064 +0.6660000000 -5.72386 +0.6670000000 -5.57707 +0.6680000000 -5.43029 +0.6690000000 -5.28350 +0.6700000000 -5.13672 +0.6710000000 -4.98993 +0.6720000000 -4.84315 +0.6730000000 -4.69636 +0.6740000000 -4.54958 +0.6750000000 -4.40279 +0.6760000000 -4.25601 +0.6770000000 -4.10922 +0.6780000000 -3.96244 +0.6790000000 -3.81565 +0.6800000000 -3.66887 +0.6810000000 -3.54863 +0.6820000000 -3.42839 +0.6830000000 -3.30816 +0.6840000000 -3.18792 +0.6850000000 -3.06768 +0.6860000000 -2.94745 +0.6870000000 -2.82721 +0.6880000000 -2.70698 +0.6890000000 -2.58674 +0.6900000000 -2.46650 +0.6910000000 -2.34627 +0.6920000000 -2.22603 +0.6930000000 -2.10579 +0.6940000000 -1.98556 +0.6950000000 -1.86532 +0.6960000000 -1.74509 +0.6970000000 -1.62485 +0.6980000000 -1.50461 +0.6990000000 -1.38438 +0.7000000000 -1.26414 +0.7010000000 -1.14390 +0.7020000000 -1.02367 +0.7030000000 -0.90343 +0.7040000000 -0.78320 +0.7050000000 -0.66296 +0.7060000000 -0.54272 +0.7070000000 -0.42249 +0.7080000000 -0.30225 +0.7090000000 -0.18201 +0.7100000000 -0.06178 +0.7110000000 0.05846 +0.7120000000 0.17870 +0.7130000000 0.29893 +0.7140000000 0.41917 +0.7150000000 0.53940 +0.7160000000 0.65964 +0.7170000000 0.77988 +0.7180000000 0.90011 +0.7190000000 1.02035 +0.7200000000 1.14059 +0.7210000000 1.24282 +0.7220000000 1.34506 +0.7230000000 1.44730 +0.7240000000 1.54954 +0.7250000000 1.65178 +0.7260000000 1.75402 +0.7270000000 1.85626 +0.7280000000 1.95850 +0.7290000000 2.06074 +0.7300000000 2.16298 +0.7310000000 2.26522 +0.7320000000 2.36745 +0.7330000000 2.46969 +0.7340000000 2.57193 +0.7350000000 2.67417 +0.7360000000 2.77641 +0.7370000000 2.87865 +0.7380000000 2.98089 +0.7390000000 3.08313 +0.7400000000 3.18537 +0.7410000000 3.28761 +0.7420000000 3.38985 +0.7430000000 3.49209 +0.7440000000 3.59432 +0.7450000000 3.69656 +0.7460000000 3.79880 +0.7470000000 3.90104 +0.7480000000 4.00328 +0.7490000000 4.10552 +0.7500000000 4.20776 +0.7510000000 4.31000 +0.7520000000 4.41224 +0.7530000000 4.51448 +0.7540000000 4.61672 +0.7550000000 4.71895 +0.7560000000 4.82119 +0.7570000000 4.92343 +0.7580000000 5.02567 +0.7590000000 5.12791 +0.7600000000 5.23015 +0.7610000000 5.21090 +0.7620000000 5.19165 +0.7630000000 5.17241 +0.7640000000 5.15316 +0.7650000000 5.13391 +0.7660000000 5.11466 +0.7670000000 5.09541 +0.7680000000 5.07617 +0.7690000000 5.05692 +0.7700000000 5.03767 +0.7710000000 5.01842 +0.7720000000 4.99917 +0.7730000000 4.97993 +0.7740000000 4.96068 +0.7750000000 4.94143 +0.7760000000 4.92218 +0.7770000000 4.90293 +0.7780000000 4.88369 +0.7790000000 4.86444 +0.7800000000 4.84519 +0.7810000000 4.82594 +0.7820000000 4.80669 +0.7830000000 4.78745 +0.7840000000 4.76820 +0.7850000000 4.74895 +0.7860000000 4.72970 +0.7870000000 4.71045 +0.7880000000 4.69121 +0.7890000000 4.67196 +0.7900000000 4.65271 +0.7910000000 4.63346 +0.7920000000 4.61421 +0.7930000000 4.59497 +0.7940000000 4.57572 +0.7950000000 4.55647 +0.7960000000 4.53722 +0.7970000000 4.51797 +0.7980000000 4.49873 +0.7990000000 4.47948 +0.8000000000 4.46023 +0.8010000000 4.46546 +0.8020000000 4.47070 +0.8030000000 4.47593 +0.8040000000 4.48116 +0.8050000000 4.48640 +0.8060000000 4.49163 +0.8070000000 4.49686 +0.8080000000 4.50210 +0.8090000000 4.50733 +0.8100000000 4.51256 +0.8110000000 4.51780 +0.8120000000 4.52303 +0.8130000000 4.52826 +0.8140000000 4.53349 +0.8150000000 4.53873 +0.8160000000 4.54396 +0.8170000000 4.54919 +0.8180000000 4.55443 +0.8190000000 4.55966 +0.8200000000 4.56489 +0.8210000000 4.57013 +0.8220000000 4.57536 +0.8230000000 4.58059 +0.8240000000 4.58583 +0.8250000000 4.59106 +0.8260000000 4.59629 +0.8270000000 4.60153 +0.8280000000 4.60676 +0.8290000000 4.61199 +0.8300000000 4.61723 +0.8310000000 4.62246 +0.8320000000 4.62769 +0.8330000000 4.63293 +0.8340000000 4.63816 +0.8350000000 4.64339 +0.8360000000 4.64863 +0.8370000000 4.65386 +0.8380000000 4.65909 +0.8390000000 4.66433 +0.8400000000 4.66956 +0.8410000000 4.65687 +0.8420000000 4.64418 +0.8430000000 4.63150 +0.8440000000 4.61881 +0.8450000000 4.60612 +0.8460000000 4.59343 +0.8470000000 4.58075 +0.8480000000 4.56806 +0.8490000000 4.55537 +0.8500000000 4.54268 +0.8510000000 4.53000 +0.8520000000 4.51731 +0.8530000000 4.50462 +0.8540000000 4.49194 +0.8550000000 4.47925 +0.8560000000 4.46656 +0.8570000000 4.45387 +0.8580000000 4.44119 +0.8590000000 4.42850 +0.8600000000 4.41581 +0.8610000000 4.40312 +0.8620000000 4.39044 +0.8630000000 4.37775 +0.8640000000 4.36506 +0.8650000000 4.35237 +0.8660000000 4.33969 +0.8670000000 4.32700 +0.8680000000 4.31431 +0.8690000000 4.30163 +0.8700000000 4.28894 +0.8710000000 4.27625 +0.8720000000 4.26356 +0.8730000000 4.25088 +0.8740000000 4.23819 +0.8750000000 4.22550 +0.8760000000 4.21281 +0.8770000000 4.20013 +0.8780000000 4.18744 +0.8790000000 4.17475 +0.8800000000 4.16206 +0.8810000000 4.01696 +0.8820000000 3.87186 +0.8830000000 3.72676 +0.8840000000 3.58166 +0.8850000000 3.43656 +0.8860000000 3.29146 +0.8870000000 3.14636 +0.8880000000 3.00126 +0.8890000000 2.85616 +0.8900000000 2.71106 +0.8910000000 2.56596 +0.8920000000 2.42086 +0.8930000000 2.27576 +0.8940000000 2.13066 +0.8950000000 1.98556 +0.8960000000 1.84046 +0.8970000000 1.69536 +0.8980000000 1.55026 +0.8990000000 1.40516 +0.9000000000 1.26006 +0.9010000000 1.11496 +0.9020000000 0.96985 +0.9030000000 0.82475 +0.9040000000 0.67965 +0.9050000000 0.53455 +0.9060000000 0.38945 +0.9070000000 0.24435 +0.9080000000 0.09925 +0.9090000000 -0.04585 +0.9100000000 -0.19095 +0.9110000000 -0.33605 +0.9120000000 -0.48115 +0.9130000000 -0.62625 +0.9140000000 -0.77135 +0.9150000000 -0.91645 +0.9160000000 -1.06155 +0.9170000000 -1.20665 +0.9180000000 -1.35175 +0.9190000000 -1.49685 +0.9200000000 -1.64195 +0.9210000000 -1.83280 +0.9220000000 -2.02365 +0.9230000000 -2.21449 +0.9240000000 -2.40534 +0.9250000000 -2.59618 +0.9260000000 -2.78703 +0.9270000000 -2.97788 +0.9280000000 -3.16872 +0.9290000000 -3.35957 +0.9300000000 -3.55042 +0.9310000000 -3.74126 +0.9320000000 -3.93211 +0.9330000000 -4.12296 +0.9340000000 -4.31380 +0.9350000000 -4.50465 +0.9360000000 -4.69549 +0.9370000000 -4.88634 +0.9380000000 -5.07719 +0.9390000000 -5.26803 +0.9400000000 -5.45888 +0.9410000000 -5.64973 +0.9420000000 -5.84057 +0.9430000000 -6.03142 +0.9440000000 -6.22227 +0.9450000000 -6.41311 +0.9460000000 -6.60396 +0.9470000000 -6.79480 +0.9480000000 -6.98565 +0.9490000000 -7.17650 +0.9500000000 -7.36734 +0.9510000000 -7.55819 +0.9520000000 -7.74904 +0.9530000000 -7.93988 +0.9540000000 -8.13073 +0.9550000000 -8.32158 +0.9560000000 -8.51242 +0.9570000000 -8.70327 +0.9580000000 -8.89411 +0.9590000000 -9.08496 +0.9600000000 -9.27581 +0.9610000000 -10.25107 +0.9620000000 -11.22634 +0.9630000000 -12.20161 +0.9640000000 -13.17687 +0.9650000000 -14.15214 +0.9660000000 -15.12741 +0.9670000000 -16.10268 +0.9680000000 -17.07794 +0.9690000000 -18.05321 +0.9700000000 -19.02848 +0.9710000000 -20.00374 +0.9720000000 -20.97901 +0.9730000000 -21.95428 +0.9740000000 -22.92954 +0.9750000000 -23.90481 +0.9760000000 -24.88008 +0.9770000000 -25.85534 +0.9780000000 -26.83061 +0.9790000000 -27.80588 +0.9800000000 -28.78114 +0.9810000000 -29.75641 +0.9820000000 -30.73168 +0.9830000000 -31.70694 +0.9840000000 -32.68221 +0.9850000000 -33.65748 +0.9860000000 -34.63275 +0.9870000000 -35.60801 +0.9880000000 -36.58328 +0.9890000000 -37.55855 +0.9900000000 -38.53381 +0.9910000000 -39.50908 +0.9920000000 -40.48435 +0.9930000000 -41.45961 +0.9940000000 -42.43488 +0.9950000000 -43.41015 +0.9960000000 -44.38541 +0.9970000000 -45.36068 +0.9980000000 -46.33595 +0.9990000000 -47.31121 +1.0000000000 -48.28648 \ No newline at end of file diff --git a/documentation/multi_physics/user-guide/cfd/img/svmp_ug_ex1_model_and_bc.png b/documentation/multi_physics/user-guide/cfd/img/svmp_ug_ex1_model_and_bc.png new file mode 100644 index 00000000..8ff48bbe Binary files /dev/null and b/documentation/multi_physics/user-guide/cfd/img/svmp_ug_ex1_model_and_bc.png differ diff --git a/documentation/multi_physics/user-guide/cfd/img/svmp_ug_ex1_model_and_surfaces.png b/documentation/multi_physics/user-guide/cfd/img/svmp_ug_ex1_model_and_surfaces.png new file mode 100644 index 00000000..064ca5bb Binary files /dev/null and b/documentation/multi_physics/user-guide/cfd/img/svmp_ug_ex1_model_and_surfaces.png differ diff --git a/documentation/multi_physics/user-guide/cfd/img/svmp_ug_ex1_paraview_interface.png b/documentation/multi_physics/user-guide/cfd/img/svmp_ug_ex1_paraview_interface.png new file mode 100644 index 00000000..781a5839 Binary files /dev/null and b/documentation/multi_physics/user-guide/cfd/img/svmp_ug_ex1_paraview_interface.png differ diff --git a/documentation/multi_physics/user-guide/cfd/img/svmp_ug_ex1_results_pressure.png b/documentation/multi_physics/user-guide/cfd/img/svmp_ug_ex1_results_pressure.png new file mode 100644 index 00000000..38bb4ffd Binary files /dev/null and b/documentation/multi_physics/user-guide/cfd/img/svmp_ug_ex1_results_pressure.png differ diff --git a/documentation/multi_physics/user-guide/cfd/img/svmp_ug_ex1_results_velocity_1.png b/documentation/multi_physics/user-guide/cfd/img/svmp_ug_ex1_results_velocity_1.png new file mode 100644 index 00000000..cfd2cb86 Binary files /dev/null and b/documentation/multi_physics/user-guide/cfd/img/svmp_ug_ex1_results_velocity_1.png differ diff --git a/documentation/multi_physics/user-guide/cfd/img/svmp_ug_ex1_results_velocity_2.png b/documentation/multi_physics/user-guide/cfd/img/svmp_ug_ex1_results_velocity_2.png new file mode 100644 index 00000000..cdfaf019 Binary files /dev/null and b/documentation/multi_physics/user-guide/cfd/img/svmp_ug_ex1_results_velocity_2.png differ diff --git a/documentation/multi_physics/user-guide/cfd/img/svmp_ug_ex1_terminal_output.png b/documentation/multi_physics/user-guide/cfd/img/svmp_ug_ex1_terminal_output.png new file mode 100644 index 00000000..c795e3bd Binary files /dev/null and b/documentation/multi_physics/user-guide/cfd/img/svmp_ug_ex1_terminal_output.png differ diff --git a/documentation/multi_physics/user-guide/cfd/img/svmp_ug_ex2_flow_waveform.png b/documentation/multi_physics/user-guide/cfd/img/svmp_ug_ex2_flow_waveform.png new file mode 100644 index 00000000..01e44797 Binary files /dev/null and b/documentation/multi_physics/user-guide/cfd/img/svmp_ug_ex2_flow_waveform.png differ diff --git a/documentation/multi_physics/user-guide/cfd/img/svmp_ug_ex2_paraview_load_stack.png b/documentation/multi_physics/user-guide/cfd/img/svmp_ug_ex2_paraview_load_stack.png new file mode 100644 index 00000000..f45ef747 Binary files /dev/null and b/documentation/multi_physics/user-guide/cfd/img/svmp_ug_ex2_paraview_load_stack.png differ diff --git a/documentation/multi_physics/user-guide/cfd/img/svmp_ug_ex2_paraview_time_bar.png b/documentation/multi_physics/user-guide/cfd/img/svmp_ug_ex2_paraview_time_bar.png new file mode 100644 index 00000000..0bd09369 Binary files /dev/null and b/documentation/multi_physics/user-guide/cfd/img/svmp_ug_ex2_paraview_time_bar.png differ diff --git a/documentation/multi_physics/user-guide/cfd/img/svmp_ug_ex2_paraview_time_plot.png b/documentation/multi_physics/user-guide/cfd/img/svmp_ug_ex2_paraview_time_plot.png new file mode 100644 index 00000000..b731ca7c Binary files /dev/null and b/documentation/multi_physics/user-guide/cfd/img/svmp_ug_ex2_paraview_time_plot.png differ diff --git a/documentation/multi_physics/user-guide/cfd/img/svmp_ug_ex2_rcr_figure.png b/documentation/multi_physics/user-guide/cfd/img/svmp_ug_ex2_rcr_figure.png new file mode 100644 index 00000000..866a6da4 Binary files /dev/null and b/documentation/multi_physics/user-guide/cfd/img/svmp_ug_ex2_rcr_figure.png differ diff --git a/documentation/multi_physics/user-guide/cfd/img/svmp_ug_ex2_selection_point.png b/documentation/multi_physics/user-guide/cfd/img/svmp_ug_ex2_selection_point.png new file mode 100644 index 00000000..7d6f91ef Binary files /dev/null and b/documentation/multi_physics/user-guide/cfd/img/svmp_ug_ex2_selection_point.png differ diff --git a/documentation/multi_physics/user-guide/cfd/img/svmp_ug_ex2_velocity_pressure_lag_waveform.png b/documentation/multi_physics/user-guide/cfd/img/svmp_ug_ex2_velocity_pressure_lag_waveform.png new file mode 100644 index 00000000..589dd06a Binary files /dev/null and b/documentation/multi_physics/user-guide/cfd/img/svmp_ug_ex2_velocity_pressure_lag_waveform.png differ diff --git a/documentation/multi_physics/user-guide/cfd/introduction/readme.md b/documentation/multi_physics/user-guide/cfd/introduction/readme.md new file mode 100644 index 00000000..de4994f6 --- /dev/null +++ b/documentation/multi_physics/user-guide/cfd/introduction/readme.md @@ -0,0 +1,6 @@ + +# *svMultiPhysics* User Guide + +## Introduction + +The purpose of this User Guide is to provide users with information and best practices for setting up simulations in *svMultiPhysics*. Specifically, the User Guide will explain the conceptual steps needed to set up a simulation along with the commands needed to execute them in the *svMultiPhysics* .xml input file. This guide uses worked examples of increasing complexity to illustrate key concepts in running computational fluid dynamics simulations. These examples are written to be approachable even for complete newcomers to computational fluid dynamics and are designed to be completed sequentially. But if you have prior experience with computational fluid dynamics, you can use the side bar to skip to a section of your interest. This guide is also designed to be independent of the front-end SimVascular interface so that *svMultiPhysics* can be used to set up a simulation if provided the right input files. The geometry and mesh files used for this User Guide are from the "DemoProject" from the SimVascular project. You can [download the SimVascular DemoProject from the SimTK website here](https://simtk.org/frs/?group_id=930). diff --git a/documentation/svmp_user_guide_staging.html b/documentation/svmp_user_guide_staging.html new file mode 100644 index 00000000..2becf5fe --- /dev/null +++ b/documentation/svmp_user_guide_staging.html @@ -0,0 +1,279 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SimVascular Docs + + + + + + + +
+ +
+ +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+

+
+ + + + + + + + + + + + + + + + + + + + +