Exemple #1
0
class OneBeamTwoDofs:
    '''
    node_i from 1 to node_num
    '''

    def __init__(
            self,
            # for force_data
            force_filename,
            save_directory,
            filetypes,
            # for beam
            mass_ratio,
            top_tension,
            horizontal,
            tension_include_boyancy,
            length,
            diameter,
            bending_stiffness,
            fluid_density,
            fluid_velocity):
        time, inline_force, crossflow_force =\
            numpy.loadtxt(force_filename, unpack=True)

        self._fluid_density = fluid_density
        self._fluid_velocity = fluid_velocity

        self._inline_force_data = ForceData(
            time=time, force=inline_force)
        self._crossflow_force_data = ForceData(
            time=time, force=crossflow_force)
        self._beam = Beam(
            node_number=self._crossflow_force_data.node_number,
            mass_ratio=mass_ratio,
            top_tension=top_tension,
            horizontal=horizontal,
            tension_include_boyancy=tension_include_boyancy,
            length=length,
            diameter=diameter,
            bending_stiffness=bending_stiffness)
        self._save_directory = save_directory
        if self._save_directory[-1] != '/':
            self._save_directory += '/'

        self._filetypes = filetypes

        self._beam.plot_modal_shapes(
            self._append_filetypes('modal_shapes'), max_order=4)

        with open(self._save_directory + 'natural_frequencies.txt',
                  'wb') as file_:
            numpy.savetxt(
                file_, self._beam.natural_frequencies[:20], fmt='%.4e')

    def _append_filetypes(self, filename):
        return [
            self._save_directory + filename + '.' + filetype
            for filetype in self._filetypes
        ]

    # C_D
    def plot_inline_force(
            self,
            # for force_analysis
            start_time,
            end_time,
            medium_step,
            short_step,
            normalized_time_by_value,
            normalized_time_by_symbol,
            force_min,
            force_max,
            force_delta,
            force_std,
            # velocity_min,
            # velocity_max,
            frequency_min,
            frequency_max,
            normalized_frequency_by_value,
            normalized_frequency_by_symbol,
            mode_number_min,
            mode_number_max,
            modal_weight_force_delta,
            # reduced_velocity_max,
            # period,
            make_animation=False,
            wavelet_analysis=False):
        inline_force_analysis =\
                ForceAnalysis(
                        force_data=self._inline_force_data,
                        beam=self._beam,
                        fluid_density=self._fluid_density,
                        fluid_velocity=self._fluid_velocity,
                        start_time=start_time,
                        end_time=end_time,
                        normalized_time_by=normalized_time_by_value,
                        frequency_min=frequency_min,
                        frequency_max=frequency_max,
                        normalized_frequency_by=normalized_frequency_by_value,
                        mode_number_min=mode_number_min,
                        mode_number_max=mode_number_max,
                        modal_analysis=True,
                        wavelet_analysis=wavelet_analysis,
                        frequency_domain_analysis=True)
        inline_force_visulization = ForceVisualization(
            inline_force_analysis)

        start_time = inline_force_visulization.force_analysis.start_time
        end_time = inline_force_visulization.force_analysis.end_time

        inline_force_visulization.subplot_power_spectral_density(
            self._append_filetypes('inline_power_spectral_density_subplot'),
            xlabel=r'$f_D\cdot {:s}^{{-1}}$'.format(normalized_frequency_by_symbol),
            )
        inline_force_visulization.contourf_power_spectral_density(
            self._append_filetypes('inline_power_spectral_density_contourf'),
            xlabel=r'$f_D\cdot {:s}^{{-1}}$'.format(normalized_frequency_by_symbol),
            contourf_num=51)
        inline_force_visulization.contour_power_spectral_density(
            self._append_filetypes('inline_power_spectral_density_contour'),
            xlabel=r'$f_D\cdot {:s}^{{-1}}$'.format(normalized_frequency_by_symbol),
            contour_num=11)
        inline_force_visulization.subplot_modal_power_spectral_density(
                self._append_filetypes(
                    'inline_modal_power_spectral_density_subplot'),
                xlabel=r'$f_D^m\cdot {:s}^{{-1}}$'.format(normalized_frequency_by_symbol),
                figsize=(style.SINGLE_COLUMN_WIDTH, style.SINGLE_COLUMN_SHORT_HEIGHT)
                )
        inline_force_visulization.contourf_wavelet_dominant_frequency(
            self._append_filetypes(
                'inline_wavelet_dominant_frequency_contourf'),
            start_time=start_time,
            end_time=end_time,
            xlabel=r'$t\cdot {:s}^{{-1}}$'.format(normalized_time_by_symbol),
            contourf_num=51)
        inline_force_visulization.contour_wavelet_dominant_frequency(
            self._append_filetypes(
                'inline_wavelet_dominant_frequency_contour'),
            start_time=start_time,
            end_time=end_time,
            xlabel=r'$t\cdot {:s}^{{-1}}$'.format(normalized_time_by_symbol),
            contour_num=11)

        inline_force_visulization.subplot_wavelet_dominant_frequency(
            out_filenames=self._append_filetypes('inline_subplot_wavelet'),
            start_time=start_time,
            end_time=end_time,
            xlabel=r'$t\cdot {:s}^{{-1}}$'.format(normalized_time_by_symbol),
            ymin=frequency_min / normalized_frequency_by_value,
            ymax=frequency_max / normalized_frequency_by_value,
            ylabel=r'$f_D\cdot {:s}^{{-1}}$'.format(normalized_frequency_by_symbol),
            num=9)

        # animation
        if make_animation:
            inline_force_visulization.make_force_animation_along_time(
                [self._save_directory + 'inline_force_animation.gif'],
                start_time=start_time,
                end_time=end_time,
                xlabel=r'$C_D$',
                xmin=force_min,
                xmax=force_max)

        for node_i in range(
                10,
                inline_force_visulization.force_analysis.node_number,
                10):
            inline_force_visulization.contourf_wavelet(
                node_i,
                self._append_filetypes(
                    'inline_wavelet_contourf_node_{:d}'.format(node_i)),
                start_time=start_time,
                end_time=end_time,
                xlabel=r'$t\cdot {:s}^{{-1}}$'.format(normalized_time_by_symbol),
                ylabel=r'$f_D\cdot {:s}^{{-1}}$'.format(normalized_frequency_by_symbol),
                contourf_num=51)
            inline_force_visulization.contour_wavelet(
                node_i,
                self._append_filetypes(
                    'inline_wavelet_contour_node_{:d}'.format(node_i)),
                start_time=start_time,
                end_time=end_time,
                xlabel=r'$t\cdot {:s}^{{-1}}$'.format(normalized_time_by_symbol),
                ylabel=r'$f_D\cdot {:s}^{{-1}}$'.format(normalized_frequency_by_symbol),
                contour_num=11)
            inline_force_visulization.plot_wavelet_dominant_frequency(
                self._append_filetypes(
                    'inline_wavelet_dominant_frequency_node_{:d}'.format(
                        node_i)),
                node_i,
                start_time=start_time,
                end_time=end_time,
                xlabel=r'$t\cdot {:s}^{{-1}}$'.format(normalized_time_by_symbol),
                ylabel=r'$f_D\cdot {:s}^{{-1}}$'.format(normalized_frequency_by_symbol),
                )

        inline_force_visulization.subplot_span_force(
            out_filenames=self._append_filetypes(
                'inline_subplot_force'),
            start_time=start_time,
            end_time=end_time,
            xlabel=r'$t\cdot {:s}^{{-1}}$'.format(normalized_time_by_symbol),
            force_label=r'$C_D$',
            force_min=force_min,
            force_max=force_max)

        inline_force_visulization.subplot_span_force_deviation(
            out_filenames=self._append_filetypes(
                'inline_subplot_force_deviation'),
            start_time=start_time,
            end_time=end_time,
            xlabel=r'$t\cdot {:s}^{{-1}}$'.format(normalized_time_by_symbol),
            force_deviation_label=r'$C_D-\overline{C_D}$',
            force_deviation_min=-force_delta,
            force_deviation_max=force_delta)

        for node_i in [5, 10, 15]:
            inline_force_visulization.plot_time_history_force(
                out_filenames=self._append_filetypes(
                    'inline_force_node_{:d}'.format(node_i)),
                node_i=node_i,
                start_time=start_time,
                end_time=end_time,
                xlabel=r'$t\cdot {:s}^{{-1}}$'.format(normalized_time_by_symbol),
                force_label=r'$C_D$',
                force_min=force_min,
                force_max=force_max,
                grid=True,
                # figsize=(style.SINGLE_COLUMN_WIDTH,
                #          style.SINGLE_COLUMN_SHORT_HEIGHT / 1.5)
                )

            inline_force_visulization.plot_time_history_force_deviation(
                out_filenames=self._append_filetypes(
                    'inline_force_deviation_node_{:d}'.format(node_i)),
                node_i=node_i,
                start_time=start_time,
                end_time=end_time,
                xlabel=r'$t\cdot {:s}^{{-1}}$'.format(normalized_time_by_symbol),
                force_deviation_label=r'$C_D-\overline{C_D}$',
                force_deviation_min=-force_delta,
                force_deviation_max=force_delta,
                # figsize=(style.SINGLE_COLUMN_WIDTH,
                #          style.SINGLE_COLUMN_SHORT_HEIGHT / 1.5)
                )

        inline_force_visulization.subplot_modal_weight_force(
            out_filenames=self._append_filetypes('inline_mode'),
            start_time=start_time,
            end_time=end_time,
            xlabel=r'$t\cdot {:s}^{{-1}}$'.format(normalized_time_by_symbol),
            ylabel=r'$w_D^m$',
            ymin=-modal_weight_force_delta,
            ymax=modal_weight_force_delta,
            figsize=(style.SINGLE_COLUMN_WIDTH, style.SINGLE_COLUMN_SHORT_HEIGHT)
            )

        inline_force_mean = inline_force_visulization.plot_force_mean(
            self._append_filetypes('inline_force_mean_{:.1f}_{:.1f}'.
                                   format(start_time, end_time)),
            xlabel=r'$C_D$',
            xmin=force_min,
            xmax=force_max, )
        with open(self._save_directory +
                  'inline_force_mean_{:.1f}_{:.1f}.txt'.format(
                      start_time, end_time), 'w') as outfile:
            json.dump(inline_force_mean, outfile)
        inline_std = inline_force_visulization.plot_force_std(
            self._append_filetypes('inline_force_std_{:.1f}_{:.1f}'.
                                   format(start_time, end_time)),
            xlabel=r'$\sigma_{C_D}$',
            xmin=0,
            xmax=force_std, )
        numpy.savetxt(self._save_directory +
                      'inline_force_std_{:.1f}_{:.1f}.txt'.format(
                          start_time, end_time), inline_std)


        # end_time += (-medium_step)
        end_time += -medium_step

        for time in numpy.arange(start_time, end_time, medium_step):
            inline_force_visulization.contourf_contour_spatio_temporal_force(
                self._append_filetypes(
                    'inline_spatio_temporal_force_{:.1f}'.format(time)),
                start_time=time,
                end_time=(time + medium_step),
                xlabel=r'$t\cdot {:s}^{{-1}}$'.format(normalized_time_by_symbol),
                colorbar_min=-force_delta,
                colorbar_max=force_delta,
                contourf_num=51,
                contour_num=11,
                colorbar_zlabel=r'$C_D$')
            inline_force_visulization.contour_spatio_temporal_force(
                self._append_filetypes(
                    'inline_spatio_temporal_force_contour_{:.1f}'.
                    format(time)),
                start_time=time,
                end_time=(time + medium_step),
                xlabel=r'$t\cdot {:s}^{{-1}}$'.format(normalized_time_by_symbol),
                colorbar_min=-force_delta,
                colorbar_max=force_delta,
                contour_num=11, )

        end_time += (medium_step - short_step)

        for time in numpy.arange(start_time, end_time, short_step):
            inline_force_visulization.plot_outline(
                self._append_filetypes('inline_outline_{:.1f}'.format(time)),
                xlabel=r'$C_D$',
                xmin=force_min,
                xmax=force_max,
                start_time=time,
                end_time=(time + short_step),
                line_number=25)
            inline_force_visulization.plot_deviation_outline(
                self._append_filetypes(
                    'inline_deviation_outline_{:.1f}'.format(time)),
                xlabel=r'$C_D-\overline{C_D}$',
                xmin=-force_delta,
                xmax=force_delta,
                start_time=time,
                end_time=(time + short_step),
                line_number=25)

        with open(self._save_directory + 'inline_oscillatory_frequencies.txt',
                  'wb') as file_:
            numpy.savetxt(
                file_,
                inline_force_analysis.oscillatory_frequencies,
                fmt='%.4e')
        print('Inline plotting finished.')

    # C_L
    def plot_crossflow_force(
            self,
            # for force_analysis
            start_time,
            end_time,
            # ,
            medium_step,
            short_step,
            normalized_time_by_value,
            normalized_time_by_symbol,
            force_min,
            force_max,
            force_delta,
            force_std,
            # velocity_min,
            # velocity_max,
            frequency_min,
            frequency_max,
            normalized_frequency_by_value,
            normalized_frequency_by_symbol,
            mode_number_min,
            mode_number_max,
            modal_weight_force_delta,
            reduced_velocity_max,
            period,
            make_animation=False,
            wavelet_analysis=False):
        crossflow_force_analysis = ForceAnalysis(
            force_data=self._crossflow_force_data,
            beam=self._beam,
            fluid_density=self._fluid_density,
            fluid_velocity=self._fluid_velocity,
            start_time=start_time,
            end_time=end_time,
            normalized_time_by=normalized_time_by_value,
            frequency_min=frequency_min,
            frequency_max=frequency_max,
            normalized_frequency_by=normalized_frequency_by_value,
            mode_number_min=mode_number_min,
            mode_number_max=mode_number_max,
            modal_analysis=True,
            frequency_domain_analysis=True,
            wavelet_analysis=wavelet_analysis, )
        crossflow_force_visulization = ForceVisualization(
            crossflow_force_analysis)

        start_time = crossflow_force_visulization.force_analysis.start_time
        end_time = crossflow_force_visulization.force_analysis.end_time

        crossflow_force_visulization.subplot_power_spectral_density(
            self._append_filetypes('crossflow_power_spectral_density_subplot'),
            xlabel=r'$f_L\cdot {:s}^{{-1}}$'.format(normalized_frequency_by_symbol),
            )
        crossflow_force_visulization.subplot_modal_power_spectral_density(
            self._append_filetypes(
                'crossflow_modal_power_spectral_density_subplot'),
            xlabel=r'$f^m_L\cdot {:s}^{{-1}}$'.format(normalized_frequency_by_symbol),
            figsize=(style.SINGLE_COLUMN_WIDTH, style.SINGLE_COLUMN_SHORT_HEIGHT)
            )
        crossflow_force_visulization.contourf_power_spectral_density(
            self._append_filetypes(
                'crossflow_power_spectral_density_contourf'),
            xlabel=r'$f_L\cdot {:s}^{{-1}}$'.format(normalized_frequency_by_symbol),
            contourf_num=51)
        crossflow_force_visulization.contour_power_spectral_density(
            self._append_filetypes('crossflow_power_spectral_density_contour'),
            xlabel=r'$f_L\cdot {:s}^{{-1}}$'.format(normalized_frequency_by_symbol),
            contour_num=11)
        crossflow_force_visulization.contourf_wavelet_dominant_frequency(
            self._append_filetypes(
                'crossflow_wavelet_dominant_frequency_contourf'),
            start_time=start_time,
            end_time=end_time,
            xlabel=r'$t\cdot {:s}^{{-1}}$'.format(normalized_time_by_symbol),
            contourf_num=51)
        crossflow_force_visulization.contour_wavelet_dominant_frequency(
            self._append_filetypes(
                'crossflow_wavelet_dominant_frequency_contour'),
            start_time=start_time,
            end_time=end_time,
            xlabel=r'$t\cdot {:s}^{{-1}}$'.format(normalized_time_by_symbol),
            contour_num=11)

        crossflow_force_visulization.subplot_wavelet_dominant_frequency(
            out_filenames=self._append_filetypes('crossflow_subplot_wavelet'),
            start_time=start_time,
            end_time=end_time,
            xlabel=r'$t\cdot {:s}^{{-1}}$'.format(normalized_time_by_symbol),
            ymin=frequency_min / normalized_frequency_by_value,
            ymax=frequency_max / normalized_frequency_by_value,
            ylabel=r'$f_L\cdot {:s}^{{-1}}$'.format(normalized_frequency_by_symbol),
            num=9)

        # animation
        if make_animation:
            crossflow_force_visulization.make_force_animation_along_time(
                [
                    self._save_directory +
                    'crossflow_force_animation.gif'
                ],
                start_time=start_time,
                end_time=end_time,
                xlabel=r'$C_L$',
                xmin=force_min,
                xmax=force_max)

        for node_i in range(10, crossflow_force_visulization.
                            force_analysis.node_number, 10):
            crossflow_force_visulization.contourf_wavelet(
                node_i,
                self._append_filetypes(
                    'crossflow_wavelet_contourf_node_{:d}'.format(node_i)),
                start_time=start_time,
                end_time=end_time,
                xlabel=r'$t\cdot {:s}^{{-1}}$'.format(normalized_time_by_symbol),
                ylabel=r'$f_L\cdot {:s}^{{-1}}$'.format(normalized_frequency_by_symbol),
                contourf_num=51)
            crossflow_force_visulization.contour_wavelet(
                node_i,
                self._append_filetypes(
                    'crossflow_wavelet_contour_node_{:d}'.format(node_i)),
                start_time=start_time,
                end_time=end_time,
                xlabel=r'$t\cdot {:s}^{{-1}}$'.format(normalized_time_by_symbol),
                ylabel=r'$f_L\cdot {:s}^{{-1}}$'.format(normalized_frequency_by_symbol),
                contour_num=11)
            crossflow_force_visulization.plot_wavelet_dominant_frequency(
                self._append_filetypes(
                    'crossflow_wavelet_dominant_frequency_node_{:d}'.format(
                        node_i)),
                node_i,
                start_time=start_time,
                end_time=end_time,
                xlabel=r'$t\cdot {:s}^{{-1}}$'.format(normalized_time_by_symbol),
                ylabel=r'$f_L\cdot {:s}^{{-1}}$'.format(normalized_frequency_by_symbol))

        crossflow_force_visulization.subplot_span_force(
            out_filenames=self._append_filetypes(
                'crossflow_subplot_force'),
            start_time=start_time,
            end_time=end_time,
            xlabel=r'$t\cdot {:s}^{{-1}}$'.format(normalized_time_by_symbol),
            force_label=r'$C_L$',
            force_min=force_min,
            force_max=force_max)

        crossflow_force_visulization.subplot_span_force_deviation(
            out_filenames=self._append_filetypes(
                'crossflow_subplot_force_deviation'),
            start_time=start_time,
            end_time=end_time,
            xlabel=r'$t\cdot {:s}^{{-1}}$'.format(normalized_time_by_symbol),
            force_deviation_label=r'$C_L-\overline{C_L}$',
            force_deviation_min=-force_delta,
            force_deviation_max=force_delta)

        for node_i in [5, 10, 15]:
            crossflow_force_visulization.plot_time_history_force(
                out_filenames=self._append_filetypes(
                    'crossflow_force_node_{:d}'.format(node_i)),
                node_i=node_i,
                start_time=start_time,
                end_time=end_time,
                xlabel=r'$t\cdot {:s}^{{-1}}$'.format(normalized_time_by_symbol),
                force_label=r'$C_L$',
                force_min=force_min,
                force_max=force_max,
                grid=True,
                )

            crossflow_force_visulization.plot_force_along_time_function(
                out_filenames=self._append_filetypes(
                    'crossflow_force_reduced_velocity_node_{:d}'.format(node_i)),
                node_i=node_i,
                start_time=start_time,
                end_time=end_time,
                time_function=lambda time : reduced_velocity_max*numpy.cos(2*numpy.pi*time/period),
                xlabel=r'$V_r$',
                force_label=r'$C_L$',
                force_min=force_min,
                force_max=force_max,
                grid=True,
                )

            crossflow_force_visulization.plot_time_history_force_deviation(
                out_filenames=self._append_filetypes(
                    'crossflow_force_deviation_node_{:d}'.format(node_i)),
                node_i=node_i,
                start_time=start_time,
                end_time=end_time,
                xlabel=r'$t\cdot {:s}^{{-1}}$'.format(normalized_time_by_symbol),
                force_deviation_label=r'$C_L-\overline{C_L}$',
                force_deviation_min=-force_delta,
                force_deviation_max=force_delta, )

        crossflow_force_visulization.subplot_modal_weight_force(
            out_filenames=self._append_filetypes('crossflow_mode'),
            start_time=start_time,
            end_time=end_time,
            xlabel=r'$t\cdot {:s}^{{-1}}$'.format(normalized_time_by_symbol),
            ylabel=r'$w_L^m$',
            ymin=-modal_weight_force_delta,
            ymax=modal_weight_force_delta,
            figsize=(style.SINGLE_COLUMN_WIDTH, style.SINGLE_COLUMN_SHORT_HEIGHT)
            )

        crossflow_force_visulization.plot_force_mean(
            self._append_filetypes('crossflow_force_mean_{:.1f}_{:.1f}'.
                                   format(start_time, end_time)),
            xlabel=r'$C_L$',
            xmin=force_min,
            xmax=force_max, )
        crossflow_force_visulization.plot_force_std(
            self._append_filetypes('crossflow_force_std_{:.1f}_{:.1f}'.
                                   format(start_time, end_time)),
            xlabel=r'$\sigma_{C_L}$',
            xmin=0,
            xmax=force_std, )

        end_time += -medium_step

        for time in numpy.arange(start_time, end_time, medium_step):
            crossflow_force_visulization.contourf_contour_spatio_temporal_force(
                self._append_filetypes(
                    'crossflow_spatio_temporal_force_{:.1f}'.format(
                        time)),
                start_time=time,
                end_time=(time + medium_step),
                xlabel=r'$t\cdot {:s}^{{-1}}$'.format(normalized_time_by_symbol),
                colorbar_min=-force_delta,
                colorbar_max=force_delta,
                contourf_num=51,
                contour_num=7,
                colorbar_zlabel=r'$C_L$')
            crossflow_force_visulization.contour_spatio_temporal_force(
                self._append_filetypes(
                    'crossflow_spatio_temporal_force_contour_{:.1f}'.
                    format(time)),
                start_time=time,
                end_time=(time + medium_step),
                xlabel=r'$t\cdot {:s}^{{-1}}$'.format(normalized_time_by_symbol),
                colorbar_min=-force_delta,
                colorbar_max=force_delta,
                contour_num=7, )

        end_time += medium_step - short_step

        for time in numpy.arange(start_time, end_time, short_step):
            crossflow_force_visulization.plot_outline(
                self._append_filetypes('crossflow_outline_{:.1f}'.format(
                    time)),
                xlabel=r'$C_L$',
                xmin=force_min,
                xmax=force_max,
                start_time=time,
                end_time=(time + short_step),
                line_number=25)
            crossflow_force_visulization.plot_deviation_outline(
                self._append_filetypes(
                    'crossflow_deviation_outline_{:.1f}'.format(time)),
                xlabel=r'$C_L-\overline{C_L}$',
                xmin=-force_delta,
                xmax=force_delta,
                start_time=time,
                end_time=(time + short_step),
                line_number=25)

        with open(
                self._save_directory + 'crossflow_oscillatory_frequencies.txt',
                'wb') as file_:
            numpy.savetxt(
                file_,
                crossflow_force_analysis.oscillatory_frequencies,
                fmt='%.4e')
        print('Crossflow plotting finished.')
class OneBeamTwoDofs:
    '''
    node_i from 1 to node_num
    '''

    def __init__(
            self,
            # for force_data
            force_filename,
            save_directory,
            filetypes,
            # for beam
            mass_ratio,
            top_tension,
            horizontal,
            tension_include_boyancy,
            length,
            diameter,
            bending_stiffness,
            fluid_density,
            fluid_velocity):
        time, inline_force, crossflow_force =\
            numpy.loadtxt(force_filename, unpack=True)

        self._fluid_density = fluid_density
        self._fluid_velocity = fluid_velocity

        self._inline_force_data = ForceData(
            time=time, force=inline_force)
        self._crossflow_force_data = ForceData(
            time=time, force=crossflow_force)
        self._beam = Beam(
            node_number=self._crossflow_force_data.node_number,
            mass_ratio=mass_ratio,
            top_tension=top_tension,
            horizontal=horizontal,
            tension_include_boyancy=tension_include_boyancy,
            length=length,
            diameter=diameter,
            bending_stiffness=bending_stiffness)
        self._save_directory = save_directory
        if self._save_directory[-1] != '/':
            self._save_directory += '/'

        self._filetypes = filetypes

        self._beam.plot_modal_shapes(
            self._append_filetypes('modal_shapes'), max_order=5)

        with open(self._save_directory + 'natural_frequencies.txt',
                  'wb') as file_:
            numpy.savetxt(
                file_, self._beam.natural_frequencies[:20], fmt='%.4e')

    def _append_filetypes(self, filename):
        return [
            self._save_directory + filename + '.' + filetype
            for filetype in self._filetypes
        ]

    # x
    def plot_inline_force(
            self,
            # for force_analysis
            start_time,
            end_time,
            medium_step,
            short_step,
            force_min,
            force_max,
            force_delta,
            force_std,
            curvature_min,
            curvature_max,
            curvature_delta,
            curvature_std,
            frequency_min,
            frequency_max,
            mode_number_min,
            mode_number_max,
            modal_weight_force_delta,
            make_animation=False,
            contour_curvature=False,
            wavelet_analysis=False):
        print('Starting inline plotting...')

        inline_force_analysis =\
                ForceAnalysis(
                        force_data=self._inline_force_data,
                        beam=self._beam,
                        fluid_density=self._fluid_density,
                        fluid_velocity=self._fluid_velocity,
                        start_time=start_time,
                        end_time=end_time,
                        frequency_min=frequency_min,
                        frequency_max=frequency_max,
                        mode_number_min=mode_number_min,
                        mode_number_max=mode_number_max,
                        modal_analysis=True,
                        wavelet_analysis=wavelet_analysis,
                        frequency_domain_analysis=True)
        inline_force_visulization = ForceVisualization(
            inline_force_analysis)

        start_time = inline_force_visulization.force_analysis.start_time
        end_time = inline_force_visulization.force_analysis.end_time

        inline_force_visulization.subplot_power_spectral_density(
            self._append_filetypes('inline_power_spectral_density_subplot'))
        inline_force_visulization.contourf_power_spectral_density(
            self._append_filetypes('inline_power_spectral_density_contourf'),
            contourf_num=51)
        inline_force_visulization.contour_power_spectral_density(
            self._append_filetypes('inline_power_spectral_density_contour'),
            contour_num=11)
        inline_force_visulization.subplot_modal_power_spectral_density(
            self._append_filetypes(
                'inline_modal_power_spectral_density_subplot'))
        inline_force_visulization.contourf_wavelet_dominant_frequency(
            self._append_filetypes(
                'inline_wavelet_dominant_frequency_contourf'),
            start_time=start_time,
            end_time=end_time,
            contourf_num=51)
        inline_force_visulization.contour_wavelet_dominant_frequency(
            self._append_filetypes(
                'inline_wavelet_dominant_frequency_contour'),
            start_time=start_time,
            end_time=end_time,
            contour_num=11)

        inline_force_visulization.subplot_wavelet_dominant_frequency(
            out_filenames=self._append_filetypes('inline_subplot_wavelet'),
            start_time=start_time,
            end_time=end_time,
            ymin=frequency_min,
            ymax=frequency_max,
            num=9)

        for node_i in range(
                10,
                inline_force_visulization.force_analysis.node_number,
                10):
            inline_force_visulization.contourf_wavelet(
                node_i,
                self._append_filetypes(
                    'inline_wavelet_contourf_node_{:d}'.format(node_i)),
                start_time=start_time,
                end_time=end_time,
                contourf_num=51)
            inline_force_visulization.contour_wavelet(
                node_i,
                self._append_filetypes(
                    'inline_wavelet_contour_node_{:d}'.format(node_i)),
                start_time=start_time,
                end_time=end_time,
                contour_num=11)
            inline_force_visulization.plot_wavelet_dominant_frequency(
                self._append_filetypes(
                    'inline_wavelet_dominant_frequency_node_{:d}'.format(
                        node_i)),
                node_i,
                start_time=start_time,
                end_time=end_time)

        inline_force_visulization.subplot_span_force(
            out_filenames=self._append_filetypes(
                'inline_subplot_force'),
            start_time=start_time,
            end_time=end_time,
            force_label=r'$x\cdot D^{-1}$',
            force_min=force_min,
            force_max=force_max)

        inline_force_visulization.subplot_span_force_deviation(
            out_filenames=self._append_filetypes(
                'inline_subplot_force_deviation'),
            start_time=start_time,
            end_time=end_time,
            force_deviation_label=r'$(x-\bar{x})\cdot D^{-1}$',
            force_deviation_min=-force_delta,
            force_deviation_max=force_delta)

        inline_force_visulization.subplot_modal_weight_force(
            out_filenames=self._append_filetypes('inline_mode'),
            start_time=start_time,
            end_time=end_time,
            ylabel=r'$u^m\cdot D^{-1}$',
            ymin=-modal_weight_force_delta,
            ymax=modal_weight_force_delta)

        inline_force_mean = inline_force_visulization.plot_force_mean(
            self._append_filetypes('inline_force_mean_{:.1f}_{:.1f}'.
                                   format(start_time, end_time)),
            xlabel=r'$x\cdot D^{-1}$',
            xmin=force_min,
            xmax=force_max, )
        with open(self._save_directory +
                  'inline_force_mean_{:.1f}_{:.1f}.txt'.format(
                      start_time, end_time), 'w') as outfile:
            json.dump(inline_force_mean, outfile)
        inline_curvature_mean = inline_force_visulization.plot_curvature_mean(
            self._append_filetypes('inline_curvature_mean_{:.1f}_{:.1f}'.
                                   format(start_time, end_time)),
            xlabel=r'$x\cdot D^{-1}$',
            xmin=curvature_min,
            xmax=curvature_max, )
        with open(self._save_directory +
                  'inline_curvature_mean_{:.1f}_{:.1f}.txt'.format(
                      start_time, end_time), 'w') as outfile:
            json.dump(inline_curvature_mean, outfile)
        inline_std = inline_force_visulization.plot_force_std(
            self._append_filetypes('inline_force_std_{:.1f}_{:.1f}'.
                                   format(start_time, end_time)),
            xlabel=r'$\sigma_x\cdot D^{-1}$',
            xmin=0,
            xmax=force_std, )
        numpy.savetxt(self._save_directory +
                      'inline_force_std_{:.1f}_{:.1f}.txt'.format(
                          start_time, end_time), inline_std)
        inline_std_curvature =\
            inline_force_visulization.plot_curvature_std(
                self._append_filetypes(
                    'inline_curvature_std_{:.1f}_{:.1f}'
                    .format(start_time, end_time)
                ),
                xlabel=r'$\sigma_{c_x}\cdot D$',
                xmin=0,
                xmax=curvature_std,
            )
        numpy.savetxt(self._save_directory +
                      'inline_curvature_std_{:.1f}_{:.1f}.txt'.format(
                          start_time, end_time), inline_std_curvature)

        inline_force_visulization.subplot_force_curvature_mean_std(
            self._append_filetypes(
                'inline_mean_std_force_curvature{:.1f}_{:.1f}'.format(
                    start_time, end_time)),
            xlabel_list=[
                r'$\bar{x}\cdot D^{-1}$', r'$\bar{c}_x\cdot D$',
                r'$\sigma_x\cdot D^{-1}$', r'$\sigma_{c_x}\cdot D$'
            ],
            xmin_list=[force_min, curvature_min, 0, 0],
            xmax_list=[
                force_max, curvature_max, force_std,
                curvature_std
            ], )

        # end_time += (-medium_step)
        end_time += -medium_step

        for time in numpy.arange(start_time, end_time, medium_step):
            inline_force_visulization.contourf_contour_spatio_temporal_force(
                self._append_filetypes(
                    'inline_spatio_temporal_force_{:.1f}'.format(time)),
                start_time=time,
                end_time=(time + medium_step),
                colorbar_min=-force_delta,
                colorbar_max=force_delta,
                contourf_num=51,
                contour_num=11,
                colorbar_zlabel=r'$x\cdot D^{-1}$')
            inline_force_visulization.contour_spatio_temporal_force(
                self._append_filetypes(
                    'inline_spatio_temporal_force_contour_{:.1f}'.
                    format(time)),
                start_time=time,
                end_time=(time + medium_step),
                colorbar_min=-force_delta,
                colorbar_max=force_delta,
                contour_num=11, )

        if contour_curvature:
            for time in numpy.arange(start_time, end_time, medium_step):
                inline_force_visulization.contourf_contour_spatio_temporal_curvature(
                    self._append_filetypes(
                        'inline_spatio_temporal_curvature_{:.1f}'.format(
                            time)),
                    start_time=time,
                    end_time=(time + medium_step),
                    colorbar_min=-curvature_delta,
                    colorbar_max=curvature_delta,
                    contourf_num=51,
                    contour_num=11,
                    colorbar_zlabel=r'$c_{x}\cdot D^{-1}$')
                inline_force_visulization.contour_spatio_temporal_curvature(
                    self._append_filetypes(
                        'inline_spatio_temporal_curvature_contour_{:.1f}'.
                        format(time)),
                    start_time=time,
                    end_time=(time + medium_step),
                    colorbar_min=-curvature_delta,
                    colorbar_max=curvature_delta,
                    contour_num=11)

        end_time += (medium_step - short_step)

        for time in numpy.arange(start_time, end_time, short_step):
            inline_force_visulization.plot_outline(
                self._append_filetypes('inline_outline_{:.1f}'.format(time)),
                xlabel=r'$x\cdot D^{-1}$',
                xmin=force_min,
                xmax=force_max,
                start_time=time,
                end_time=(time + short_step),
                line_number=25)
            inline_force_visulization.plot_deviation_outline(
                self._append_filetypes(
                    'inline_deviation_outline_{:.1f}'.format(time)),
                xlabel=r'$(x-\bar{x})\cdot D^{-1}$',
                xmin=-force_delta,
                xmax=force_delta,
                start_time=time,
                end_time=(time + short_step),
                line_number=25)

        with open(self._save_directory + 'inline_oscillatory_frequencies.txt',
                  'wb') as file_:
            numpy.savetxt(
                file_,
                inline_force_analysis.oscillatory_frequencies,
                fmt='%.4e')

        # animation
        if make_animation:
            inline_force_visulization.make_force_animation_along_time(
                [self._save_directory + 'inline_force_animation.gif'],
                start_time=start_time,
                end_time=end_time,
                xlabel=r'$x\cdot D^{-1}$',
                xmin=force_min,
                xmax=force_max)

        print('Inline plotting finished.')

    # y
    def plot_crossflow_force(
            self,
            # for force_analysis
            start_time,
            end_time,
            # ,
            medium_step,
            short_step,
            force_min,
            force_max,
            force_delta,
            force_std,
            curvature_min,
            curvature_max,
            curvature_delta,
            curvature_std,
            frequency_min,
            frequency_max,
            mode_number_min,
            mode_number_max,
            modal_weight_force_delta,
            make_animation=False,
            contour_curvature=False,
            wavelet_analysis=False):
        print('Starting crossflow plotting...')
        crossflow_force_analysis = ForceAnalysis(
            force_data=self._crossflow_force_data,
            beam=self._beam,
            fluid_density=self._fluid_density,
            fluid_velocity=self._fluid_velocity,
            start_time=start_time,
            end_time=end_time,
            frequency_min=frequency_min,
            frequency_max=frequency_max,
            mode_number_min=mode_number_min,
            mode_number_max=mode_number_max,
            modal_analysis=True,
            frequency_domain_analysis=True,
            wavelet_analysis=wavelet_analysis, )
        crossflow_force_visulization = ForceVisualization(
            crossflow_force_analysis)

        start_time = crossflow_force_visulization.force_analysis.start_time
        end_time = crossflow_force_visulization.force_analysis.end_time

        crossflow_force_visulization.subplot_power_spectral_density(
            self._append_filetypes('crossflow_power_spectral_density_subplot'))
        crossflow_force_visulization.subplot_modal_power_spectral_density(
            self._append_filetypes(
                'crossflow_modal_power_spectral_density_subplot'))
        crossflow_force_visulization.contourf_power_spectral_density(
            self._append_filetypes(
                'crossflow_power_spectral_density_contourf'),
            contourf_num=51)
        crossflow_force_visulization.contour_power_spectral_density(
            self._append_filetypes('crossflow_power_spectral_density_contour'),
            contour_num=11)
        crossflow_force_visulization.contourf_wavelet_dominant_frequency(
            self._append_filetypes(
                'crossflow_wavelet_dominant_frequency_contourf'),
            start_time=start_time,
            end_time=end_time,
            contourf_num=51)
        crossflow_force_visulization.contour_wavelet_dominant_frequency(
            self._append_filetypes(
                'crossflow_wavelet_dominant_frequency_contour'),
            start_time=start_time,
            end_time=end_time,
            contour_num=11)

        crossflow_force_visulization.subplot_wavelet_dominant_frequency(
            out_filenames=self._append_filetypes('crossflow_subplot_wavelet'),
            start_time=start_time,
            end_time=end_time,
            ymin=frequency_min,
            ymax=frequency_max,
            num=9)

        for node_i in range(10, crossflow_force_visulization.
                            force_analysis.node_number, 10):
            crossflow_force_visulization.contourf_wavelet(
                node_i,
                self._append_filetypes(
                    'crossflow_wavelet_contourf_node_{:d}'.format(node_i)),
                start_time=start_time,
                end_time=end_time,
                contourf_num=51)
            crossflow_force_visulization.contour_wavelet(
                node_i,
                self._append_filetypes(
                    'crossflow_wavelet_contour_node_{:d}'.format(node_i)),
                start_time=start_time,
                end_time=end_time,
                contour_num=11)
            crossflow_force_visulization.plot_wavelet_dominant_frequency(
                self._append_filetypes(
                    'crossflow_wavelet_dominant_frequency_node_{:d}'.format(
                        node_i)),
                node_i,
                start_time=start_time,
                end_time=end_time)

        crossflow_force_visulization.subplot_span_force(
            out_filenames=self._append_filetypes(
                'crossflow_subplot_force'),
            start_time=start_time,
            end_time=end_time,
            force_label=r'$y\cdot D^{-1}$',
            force_min=force_min,
            force_max=force_max)

        crossflow_force_visulization.subplot_span_force_deviation(
            out_filenames=self._append_filetypes(
                'crossflow_subplot_force_deviation'),
            start_time=start_time,
            end_time=end_time,
            force_deviation_label=r'$(y-\bar{y})\cdot D^{-1}$',
            force_deviation_min=-force_delta,
            force_deviation_max=force_delta)

        crossflow_force_visulization.subplot_modal_weight_force(
            out_filenames=self._append_filetypes('crossflow_mode'),
            start_time=start_time,
            end_time=end_time,
            ylabel=r'$v^m\cdot D^{-1}$',
            ymin=-modal_weight_force_delta,
            ymax=modal_weight_force_delta)

        crossflow_force_visulization.plot_force_mean(
            self._append_filetypes('crossflow_force_mean_{:.1f}_{:.1f}'.
                                   format(start_time, end_time)),
            xlabel=r'$y\cdot D^{-1}$',
            xmin=force_min,
            xmax=force_max, )
        crossflow_force_visulization.plot_curvature_mean(
            self._append_filetypes('crossflow_curvature_mean_{:.1f}_{:.1f}'.
                                   format(start_time, end_time)),
            xlabel=r'$y\cdot D^{-1}$',
            xmin=curvature_min,
            xmax=curvature_max, )
        crossflow_force_visulization.plot_force_std(
            self._append_filetypes('crossflow_force_std_{:.1f}_{:.1f}'.
                                   format(start_time, end_time)),
            xlabel=r'$\sigma_y\cdot D^{-1}$',
            xmin=0,
            xmax=force_std, )
        crossflow_force_visulization.plot_curvature_std(
            self._append_filetypes('crossflow_curvature_std_{:.1f}_{:.1f}'.
                                   format(start_time, end_time)),
            xlabel=r'$\sigma_{c_y}\cdot D$',
            xmin=0,
            xmax=curvature_std, )
        crossflow_force_visulization.subplot_force_curvature_std(
            self._append_filetypes(
                'crossflow_std_force_curvature{:.1f}_{:.1f}'.format(
                    start_time, end_time)),
            xlabel_list=[r'$\sigma_y\cdot D^{-1}$', r'$\sigma_{c_y}\cdot D$'],
            xmin_list=[0, 0],
            xmax_list=[force_std, curvature_std], )

        end_time += -medium_step

        for time in numpy.arange(start_time, end_time, medium_step):
            crossflow_force_visulization.contourf_contour_spatio_temporal_force(
                self._append_filetypes(
                    'crossflow_spatio_temporal_force_{:.1f}'.format(
                        time)),
                start_time=time,
                end_time=(time + medium_step),
                colorbar_min=-force_delta,
                colorbar_max=force_delta,
                contourf_num=51,
                contour_num=7,
                colorbar_zlabel=r'$y\cdot D^{-1}$')
            crossflow_force_visulization.contour_spatio_temporal_force(
                self._append_filetypes(
                    'crossflow_spatio_temporal_force_contour_{:.1f}'.
                    format(time)),
                start_time=time,
                end_time=(time + medium_step),
                colorbar_min=-force_delta,
                colorbar_max=force_delta,
                contour_num=7, )

        if contour_curvature:
            for time in numpy.arange(start_time, end_time, medium_step):
                crossflow_force_visulization.contourf_contour_spatio_temporal_curvature(
                    self._append_filetypes(
                        'crossflow_spatio_temporal_curvature_{:.1f}'.format(
                            time)),
                    start_time=time,
                    end_time=(time + medium_step),
                    colorbar_min=-curvature_delta,
                    colorbar_max=curvature_delta,
                    contourf_num=51,
                    contour_num=7,
                    colorbar_zlabel=r'$c_{y}\cdot D^{-1}$')
                crossflow_force_visulization.contour_spatio_temporal_curvature(
                    self._append_filetypes(
                        'crossflow_spatio_temporal_curvature_contour_{:.1f}'.
                        format(time)),
                    start_time=time,
                    end_time=(time + medium_step),
                    colorbar_min=-curvature_delta,
                    colorbar_max=curvature_delta,
                    contour_num=7)

        end_time += medium_step - short_step

        for time in numpy.arange(start_time, end_time, short_step):
            crossflow_force_visulization.plot_outline(
                self._append_filetypes('crossflow_outline_{:.1f}'.format(
                    time)),
                xlabel=r'$y\cdot D^{-1}$',
                xmin=force_min,
                xmax=force_max,
                start_time=time,
                end_time=(time + short_step),
                line_number=25)
            crossflow_force_visulization.plot_deviation_outline(
                self._append_filetypes(
                    'crossflow_deviation_outline_{:.1f}'.format(time)),
                xlabel=r'$(y-\bar{y})\cdot D^{-1}$',
                xmin=-force_delta,
                xmax=force_delta,
                start_time=time,
                end_time=(time + short_step),
                line_number=25)

        with open(
                self._save_directory + 'crossflow_oscillatory_frequencies.txt',
                'wb') as file_:
            numpy.savetxt(
                file_,
                crossflow_force_analysis.oscillatory_frequencies,
                fmt='%.4e')

        # animation
        if make_animation:
            crossflow_force_visulization.make_force_animation_along_time(
                [
                    self._save_directory +
                    'crossflow_force_animation.gif'
                ],
                start_time=start_time,
                end_time=end_time,
                xlabel=r'$y\cdot D^{-1}$',
                xmin=force_min,
                xmax=force_max)
        print('Crossflow plotting finished.')