\documentclass[border=3.141592]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,
                backgrounds,
                chains,
                fit,
                positioning,
                shapes.geometric}

\makeatletter
\tikzset{FlowChart/.style={
suspend join/.code = {\def\tikz@after@path{}},
startstop/.style = {rectangle, draw, fill=red!30,
                    minimum width=3cm, minimum height=1cm},
  process/.style = {rectangle, rounded corners, draw, fill=orange!30,
                    text width=5cm, minimum height=1cm, align=center},
 decision/.style = {diamond, aspect=1.3, draw, fill=green!30,
                    minimum width=3cm, minimum height=1cm, align=center},
       io/.style = {trapezium, trapezium stretches body,
                    trapezium left angle=70, trapezium right angle=110,
                    draw, fill=blue!30,
                    minimum width=3cm, minimum height=1cm,
                    text width =\pgfkeysvalueof{/pgf/minimum width}-2*\pgfkeysvalueof{/pgf/inner xsep},
                    align=center,
                    },
    arrow/.style = {thick,-Triangle}
                        }   
    }
\makeatother

\begin{document}
    \begin{tikzpicture}[FlowChart,
node distance = 6mm and 12mm,
  start chain = A going below,
   FIT/.style = {draw, dashed, fill = olive!25, 
                 inner sep=2mm, fit=#1}
                        ]
% nodes, 
% top branch
    \begin{scope}[nodes={on chain, join=by arrow}] 
\node   [startstop] {Start};        % A-1
\node   [io]        {Preprocessor Input:\\ A\\ B\\ C\\ D};
\node   [process]   {Process 1};    %  A-3
\node   [process]   {Process 2};
\node   [process]   {Calculate:\\  From Variables A and B};
\node   [decision]  {X or Y?};      % A-6
% left branch    
\node   [process,   % A-7
         suspend join,
         below left= of A-6] {Apply X loads:\\ Apply $\gamma$ function};
\node   [process] {Calculate: \\  U$_o$ function}; 
\node   [decision]  {No. of desired \\ cycles reached?};    % A-9
% right branch
\node   [process,   % A-10
         suspend join,
         below right=of A-6] {Apply Y loads:\\  Apply $\lambda$ function  }; %A-9
\node   [process]   {Calculate: \\  U function};
\node   [decision] {No. of desired \\ cycles reached?};
\node   [process,   % A-13 
         suspend join,
         below=of A-9.south -| A-1] {Post-process in:  \\ Python};
\node   [startstop] {End};
    \end{scope}
%
\node (L)   [process,
             left =of A-6 -| A-7] {Reanalyse\\ Type 2};
\node (R)   [process, right=of A-6 -| A-10] {Reanalyse \\ Type 1};
% fit
\scoped[on background layer]
    \node[FIT=(R) (A-11) (A-12),
          label=\textbf{Type 1 System}] {};
\scoped[on background layer] 
    \node[FIT=(L) (A-8) (A-9),
          label=\textbf{Type 2 System}] {};
% connections not considered in join instruction
\draw [arrow] (A-6) -| node[above] {X} (A-7);
\draw [arrow] (A-6) -| node[above] {Y} (A-10);
%
\draw [arrow] (A-9) -| node[below] {Yes} (L);
\draw [arrow] (L)   |- (A-3);
%
\draw [arrow] (A-12) -| node[below] {No}  (R);
\draw [arrow] (R)    |- (A-3);
%
\draw [arrow] (A-9)  |- node[below] {Yes} (A-13);
\draw [arrow] (A-12) |- node[below] {Yes} (A-13);
    \end{tikzpicture}
\end{document}