<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic &amp;gt;&amp;gt; although I'm not very in Intel® Fortran Compiler</title>
    <link>https://community.intel.com/t5/Intel-Fortran-Compiler/SIGSEGV-in-an-argument-on-a-subroutine/m-p/1142477#M137634</link>
    <description>&lt;P&gt;&amp;gt;&amp;gt;&amp;nbsp;although I'm not very familiar with SIMD programming&lt;/P&gt;&lt;P&gt;Perhaps something to provide insight will help.&lt;/P&gt;&lt;P&gt;SIMD = Single Instruction Multiple Data aka vector operations.&lt;/P&gt;&lt;P&gt;In a loop that is vectorized something like this happens:&lt;/P&gt;
&lt;PRE class="brush:fortran; class-name:dark;"&gt;...
if(simpleLogicalExpression) then
   out(i) = ExpressionSuitableForVectorization
   Also(i) = ...
   ThisToo(i) = ...
else
   out(i) = OtherExpressionSuitableForVectorization
   Also(i) = Other...
   ThisToo(i) = Other...
endif

Becomes: (sketch code)

   temp1A = ExpressionSuitableForVectorization
   temp2A = ...
   temp3A = ...
   temp1B = OtherExpressionSuitableForVectorization
   temp2B = Other...
   Temp3B = Other...
   mask = (simpleLogicalExpression)
   out(i) = (mask) ? temp1A : temp1B ! like in C++
   Also(i) = (mask) ? temp2A : temp2B
   ThisToo(i) = (mask) ? temp3A : temp3B&lt;/PRE&gt;

&lt;P&gt;Note, both branches of the IF statement are evaluated into temporary registers (across the width of the SIMD vector)&lt;BR /&gt;Then a mask is made &amp;nbsp;(across the width of the SIMD vector)&lt;BR /&gt;Then two masked moves are made &amp;nbsp;(across the width of the SIMD vector)&lt;/P&gt;
&lt;P&gt;Any improvement in vectorization comes at the expense of computing both halves of the IF statement plus the mask creation and additional conditional move. The benefit is there is no out of line branching for the code run.&lt;/P&gt;
&lt;P&gt;With simple (one or two) statements on each branch of the IF you generally see a net benefit. However, in problems such as yours, typically only one branch is executed at the periphery, and the other branch is executed in the interior. With this in mind, it makes sense to "effectively" duplicate the code inclusive of only the appropriate branch, one section for the periphery, and one for the interior.&lt;/P&gt;
&lt;P&gt;Jim Dempsey&lt;/P&gt;</description>
    <pubDate>Sat, 11 May 2019 13:03:09 GMT</pubDate>
    <dc:creator>jimdempseyatthecove</dc:creator>
    <dc:date>2019-05-11T13:03:09Z</dc:date>
    <item>
      <title>SIGSEGV in an argument on a subroutine</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/SIGSEGV-in-an-argument-on-a-subroutine/m-p/1142468#M137625</link>
      <description>&lt;P&gt;Hi, I was trying to vectorize one loop that has a lot of ifs with the next directive&amp;nbsp;&lt;/P&gt;
&lt;PRE class="brush:fortran; class-name:dark;"&gt;  m=0.0
   !&amp;nbsp;form&amp;nbsp;banded matrix of Puasson equastion
&amp;nbsp;&amp;nbsp;&amp;nbsp;pok=3.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;call&amp;nbsp;annotate_site_begin( "pressure" )
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;call&amp;nbsp;annotate_iteration_task( "pressure-task" )
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;do&amp;nbsp;99 k=2,kbm1
     do&amp;nbsp;99 i=2,imm1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
!DIR$ SIMD LASTPRIVATE(bb2) REDUCTION(+:m, gc2, gc1, gen)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;do&amp;nbsp;99 j=2,jmm1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(k+1&amp;lt;=kb.and.i+1&amp;lt;=im)then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;aa1(i+1,j,k+1)=.25e0*aaf(i+1,j,k+1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 *.5*(dy(i,j)+dy(i+1,j))/ddx(i,j)/art(i,j)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 +.25e0*aaf(i,j,k+1)*dq(i+1,j)/dq(i,j)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 *dy(i,j)/ddx(i,j)/art(i,j)&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;endif

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(k+1&amp;lt;=kb.and.i-1&amp;gt;=1)then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;aa2(i-1,j,k+1)=-.25e0*aaf(i-1,j,k+1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 *.5*(dy(i,j)+dy(i-1,j))/ddx(i-1,j)/art(i,j)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 -.25e0*aaf(i,j,k+1)*dq(i-1,j)/dq(i,j)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 *dy(i,j)/ddx(i,j)/art(i,j)&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end&amp;nbsp;if
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(k-1&amp;gt;=1.and.i+1&amp;lt;=im)then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;aa3(i+1,j,k-1)=-.25e0*aaf(i+1,j,k-1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 *.5*(dy(i,j)+dy(i+1,j))/ddx(i,j)/art(i,j)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 -.25e0*aaf(i,j,k-1)*dq(i+1,j)/dq(i,j)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 *dy(i,j)/ddx(i,j)/art(i,j)&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end&amp;nbsp;if
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(k-1&amp;gt;=1.and.i-1&amp;gt;=1)then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;aa4(i-1,j,k-1)=.25e0*aaf(i-1,j,k-1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 *.5*(dy(i,j)+dy(i-1,j))/ddx(i-1,j)/art(i,j)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 +.25e0*aaf(i,j,k-1)*dq(i-1,j)/dq(i,j)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 *dy(i,j)/ddx(i,j)/art(i,j)&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end&amp;nbsp;if
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(k+1&amp;lt;=kb.and.j+1&amp;lt;=jm)then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bb1(i,j+1,k+1)=.25e0*bbf(i,j+1,k+1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 *.5*(dx(i,j)+dx(i,j+1))/ddy(i,j)/art(i,j)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 +.25e0*bbf(i,j,k+1)*dq(i,j+1)/dq(i,j)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 *dx(i,j)/ddy(i,j)/art(i,j)&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end&amp;nbsp;if
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(k+1&amp;lt;=kb.and.j-1&amp;gt;=1)then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bb2(i,j-1,k+1)=-.25e0*bbf(i,j-1,k+1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 *.5*(dx(i,j)+dx(i,j-1))/ddy(i,j-1)/art(i,j)
 &amp;nbsp;&amp;nbsp;&amp;nbsp;1 -.25e0*bbf(i,j,k+1)*dq(i,j-1)/dq(i,j)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 *dx(i,j)/ddy(i,j)/art(i,j)&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end&amp;nbsp;if
&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(k-1&amp;gt;=1.and.j+1&amp;lt;=jm)then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bb3(i,j+1,k-1)=-.25e0*bbf(i,j+1,k-1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 *.5*(dx(i,j)+dx(i,j+1))/ddy(i,j)/art(i,j)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 -.25e0*bbf(i,j,k-1)*dq(i,j+1)/dq(i,j)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 *dx(i,j)/ddy(i,j)/art(i,j)&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end&amp;nbsp;if
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(k-1&amp;gt;=1.and.j-1&amp;gt;=1)&amp;nbsp;then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bb4(i,j-1,k-1)=.25e0*bbf(i,j-1,k-1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 *.5*(dx(i,j)+dx(i,j-1))/ddx(i,j-1)/art(i,j)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 +.25e0*bbf(i,j,k-1)*dq(i,j-1)/dq(i,j)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 *dx(i,j)/ddy(i,j)/art(i,j)&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end&amp;nbsp;if
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(i+1&amp;lt;=im)&amp;nbsp;then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ga1(i+1,j,k)=dz(k)*dq(i+1,j)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 *.5*(dy(i,j)+dy(i+1,j))/ddx(i,j)/art(i,j)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end&amp;nbsp;if
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(i-1&amp;gt;=1)&amp;nbsp;then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ga2(i-1,j,k)=dz(k)*dq(i-1,j)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 *.5*(dy(i,j)+dy(i-1,j))/ddx(i-1,j)/art(i,j)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end&amp;nbsp;if
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(j+1&amp;lt;=jm)&amp;nbsp;then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gb1(i,j+1,k)=dz(k)*dq(i,j+1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 *.5*(dx(i,j)+dx(i,j+1))/ddy(i,j)/art(i,j)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end&amp;nbsp;if
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(j-1&amp;gt;=1)&amp;nbsp;then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gb2(i,j-1,k)=dz(k)*dq(i,j-1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 *.5*(dx(i,j)+dx(i,j-1))/ddy(i,j-1)/art(i,j)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end&amp;nbsp;if
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(k+1&amp;lt;=kb)&amp;nbsp;then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gc1(i,j,k+1)=1.e0/(dzz(k)*dq(i,j))*
 &amp;nbsp;&amp;nbsp;&amp;nbsp;1 (art(i,j)+.5*(aaf(i,j,k+1)+aaf(i,j,k))*aaf(i,j,k+1)*dy(i,j)/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 dx(i,j)+.5*(bbf(i,j,k+1)+bbf(i,j,k))*bbf(i,j,k+1)*dx(i,j)/
 &amp;nbsp;&amp;nbsp;&amp;nbsp;1 dy(i,j))/art(i,j)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end&amp;nbsp;if
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(k-1&amp;gt;=1)&amp;nbsp;then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gc2(i,j,k-1)=1.e0/(dzz(k-1)*dq(i,j))*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 (art(i,j)+.5*(aaf(i,j,k-1)+aaf(i,j,k))*aaf(i,j,k-1)*dy(i,j)/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 dx(i,j)+.5*(bbf(i,j,k-1)+bbf(i,j,k))*bbf(i,j,k-1)*dx(i,j)/
 &amp;nbsp;&amp;nbsp;&amp;nbsp;1 dy(i,j))/art(i,j)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end&amp;nbsp;if
!&amp;nbsp;&amp;nbsp;&amp;nbsp;if(iint==5)stop
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(i-1&amp;gt;=1.and.j-1&amp;gt;=1.and.k-1&amp;gt;=1.)&amp;nbsp;then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gen(i,j,k)=(-dq(i,j)*dz(k)*(.5*(dy(i,j)+dy(i+1,j))/ddx(i,j)+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 .5*(dy(i,j)+dy(i-1,j))/ddx(i-1,j)+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 .5*(dx(i,j)+dx(i,j+1))/ddy(i,j)+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 .5*(dx(i,j)+dx(i,j-1))/ddy(i,j-1)))/art(i,j)-
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2 (1.e0/dzz(k-1)+1.e0/dzz(k))/dq(i,j)*(art(i,j)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 +.5*(aaf(i,j,k+1)+aaf(i,j,k))*aaf(i,j,k)*dy(i,j)/dx(i,j)+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 .5*(bbf(i,j,k+1)+bbf(i,j,k))*bbf(i,j,k)*dx(i,j)/dy(i,j)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 )/art(i,j)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gen(i,j,k)=(-dq(i,j)*dz(k)*(dy(i,j)/ddx(i,j)+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 dy(i,j)/ddx(i-1,j)+
 &amp;nbsp;&amp;nbsp;&amp;nbsp;1 dx(i,j)/ddy(i,j)+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 dx(i,j)/ddy(i,j-1)))/art(i,j)-
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2 (2.e0/dzz(k))/dq(i,j)*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 (art(i,j)+.5*(aaf(i,j,k+1)+aaf(i,j,k))*aaf(i,j,k)*dy(i,j)/dx(i,j)+
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 .5*(bbf(i,j,k+1)+bbf(i,j,k))*bbf(i,j,k)*dx(i,j)/dy(i,j)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 )/art(i,j)&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end&amp;nbsp;if&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(((k-1)*(k-kb)*(i-1)*(i-im)*(j-1)*(j-jm)).ne.0)&amp;nbsp;then
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m=m+1

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(k==kbm1)&amp;nbsp;then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ga1(i+1,j,k)=ga1(i+1,j,k)+aa1(i+1,j,k+1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ga2(i-1,j,k)=ga2(i-1,j,k)+aa2(i-1,j,k+1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gb1(i,j+1,k)=gb1(i,j+1,k)+bb1(i,j+1,k+1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gb2(i,j-1,k)=gb2(i,j-1,k)+bb2(i,j-1,k+1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gen(i,j,k)=gen(i,j,k)+gc1(i,j,k+1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;endif
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(k==2)&amp;nbsp;then&amp;nbsp;!¸òþñþôýð&amp;nbsp; ÿþòõ¨¿ýþ¸ª¹
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;aa2(i+1,j,k-1)=0.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bb2(i,j+1,k-1)=0.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bb4(i,j-1,k-1)=0.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gc2(i,j,k-1)=0.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;endif
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(i==2)&amp;nbsp;then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gc2(i,j,k-1)=gc2(i,j,k-1)+aa4(i-1,j,k-1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gc1(i,j,k+1)=gc1(i,j,k+1)+aa2(i-1,j,k+1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gen(i,j,k)=gen(i,j,k)+ga2(i-1,j,k)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;endif
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(i==imm1)&amp;nbsp;then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gc2(i,j,k-1)=gc2(i,j,k-1)+aa3(i+1,j,k-1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gc1(i,j,k+1)=gc1(i,j,k+1)+aa1(i+1,j,k+1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gen(i,j,k)=gen(i,j,k)+ga1(i+1,j,k)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;endif

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(j==2)&amp;nbsp;then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gc2(i,j,k-1)=gc2(i,j,k-1)+bb4(i,j-1,k-1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gc1(i,j,k+1)=gc1(i,j,k+1)+bb2(i,j-1,k+1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gen(i,j,k)=gen(i,j,k)+gb2(i,j-1,k)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;endif
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(j==jmm1)&amp;nbsp;then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gc2(i,j,k-1)=gc2(i,j,k-1)+bb3(i,j+1,k-1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gc1(i,j,k+1)=gc1(i,j,k+1)+bb1(i,j+1,k+1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gen(i,j,k)=gen(i,j,k)+gb1(i,j+1,k)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;endif

&amp;nbsp;&amp;nbsp;&amp;nbsp;endif

&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(maa1+m&amp;lt;=lm)&amp;nbsp;then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(k+1&amp;gt;kbm1.or.i+1&amp;gt;imm1)&amp;nbsp;then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;apr(m)=0.0&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;apr(m)=aa1(i+1,j,k+1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end&amp;nbsp;if
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ja(m)=ind(m+maa1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ia(m)=ind(m)
&amp;nbsp;&amp;nbsp;&amp;nbsp;end&amp;nbsp;if

&amp;nbsp;&amp;nbsp;&amp;nbsp;lapr=ma1
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(mbb1+m&amp;lt;=lm)&amp;nbsp;then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(k+1&amp;gt;kbm1.or.j+1&amp;gt;jmm1)&amp;nbsp;then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;apr(lapr+m)=0.0
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;apr(lapr+m)=bb1(i,j+1,k+1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end&amp;nbsp;if
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ja(m+lapr)=ind(m+mbb1)
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ia(m+lapr)=ind(m)
 &amp;nbsp;&amp;nbsp;&amp;nbsp;end&amp;nbsp;if

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lapr=ma1+mb1
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(mgc+m&amp;lt;=lm)&amp;nbsp;then&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(k+1&amp;gt;kbm1)&amp;nbsp;then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;apr(lapr+m)=0.0
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;apr(lapr+m)=gc1(i,j,k+1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end&amp;nbsp;if
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;ja(m+lapr)=ind(m+mgc)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ia(m+lapr)=ind(m)
&amp;nbsp;&amp;nbsp;&amp;nbsp;end&amp;nbsp;if

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lapr=ma1+mb1+mc
 &amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(mbb2+m&amp;lt;=lm)&amp;nbsp;then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(k+1&amp;gt;kbm1.or.j-1&amp;lt;2)&amp;nbsp;then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;apr(lapr+m)=0.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;apr(lapr+m)=bb2(i,j-1,k+1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end&amp;nbsp;if&amp;nbsp;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ja(m+lapr)=ind(m+mbb2)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ia(m+lapr)=ind(m)
&amp;nbsp;&amp;nbsp;&amp;nbsp;end&amp;nbsp;if

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lapr=ma1+mb1+mc+mb2
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(maa2+m&amp;lt;=lm)&amp;nbsp;then&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(k+1&amp;gt;kbm1.or.i-1&amp;lt;2)&amp;nbsp;then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;apr(lapr+m)=0.0
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;apr(lapr+m)=aa2(i-1,j,k+1)
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;endif
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ja(m+lapr)=ind(m+maa2)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ia(m+lapr)=ind(m)
&amp;nbsp;&amp;nbsp;&amp;nbsp;end&amp;nbsp;if

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lapr=ma1+mb1+mc+mb2+ma2
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(mga+m&amp;lt;=lm)&amp;nbsp;then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(i+1&amp;gt;imm1)&amp;nbsp;then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;apr(lapr+m)=0.0
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;apr(lapr+m)=ga1(i+1,j,k)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end&amp;nbsp;if
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ja(m+lapr)=ind(m+mga)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ia(m+lapr)=ind(m)
&amp;nbsp;&amp;nbsp;&amp;nbsp;end&amp;nbsp;if

&amp;nbsp;&amp;nbsp;&amp;nbsp;lapr=ma1+mb1+mc+mb2+ma2+ma
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(1+m&amp;lt;=lm)&amp;nbsp;then
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(j+1&amp;gt;jmm1)&amp;nbsp;then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;apr(lapr+m)=0.0
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;apr(lapr+m)=gb1(i,j+1,k)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end&amp;nbsp;if
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ja(m+lapr)=ind(m+mgb)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ia(m+lapr)=ind(m)
&amp;nbsp;&amp;nbsp;&amp;nbsp;end&amp;nbsp;if

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lapr=ma1+mb1+mc+mb2+ma2+ma+mb
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;apr(lapr+m)=gen(i,j,k)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ja(m+lapr)=ind(m)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ia(m+lapr)=ind(m)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lapr=ma1+mb1+mc+mb2+ma2+ma+mb+lm
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(m-mgb&amp;gt;=1)&amp;nbsp;then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(j-1&amp;lt;2)&amp;nbsp;then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;apr(m-mgb+lapr)=0.0
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else&amp;nbsp;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;apr(m-mgb+lapr)=gb2(i,j-1,k)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end&amp;nbsp;if
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ja(m-mgb+lapr)=ind(m-mgb)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ia(m-mgb+lapr)=ind(m)
&amp;nbsp;&amp;nbsp;&amp;nbsp;end&amp;nbsp;if

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lapr=ma1+mb1+mc+mb2+ma2+ma+2*mb+lm
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(m-mga&amp;gt;=1)&amp;nbsp;then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(i-1&amp;lt;2)&amp;nbsp;then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;apr(m-mga+lapr)=0.0
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;apr(m-mga+lapr)=ga2(i-1,j,k)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end&amp;nbsp;if

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ia(m-mga+lapr)=ind(m)
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ja(m-mga+lapr)=ind(-mga+m)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end&amp;nbsp;if

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lapr=ma1+mb1+mc+mb2+ma2+2*ma+2*mb+lm
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(m-maa2&amp;gt;=1)&amp;nbsp;then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(k-1&amp;lt;2.or.i+1&amp;gt;imm1)&amp;nbsp;then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;apr(m-maa2+lapr)=0.0
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;apr(m-maa2+lapr)=aa3(i+1,j,k-1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;endif

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ia(m-maa2+lapr)=ind(m)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ja(m-maa2+lapr)=ind(-maa2+m)
&amp;nbsp;&amp;nbsp;&amp;nbsp;end&amp;nbsp;if

&amp;nbsp; &amp;nbsp;&amp;nbsp;lapr=ma1+mb1+mc+mb2+2*ma2+2*ma+2*mb+lm
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(m-mbb2&amp;gt;=1)&amp;nbsp;then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(j+1&amp;gt;jmm1.or.k-1&amp;lt;2)&amp;nbsp;then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;apr(m-mbb2+lapr)=0.0
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;apr(m-mbb2+lapr)=bb3(i,j+1,k-1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;endif

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ia(m-mbb2+lapr)=ind(m)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ja(m-mbb2+lapr)=ind(-mbb2+m)
&amp;nbsp;&amp;nbsp;&amp;nbsp;end&amp;nbsp;if

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lapr=ma1+mb1+mc+2*mb2+2*ma2+2*ma+2*mb+lm

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(m-mgc&amp;gt;=1)then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(k-1&amp;gt;kbm1)&amp;nbsp;then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;apr(m-mgc+lapr)=0.0
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;apr(m-mgc+lapr)=gc2(i,j,k-1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end&amp;nbsp;if
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ja(m-mgc+lapr)=ind(m-mgc)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ia(m-mgc+lapr)=ind(m)
&amp;nbsp;&amp;nbsp;&amp;nbsp;end&amp;nbsp;if

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lapr=ma1+mb1+2*mc+2*mb2+2*ma2+2*ma+2*mb+lm
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(m-mbb1&amp;gt;=1)&amp;nbsp;then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(j-1&amp;lt;2.or.k-1&amp;lt;2)then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;apr(m-mbb1+lapr)=0.0
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;apr(m-mbb1+lapr)=bb4(i,j-1,k-1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;endif

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ia(m-mbb1+lapr)=ind(m)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ja(m-mbb1+lapr)=ind(m-mbb1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;end&amp;nbsp;if

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lapr=ma1+2*mb1+2*mc+2*mb2+2*ma2+2*ma+2*mb+lm
&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(m-maa1&amp;gt;=1)&amp;nbsp;then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(i-1&amp;lt;2.or.k-1&amp;lt;2)then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;apr(m-maa1+lapr)=0.0
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;apr(m-maa1+lapr)=aa4(i-1,j,k-1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;endif

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ia(m-maa1+lapr)=ind(m)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ja(m-maa1+lapr)=ind(m-maa1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;end&amp;nbsp;if

99&amp;nbsp;&amp;nbsp;continue

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;call&amp;nbsp;annotate_site_end&lt;/PRE&gt;

&lt;P&gt;However, when I run it, I got this SIGSEGV&lt;/P&gt;
&lt;P&gt;forrtl: severe (174): SIGSEGV, segmentation fault occurred&lt;BR /&gt;Image&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PC&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Routine&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Line &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Source &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;BR /&gt;nohydropom_intel&amp;nbsp; &amp;nbsp; 000000000044B7F3 &amp;nbsp;Unknown &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Unknown &amp;nbsp;Unknown&lt;BR /&gt;libpthread-2.23.s&amp;nbsp; &amp;nbsp; &amp;nbsp; 00007F1CF2551390 &amp;nbsp;Unknown &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Unknown &amp;nbsp;Unknown&lt;BR /&gt;nohydropom_intel&amp;nbsp; &amp;nbsp; 000000000042BEBD &amp;nbsp;pressure1_&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;92 &amp;nbsp;pressure1.for&lt;BR /&gt;nohydropom_intel&amp;nbsp; &amp;nbsp; 000000000040C755 &amp;nbsp;MAIN__.R&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 614 &amp;nbsp;Main.for&lt;BR /&gt;nohydropom_intel&amp;nbsp; &amp;nbsp; 0000000000403D32 &amp;nbsp;Unknown&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Unknown &amp;nbsp;Unknown&lt;BR /&gt;libc-2.23.so&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 00007F1CF1F92830 &amp;nbsp;__libc_start_main &amp;nbsp; &amp;nbsp;Unknown &amp;nbsp;Unknown&lt;BR /&gt;nohydropom_intel&amp;nbsp; &amp;nbsp; 0000000000403C29 &amp;nbsp;Unknown&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Unknown &amp;nbsp;Unknown&lt;BR /&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I debugged my code. I inserted a breakpoint in line 614 at Main.for. Then I found that the SIGSEGV happened at one argument that it is an array.&lt;/P&gt;
&lt;P&gt;Breakpoint 1, main () at ../Main.for:614&lt;BR /&gt;614&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;call pressure1(dti,q)&lt;BR /&gt;(gdb) info address dti&lt;BR /&gt;No symbol "dti" in current context.&lt;BR /&gt;(gdb) info address q&lt;BR /&gt;Symbol "q" is static storage at address 0x1088280.&lt;BR /&gt;(gdb) print dti&lt;BR /&gt;No symbol "dti" in current context.&lt;BR /&gt;(gdb) print q&lt;BR /&gt;$1 = (( ( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...) ...) ...)&lt;BR /&gt;(gdb) info line 614&lt;BR /&gt;Line 614 of "../Main.for" starts at address 0x40c743 &amp;lt;main+35251&amp;gt; and ends at 0x40c755 &amp;lt;main+35269&amp;gt;.&lt;BR /&gt;(gdb) disas 0x40c743, 0x40c755&lt;BR /&gt;Dump of assembler code from 0x40c743 to 0x40c755:&lt;BR /&gt;=&amp;gt; 0x000000000040c743 &amp;lt;main+35251&amp;gt;:&amp;nbsp;&amp;nbsp; &amp;nbsp;mov &amp;nbsp; &amp;nbsp;$0x6458900,%edi&lt;BR /&gt;&amp;nbsp; &amp;nbsp;0x000000000040c748 &amp;lt;main+35256&amp;gt;:&amp;nbsp;&amp;nbsp; &amp;nbsp;mov &amp;nbsp; &amp;nbsp;$0x1088280,%esi&lt;BR /&gt;&amp;nbsp; &amp;nbsp;0x000000000040c74d &amp;lt;main+35261&amp;gt;:&amp;nbsp;&amp;nbsp; &amp;nbsp;vzeroupper&amp;nbsp;&lt;BR /&gt;&amp;nbsp; &amp;nbsp;0x000000000040c750 &amp;lt;main+35264&amp;gt;:&amp;nbsp;&amp;nbsp; &amp;nbsp;callq &amp;nbsp;0x42bb30 &amp;lt;pressure1&amp;gt;&lt;BR /&gt;End of assembler dump.&lt;BR /&gt;(gdb) continue&lt;BR /&gt;Continuing.&lt;/P&gt;
&lt;P&gt;Program received signal SIGSEGV, Segmentation fault.&lt;BR /&gt;0x000000000042bebd in pressure1 (dt2=1.9762625833649862e-323, q1=&amp;lt;error reading variable: Cannot access memory at address 0x2&amp;gt;)&lt;BR /&gt;&amp;nbsp; &amp;nbsp; at ../pressure1.for:92&lt;BR /&gt;92&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;allocate(apr(n_apr))&lt;BR /&gt;(gdb) info stack&lt;BR /&gt;#0 &amp;nbsp;0x000000000042bebd in pressure1 (dt2=1.9762625833649862e-323, q1=&amp;lt;error reading variable: Cannot access memory at address 0x2&amp;gt;)&lt;BR /&gt;&amp;nbsp; &amp;nbsp; at ../pressure1.for:92&lt;BR /&gt;#1 &amp;nbsp;0x000000000040c755 in main () at ../Main.for:614&lt;BR /&gt;#2 &amp;nbsp;0x0000000000403d32 in main ()&lt;BR /&gt;(gdb) info frame&lt;BR /&gt;Stack level 0, frame at 0x7fffffffbf80:&lt;BR /&gt;&amp;nbsp;rip = 0x42bebd in pressure1 (../pressure1.for:92); saved rip = 0x40c755&lt;BR /&gt;&amp;nbsp;called by frame at 0x7fffffffc400&lt;BR /&gt;&amp;nbsp;source language fortran.&lt;BR /&gt;&amp;nbsp;Arglist at 0x7fffffffbf70, args: dt2=1.9762625833649862e-323, q1=&amp;lt;error reading variable: Cannot access memory at address 0x2&amp;gt;&lt;BR /&gt;&amp;nbsp;Locals at 0x7fffffffbf70, Previous frame's sp is 0x7fffffffbf80&lt;BR /&gt;&amp;nbsp;Saved registers:&lt;BR /&gt;&amp;nbsp; rbx at 0x7fffffffbf38, rbp at 0x7fffffffbf70, r12 at 0x7fffffffbf58, r13 at 0x7fffffffbf50, r14 at 0x7fffffffbf48,&lt;BR /&gt;&amp;nbsp; r15 at 0x7fffffffbf40, rip at 0x7fffffffbf78&lt;BR /&gt;(gdb) info address q1&lt;BR /&gt;Symbol "q1" is a complex DWARF expression:&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;0: DW_OP_breg4 0 [$rsi]&lt;BR /&gt;.&lt;BR /&gt;(gdb) whatis q1&lt;BR /&gt;type = REAL(8) (400,6,80)&lt;BR /&gt;(gdb) up&lt;BR /&gt;#1 &amp;nbsp;0x000000000040c755 in main () at ../Main.for:614&lt;BR /&gt;614&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;call pressure1(dti,q)&lt;BR /&gt;(gdb) whatis q&lt;BR /&gt;type = REAL(8) (400,6,80)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;When I delete the DIR SIMD directive, and recompile my code then my code runs. This is the content of my makefile&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;EXE= nohydropom_intel&lt;BR /&gt;FC= ifort&lt;BR /&gt;FFLAGS+= -O2 -m64 -mavx -mtune=core-avx-i -axAVX -real-size 64 -fp-model precise -fp-model source \&lt;BR /&gt;-fast-transcendentals -fimf-use-svml=true -fma -g -ipo -qopt-report=5 \&lt;BR /&gt;&amp;nbsp;-traceback&amp;nbsp;&lt;BR /&gt;#FFLAGS+= -O2 -xHost -real-size 64 -parallel -ipo -fstack-protector-all&lt;BR /&gt;#LDFLAGS = -lslatec -llapack&lt;BR /&gt;#LIBDIR = -L/usr/local/lib -L/usr/lib/lapack&lt;BR /&gt;LDFLAGS = -ladvisor&lt;BR /&gt;LIBDIR = -L/opt/intel/advisor/lib64&lt;BR /&gt;INCDIR = -I/opt/intel/advisor/include/intel64&lt;/P&gt;
&lt;P&gt;OBJS = \&lt;BR /&gt;Advsm.o&amp;nbsp;&amp;nbsp; &amp;nbsp;Subr.o&amp;nbsp;&amp;nbsp; &amp;nbsp;Bcond1.o&amp;nbsp;&amp;nbsp; &amp;nbsp;Vertstruct.o&amp;nbsp;&amp;nbsp; &amp;nbsp;S_t_subr.o \&lt;BR /&gt;Coef.o&amp;nbsp;&amp;nbsp; &amp;nbsp;Main.o&amp;nbsp;&amp;nbsp; &amp;nbsp;ztosig.o&amp;nbsp;&amp;nbsp; &amp;nbsp;pprint.o&amp;nbsp;&amp;nbsp; &amp;nbsp;pressure1.o&amp;nbsp;&amp;nbsp; &amp;nbsp;Wveloc.o \&lt;BR /&gt;Depth.o&amp;nbsp;&amp;nbsp; &amp;nbsp;seamount.o&amp;nbsp;&amp;nbsp; &amp;nbsp;Liadv.o&amp;nbsp;&amp;nbsp; &amp;nbsp;Slap.o&lt;/P&gt;
&lt;P&gt;${EXE}: &amp;nbsp;${OBJS}&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;$(FC) $(FFLAGS) -o $(EXE) $^ $(INCDIR) $(LIBDIR) $(LDFLAGS)&lt;/P&gt;
&lt;P&gt;${OBJS}: %.o: ../%.for&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;${FC} ${FFLAGS} -c -o $@ $&amp;lt; $(INCDIR)&lt;/P&gt;
&lt;P&gt;clean:&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;rm -f *.o $(EXE)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I have many questions about this issue. The variables in the DIR SIMD are not related with q1. I checked the declarations of q in Main.for, and q1 in pressure.for and they have the same declarations&lt;/P&gt;
&lt;P&gt;Main.for =&amp;gt; DIMENSION&amp;nbsp;&amp;nbsp;q(im,jm,kb)&lt;/P&gt;
&lt;P&gt;pressure1.for&amp;nbsp; =&amp;gt;&amp;nbsp; &amp;nbsp;dimension q1(im,jm,kb)&lt;/P&gt;
&lt;P&gt;im, jm, kb are defined as&amp;nbsp;&amp;nbsp;&amp;nbsp;PARAMETER (IM=400,JM=6,KB=80,ks=80)&amp;nbsp; &amp;nbsp;in a file called comblk98.h.&lt;/P&gt;
&lt;P&gt;So, I don't think that is an issue with my code. Somehow, the compiler is messing the options with the DIR SIMD directive. I wonder if anyone of you know if the DIR SIMD affects the way an array is passed to a subroutine. If you don't then I will open a ticket to Intel.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;By the way, this is my environment&lt;/P&gt;
&lt;P&gt;Iepardo@epardohome:~/nohydro/intel$ ifort -v&lt;BR /&gt;ifort version 19.0.3.199&lt;BR /&gt;epardo@epardohome:~/nohydro/intel$ uname -a&lt;BR /&gt;Linux epardohome 4.4.0-128-generic #154-Ubuntu SMP Fri May 25 14:15:18 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux&lt;BR /&gt;epardo@epardohome:~/nohydro/intel$ cat /etc/os-release&amp;nbsp;&lt;BR /&gt;NAME="Ubuntu"&lt;BR /&gt;VERSION="16.04.6 LTS (Xenial Xerus)"&lt;BR /&gt;ID=ubuntu&lt;BR /&gt;ID_LIKE=debian&lt;BR /&gt;PRETTY_NAME="Ubuntu 16.04.6 LTS"&lt;BR /&gt;VERSION_ID="16.04"&lt;BR /&gt;HOME_URL="http://www.ubuntu.com/"&lt;BR /&gt;SUPPORT_URL="http://help.ubuntu.com/"&lt;BR /&gt;BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"&lt;BR /&gt;VERSION_CODENAME=xenial&lt;BR /&gt;UBUNTU_CODENAME=xenial&lt;/P&gt;</description>
      <pubDate>Wed, 08 May 2019 03:49:43 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/SIGSEGV-in-an-argument-on-a-subroutine/m-p/1142468#M137625</guid>
      <dc:creator>Pardo_Arroyo__Ernest</dc:creator>
      <dc:date>2019-05-08T03:49:43Z</dc:date>
    </item>
    <item>
      <title>I have opened ticket 04186524</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/SIGSEGV-in-an-argument-on-a-subroutine/m-p/1142469#M137626</link>
      <description>&lt;P&gt;I have opened ticket&amp;nbsp;04186524 to Intel.&lt;/P&gt;</description>
      <pubDate>Wed, 08 May 2019 23:09:34 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/SIGSEGV-in-an-argument-on-a-subroutine/m-p/1142469#M137626</guid>
      <dc:creator>Pardo_Arroyo__Ernest</dc:creator>
      <dc:date>2019-05-08T23:09:34Z</dc:date>
    </item>
    <item>
      <title>The traceback that you</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/SIGSEGV-in-an-argument-on-a-subroutine/m-p/1142470#M137627</link>
      <description>&lt;P&gt;The traceback that you provided in #1 clearly shows that the last source line executed was in pressure1.for, namely,&amp;nbsp;line 92. The hundreds of lines of source code that you provided do not tell us what was on that line, and there is insufficient information to guess whether the problem is with the code in the subroutine, the arguments passed to the subroutine, or some combination of both.&lt;/P&gt;&lt;P&gt;The reported "Cannot access memory at address 0x2" is also an important clue that should be followed up. That sort of address should not be referenced in a user mode program.&lt;/P&gt;&lt;P&gt;I suggest that you run a serial version of your program with the same input data and with similar optimization levels as with the parallel version. Until such a run works and yields reasonable results, the complications associated with parallel code are tough to understand and investigate.&lt;/P&gt;</description>
      <pubDate>Thu, 09 May 2019 13:19:46 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/SIGSEGV-in-an-argument-on-a-subroutine/m-p/1142470#M137627</guid>
      <dc:creator>mecej4</dc:creator>
      <dc:date>2019-05-09T13:19:46Z</dc:date>
    </item>
    <item>
      <title>Hi, I have uploaded the Main</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/SIGSEGV-in-an-argument-on-a-subroutine/m-p/1142471#M137628</link>
      <description>&lt;P&gt;Hi, I have uploaded&amp;nbsp;the Main.for, pressure1.for, and makefile files. I didn't include any parallel or multithread options in the&amp;nbsp;makefile, so I assume that my code was compiled as serial. Please let me know if you need more files for your analysis.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 09 May 2019 22:49:47 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/SIGSEGV-in-an-argument-on-a-subroutine/m-p/1142471#M137628</guid>
      <dc:creator>Pardo_Arroyo__Ernest</dc:creator>
      <dc:date>2019-05-09T22:49:47Z</dc:date>
    </item>
    <item>
      <title>The include file 'comblk98.h'</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/SIGSEGV-in-an-argument-on-a-subroutine/m-p/1142472#M137629</link>
      <description>&lt;P&gt;The include file&amp;nbsp;'comblk98.h' probably contains some type declarations that are pertinent.&amp;nbsp; Do you use implicit typing in your sources?&lt;/P&gt;&lt;P&gt;How complicated is the source for&amp;nbsp;advisor_annotate.mod? In other words, would it be asking too much to request that you provide all the sources needed for an independent compilation of the source file pressure1.for?&lt;/P&gt;&lt;P&gt;There are some instances of nonstandard Fortran expressions, such as&amp;nbsp;'+' followed by '-' in lines 421, 422 of main.for: ...ADVUA(I,J) &lt;STRONG&gt;+-&amp;nbsp;&lt;/STRONG&gt;ARU(I,J)... I hope that you are aware of the implications of such usage.&lt;/P&gt;</description>
      <pubDate>Fri, 10 May 2019 11:13:27 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/SIGSEGV-in-an-argument-on-a-subroutine/m-p/1142472#M137629</guid>
      <dc:creator>mecej4</dc:creator>
      <dc:date>2019-05-10T11:13:27Z</dc:date>
    </item>
    <item>
      <title>I have uploaded all my code</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/SIGSEGV-in-an-argument-on-a-subroutine/m-p/1142473#M137630</link>
      <description>&lt;P&gt;I have uploaded all my code in a zip. For your analysis, you must use the makefile in the release directory to compile the code (that is the one that makes the exe that is crashing). My code is too old (fortran 77)&amp;nbsp;, so it's using implicit types. I don't know how complicated is the source of advisor_annotate since that it is part of Intel Advisor 19 Update 3 (a tool that was using to guide me to vectorize and parallelize my code). However, I will attach the source files for advisor-annotate too. I will check the lines that you mentioned later.&lt;/P&gt;&lt;P&gt;Thanks.&lt;/P&gt;</description>
      <pubDate>Fri, 10 May 2019 12:13:53 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/SIGSEGV-in-an-argument-on-a-subroutine/m-p/1142473#M137630</guid>
      <dc:creator>Pardo_Arroyo__Ernest</dc:creator>
      <dc:date>2019-05-10T12:13:53Z</dc:date>
    </item>
    <item>
      <title>FWIW</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/SIGSEGV-in-an-argument-on-a-subroutine/m-p/1142474#M137631</link>
      <description>&lt;P&gt;FWIW&lt;/P&gt;&lt;P&gt;SIMD generated code performs the calculations on all lanes of the SIMD (small vector) with applicable mask (depending on instruction set) and then performs a&amp;nbsp;masked store.&lt;/P&gt;&lt;P&gt;In the code presented in post #1 you have exception sections for the perimeter (surface boundary) of the volume being computed. It would be more (most) efficient to compute (SIMD) the interior&amp;nbsp;volume&amp;nbsp;separated from the (scalar) perimeter (surface boundary) and thus&amp;nbsp;eliminate complications of having the boundary tests (and unnecessary code that is masked out).&lt;/P&gt;&lt;P&gt;Jim Dempsey&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 10 May 2019 15:17:03 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/SIGSEGV-in-an-argument-on-a-subroutine/m-p/1142474#M137631</guid>
      <dc:creator>jimdempseyatthecove</dc:creator>
      <dc:date>2019-05-10T15:17:03Z</dc:date>
    </item>
    <item>
      <title>Pardo, the code that you</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/SIGSEGV-in-an-argument-on-a-subroutine/m-p/1142475#M137632</link>
      <description>&lt;P&gt;Ernesto, the code that you provided in #6 has bugs, I think. For instance, at the point where Seamount() is called from main.f, the array variables X and Y are undefined, but their values are used in the double DO loops after the call to DEPTH() in Seamount.f. Do you agree?&lt;/P&gt;</description>
      <pubDate>Fri, 10 May 2019 18:37:00 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/SIGSEGV-in-an-argument-on-a-subroutine/m-p/1142475#M137632</guid>
      <dc:creator>mecej4</dc:creator>
      <dc:date>2019-05-10T18:37:00Z</dc:date>
    </item>
    <item>
      <title>Hi mecej4. You are right</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/SIGSEGV-in-an-argument-on-a-subroutine/m-p/1142476#M137633</link>
      <description>&lt;P&gt;Hi mecej4. You are right about the undefined variables in seamount, that should be marked as a bug. I will try to fix it. Also, you were right regarding the signs in the expression that you mentioned in post #5. Regarding post #7 from Jim,&amp;nbsp; although I'm not very familiar with SIMD programming, his&amp;nbsp;comments have showed me that there could be a better way to change my code to improve optimization. Thanks to both of you guys.&lt;/P&gt;</description>
      <pubDate>Sat, 11 May 2019 05:25:00 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/SIGSEGV-in-an-argument-on-a-subroutine/m-p/1142476#M137633</guid>
      <dc:creator>Pardo_Arroyo__Ernest</dc:creator>
      <dc:date>2019-05-11T05:25:00Z</dc:date>
    </item>
    <item>
      <title>&gt;&gt; although I'm not very</title>
      <link>https://community.intel.com/t5/Intel-Fortran-Compiler/SIGSEGV-in-an-argument-on-a-subroutine/m-p/1142477#M137634</link>
      <description>&lt;P&gt;&amp;gt;&amp;gt;&amp;nbsp;although I'm not very familiar with SIMD programming&lt;/P&gt;&lt;P&gt;Perhaps something to provide insight will help.&lt;/P&gt;&lt;P&gt;SIMD = Single Instruction Multiple Data aka vector operations.&lt;/P&gt;&lt;P&gt;In a loop that is vectorized something like this happens:&lt;/P&gt;
&lt;PRE class="brush:fortran; class-name:dark;"&gt;...
if(simpleLogicalExpression) then
   out(i) = ExpressionSuitableForVectorization
   Also(i) = ...
   ThisToo(i) = ...
else
   out(i) = OtherExpressionSuitableForVectorization
   Also(i) = Other...
   ThisToo(i) = Other...
endif

Becomes: (sketch code)

   temp1A = ExpressionSuitableForVectorization
   temp2A = ...
   temp3A = ...
   temp1B = OtherExpressionSuitableForVectorization
   temp2B = Other...
   Temp3B = Other...
   mask = (simpleLogicalExpression)
   out(i) = (mask) ? temp1A : temp1B ! like in C++
   Also(i) = (mask) ? temp2A : temp2B
   ThisToo(i) = (mask) ? temp3A : temp3B&lt;/PRE&gt;

&lt;P&gt;Note, both branches of the IF statement are evaluated into temporary registers (across the width of the SIMD vector)&lt;BR /&gt;Then a mask is made &amp;nbsp;(across the width of the SIMD vector)&lt;BR /&gt;Then two masked moves are made &amp;nbsp;(across the width of the SIMD vector)&lt;/P&gt;
&lt;P&gt;Any improvement in vectorization comes at the expense of computing both halves of the IF statement plus the mask creation and additional conditional move. The benefit is there is no out of line branching for the code run.&lt;/P&gt;
&lt;P&gt;With simple (one or two) statements on each branch of the IF you generally see a net benefit. However, in problems such as yours, typically only one branch is executed at the periphery, and the other branch is executed in the interior. With this in mind, it makes sense to "effectively" duplicate the code inclusive of only the appropriate branch, one section for the periphery, and one for the interior.&lt;/P&gt;
&lt;P&gt;Jim Dempsey&lt;/P&gt;</description>
      <pubDate>Sat, 11 May 2019 13:03:09 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Fortran-Compiler/SIGSEGV-in-an-argument-on-a-subroutine/m-p/1142477#M137634</guid>
      <dc:creator>jimdempseyatthecove</dc:creator>
      <dc:date>2019-05-11T13:03:09Z</dc:date>
    </item>
  </channel>
</rss>

