Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.

Internal Compiler Error V14

jimdempseyatthecove
Honored Contributor III
1,167 Views

I am experiencing numerous internal compiler (V14) errors on a largish solution (13 projects, 750 files) that used to compile fine on earlier versions of the compiler. I have not yet updated to V15 to see if the error has been fixed. In an attempt to locate the compiler errors, I narrowed it down to a few lines.

*** the conditional compile as listed below produces an error but does not crash. This may be of interest in diagnosing the problem. Flipping the conditional the other way around produces the ICE.

#if 0
! { compiler bug hunt
    pFiniteSolutionYMM.rBeadIPIF(1,BeadNumber).v = pFiniteSolutionYMM.rBeadIPIF(1,0).v + DUMRUI(1).v
    pFiniteSolutionYMM.rBeadIPIF(2,BeadNumber).v = pFiniteSolutionYMM.rBeadIPIF(2,0).v + DUMRUI(2).v
    pFiniteSolutionYMM.rBeadIPIF(3,BeadNumber).v = pFiniteSolutionYMM.rBeadIPIF(3,0).v + DUMRUI(3).v
#else
    pFiniteSolutionYMM.rBeadIPIF(1:3,BeadNumber).v = pFiniteSolutionYMM.rBeadIPIF(1:3,0).v + DUMRUI(1:3).v
#endif
! } compiler bug hunt
--------------
Compiling with Intel(R) Visual Fortran Compiler XE 14.0.2.176 [Intel(R) 64]...
MOD_FOSScode.f90
C:\gtoss\Source\Modules\MOD_FOSScode.f90(2046): error #6159: A component cannot be an array if the encompassing structure is an array.   
C:\gtoss\Source\Modules\MOD_FOSScode.f90(2046): error #6159: A component cannot be an array if the encompassing structure is an array.   
C:\gtoss\Source\Modules\MOD_FOSScode.f90(2046): error #6159: A component cannot be an array if the encompassing structure is an array.   
compilation aborted for C:\gtoss\Source\Modules\MOD_FOSScode.f90 (code 1)
===========================

#if 1
! { compiler bug hunt
    pFiniteSolutionYMM.rBeadIPIF(1,BeadNumber).v = pFiniteSolutionYMM.rBeadIPIF(1,0).v + DUMRUI(1).v
    pFiniteSolutionYMM.rBeadIPIF(2,BeadNumber).v = pFiniteSolutionYMM.rBeadIPIF(2,0).v + DUMRUI(2).v
    pFiniteSolutionYMM.rBeadIPIF(3,BeadNumber).v = pFiniteSolutionYMM.rBeadIPIF(3,0).v + DUMRUI(3).v
#else
    pFiniteSolutionYMM.rBeadIPIF(1:3,BeadNumber).v = pFiniteSolutionYMM.rBeadIPIF(1:3,0).v + DUMRUI(1:3).v
#endif
---------------------
C:\gtoss\Source\Modules\MOD_FOSScode.f90: catastrophic error: **Internal compiler error: internal abort** Please report this error along with the circumstances in which it occurred in a Software Problem Report.  Note: File and line given may not be explicit cause of this error.
compilation aborted for C:\gtoss\Source\Modules\MOD_FOSScode.f90 (code 1)

Where

    ! AVX four-up double vector
    type TypeYMM
        SEQUENCE
        real(8) :: v(0:3)
    end type TypeYMM

Due to the size of the solution, I cannot provide a simple reproducer.

Jim Dempsey

0 Kudos
20 Replies
jimdempseyatthecove
Honored Contributor III
1,126 Views

All the .v's are of the TypeYMM

0 Kudos
Martyn_C_Intel
Employee
1,126 Views

I constructed a little program to test your code fragments, but was unable to reproduce an internal error with any compiler version.

I am able to reproduce error #6159, again for any compiler version. This I think refers to the use of array notation with applied loops at two different component levels; I don't really see how this would relate to the internal error once you fix it by specifying the array indices explicitly for one component.

Could you supply a little more context, e.g.:  the declaration of the type of pFiniteSolutionYMM; declaration of DUMRUI (is it allocatable? are these module variables or dummy arguments?); the loop nest that contains your code fragment; the command line that was used? 32 or 64 bit compiler? Do still you see the internal error in a debug build, without optimization and without inlining?

Perhaps that might help us to reproduce despite the size of your solution.

0 Kudos
jimdempseyatthecove
Honored Contributor III
1,125 Views
This probably will not help

! subroutine local variables
    type(TypeYMM), automatic :: DUMRUT(3), DUMVUT(3), DUMRUI(3), DUMVUI(3)
...
    type(TypeFiniteSolutionYMM) :: pFiniteSolutionYMM
---------------------------------------------------------------------------------
in a module
type TypeFiniteSolutionYMM
    SEQUENCE
#include "FiniteSolution.inc"
    ! additional members for TypeYMM
    integer :: TetherNumber0
    integer :: TetherNumber1
    integer :: TetherNumber2
    integer :: TetherNumber3
end type TypeFiniteSolutionYMM
---------------------------------------
! FiniteSolution.inc
!
! *** Note: FPP vs text "real"
! #undef real
! #define real type(TypeXMM)
! #define real type(TypeYMM)
! *** Note: FPP vs text "pointer"
! #undef pointer
! #define pointer target, allocatable

    real :: FirstReal   ! must be first
                        ! (union with first real if you wish)
    ! REAL variables
    
    ! INTEGRATION INTERVAL & LAPSED TIME OF FINITE TETHER SOLN
    ! (SEE: TIMSTG  BELOW FOR MORE TIME RELATED VARIABLES)
    real :: rDELTIS  ! DTISVW(1)
    real :: rTISTIM  ! DTISVW(2)

    ! Background information
    !
    ! Tethers pre _PartitionTethers were constrained to be
    ! deployed only from the X-end (if deployment used)
    ! The X-end deployment code is mature and should be
    ! considered "solid".
    !
    ! There are features of interest to be added to
    ! tether simulations:
    !
    ! 1) Deployment from both ends
    ! 2) Subdividing a tether for purposes of parallel processing
    ! 3) Permitting multiple tethers to reference one set of region
    !    information tables (e.g. when simulating a tether threading
    !    through an object)
    !
    ! One of the feature enhancement goals is to affect as little
    ! code as possible. To accomplish this a little bit of
    ! Slight-of-hand is incorporated.
    !
    ! Tether input data is constructed as pre _PartitionTethers
    ! in INGOSS with the following exceptions:
    !
    !   1) An optional field indicating the offset from the beginning
    !      of region 1 to the Y-end of the tether.
    !   2) The deployed tether length is now a signed number indicating
    !      the direction and distance from the Y-end offset.
    !   3) The initial Y-end deployment velocity (first derivative)
    !   4) The initial Y-end deployment acceleration (second derivative)
    !   5) An override indicating that the finite solution is to use
    !      a previously defined region information table
    ! 
    ! For tethers that are doubly deployed and if the simulation is run
    ! without OpenMP then the number of partitions defaults to 2.
    !
    ! When OpenMP is employed any/all/none FS tethers _may_ be specified
    ! to be partitioned or not.
    ! (doubly deployed tethers are always partitioned).
    !
    ! Partitioning is made in the following manner:
    !
    ! The originaly specified input tether is created. The FS code does
    ! not directly manipulate this tether's bead states. Instead, this
    ! tether's bead states are updated at the end of a solution cycle
    ! to reflect the composite tether as if it were not partitioned.
    !
    ! For a tether that is to be partitioned into n partitions n new
    ! tethers are created as well as n-1 coupling objects are created.
    ! The sum of the resultant beads plus coupling objects is the
    ! same as the original number of beads in the composite tether.
    ! The resultant tethers must meet the minimum bead count (3?).
    !
    ! When the new tethers are created they receive portions of the
    ! composite tether beginning at the X-end and progressing towards
    ! the Y-end. The sibling representing the composite's Y-end is special
    ! in that the X and Y ends are swapped. For doubly deployed tethers
    ! this means the Y-end sibling is now deploying from it's X-end.
    !
    ! Example:
    !   |--- Region 3 ---------|====== Region 2 ====|-- Region 1 --------|
    ! Composit: ()X  -  o  -  o  -  o  -  o  -  o  -  o  -  o  -  Y()
    ! Siblings: ()X  -  o  -  o  -  o  - Y()Y-  o  -  o  -  o  -  X()
    !
    ! 
    ! NOMINAL INSTANTANEOUS DEPLOYED (UNDEFORMED) TETHER LENGTH 
    real :: rEL      ! DTISVW(3)
    ! For composite tether this is the length (undeformed) between X and Y ends
    ! For sibling tetehr this is the length (undeformed) between it's X and Y ends
    
    ! rate of deployment +out, -in through the X end (Composite or sibling)
    real :: rELD     ! DTISVW(4)
    
    ! rate of rate of deployment +out, -in through the X end (Composite or sibling)
    real :: rELDD    ! DTISVW(5)

    ! The following is valid for the composite tether
    real :: RegionOffset ! length (undeformed) of tether from beginning of Region 1 to Y-end
    real :: rELD_Y      ! rate of deployment +out, -in through the Y-end
    real :: rELDD_Y  ! rate of rate of deployment +out, -in through the Y-end
    
    ! Notes,
    !
    ! For non-partitioned tethers  rELD_Y, rELDD_Y are 0
    ! For all tethers the sum of rEL + RegionOffset cannot exceed the sum
    ! of the region lengths.
    !
    ! TNSMKS and other similar routines must account for RegionOffset when
    ! figguring out the bead position along the region information.
    !
    ! The composite tether is updated as part of the solution cycle.
    !
    ! The RDB and AVRDB database files are un-aware of the additional
    ! tethers and objects spawned by partitioning. 
    !
    ! Keeping partitioning hidden and seperate permit flexibility to
    ! partition according to number of processors on a given platform.
    
    ! leftovers
    real :: WASrBETAT   ! DTISVW(9)
    real :: WASrDIAROT  ! DTISVW(10)
    
    ! SOME TIME VARIANT FINITE TETHER TERMS
    real :: rAEOL    ! DTISVW(11)
    real :: rAYOUNG  ! DTISVW(12)

    ! TETHER NON-LINEAR STIFFNESS TERMS
    real :: rDNLCS   ! DTISVW(13)
    real :: rDNLEX   ! DTISVW(14)

    ! VARIABLES ASSOCIATED WITH HOST DRIVEN STEPSIZE CAPABILITY
    real :: rTBIASF  ! DTISVW(NTISVW-2)
    real :: rDELTPF  ! DTISVW(NTISVW-1)

    ! TETH DENSITY AT DEPLOY END (SEG 1) FOR USE IN MASS-FLOW FORCE CALCS
    real :: rDENSEG1 ! DTISVW(NTISVW)

    ! POSITION VECTOR BETWEEN ATT PTS (INER FRAME)
    real :: rELI(3)    ! DTISXW(1)

    ! DERIVATIVE OF POS VECTOR BETWEEN ATT PTS (INER FRAME)
    real :: rELDI(3)   ! DTISXW(4)

    ! 2ND DERIV OF POS VECTOR BETWEEN ATT PTS (INER FRAME)
    real :: rELDDI(3)  ! DTISXW(7)

    ! DERIVATIVE OF POS VECTOR BETWEEN ATT PTS (TETHER FRAME)
    real :: rELDT(3)   ! DTISXW(10)
    
    ! TETHER FRAME TO INER FRAME AND ORBITAL FRAME TRANSFORMATION
    real :: rGIT(3,3)  ! DTISXW(16)
    real :: rGTO(3,3)  ! DTISXW(25)

    ! INSTANTANEOUS DISTANCE BETWEEN ATT PTS (AND 2 DERIVATIVES)
    real :: rELMG      ! DTISXW(34)
    real :: rELMGD     ! DTISXW(35)
    real :: rELMGDD    ! DTISXW(36)

    ! ANGULAR MOMENTUM, ETC OF TOSS REF POINT (INER AND ORB FRAME)
    real :: rRVDI(3)   ! DTISXW(37)
    real :: rRVDO(3)   ! DTISXW(40)

    ! UNIT NORMAL TO TOSS REF PT ORB FRAME
    real :: rUJOI(3)  ! DTISXW(46)

    ! DERIV OF ORB FRAME J UNIT VECTOR (ORB AND TETHER FRAME)
    real :: rUJDO(3)   ! DTISXW(49)
    real :: rUJDT(3)   ! DTISXW(52)

    ! TETHER FRAME ANGULAR VEL VECTOR (TETHER FRAME)
    union
    map
        real :: rOMT(3)   ! DTISXW(55)
    end map
    map
        real :: rOMXT     ! DTISXW(55)
        real :: rOMYT     ! DTISXW(56)
        real :: rOMZT     ! DTISXW(57)
    end map
    end union

    ! POS,VEL,ACC OF REF END OF TETHER WR/T TOSS REF PT (INER FRAME)
    real :: rAREFR(3)   ! DTISXW(82)
    real :: rAREFV(3)   ! DTISXW(85)
    real :: rAREFA(3)   ! DTISXW(88)

   ! REF ATTACH PT ("X" END) POS WR/T INER PT(INER FRAME)
    real :: rARI(3)   ! DTISXW(91)
#ifdef _BeadsIPIF
    ! REF ATTACH PT ("X" END) POS WR/T INER PT(INER FRAME)
    ! Copied to rBeadIPIF(:,0)
    ! OTHER ATTACH PT ("Y" END) POS WR/T INER PT(INER FRAME)
    ! Copied to rBeadIPIF(:,NBEAD+1)
#endif
    
    ! REF ATTACH PT ("X" END) VEL WR/T INER PT(INER FRAME)
    real :: rAVI(3)   ! DTISXW(94)
#ifdef _BeadsIPIF
    ! REF ATTACH PT ("X" END) VEL WR/T INER PT(INER FRAME)
    ! Copied to rBeadDIPIF(:,0)
    ! OTHER ATTACH PT ("Y" END) VEL WR/T INER PT(INER FRAME)
    ! Copied to rBeadDIPIF(:,NBEAD+1)
#endif
    
    ! REF ATTACH PT ("X" END) ACCEL WR/T INER PT(INER FRAME)
    real :: rAAI(3)   ! DTISXW(97)
#ifdef _BeadsIPIF
    ! REF ATTACH PT ("X" END) ACCEL WR/T INER PT(INER FRAME)
    ! Copied to rBeadDDIPIF(:,0)
    ! OTHER ATTACH PT ("Y" END) ACCEL WR/T INER PT(INER FRAME)
    ! Copied to rBeadDDIPIF(:,NBEAD+1)
#endif

    ! TETHER FRAME UNIT VECTORS
    real :: rUITI(3)  ! DTISXW(100)
    real :: rUJTI(3)  ! DTISXW(103)
    real :: rUKTI(3)  ! DTISXW(106)

    ! DERIV OF TETHER FRAME I UNIT VECTOR (INER FRAME)
    real :: rUITDI(3)   ! DTISXW(109)
    real :: rUITDDI(3)  ! DTISXW(112)

    ! RECIPROCAL OF 'DISTANCE BETWEEN ATTACH POINTS'
    real :: rOOLMG    ! DTISXW(115)

    ! GROSS STRETCH IN TETHER
    real :: rDELMEL   ! DTISXW(116)
    
    !----------------------------------------
    ! FORCE DETERMINATION
    !----------------------------------------

    ! ACCEL OF GRAV AT POINT ON TETHER
    real :: rAUGI(3)  ! DTISZW(1)

    ! POS OF TETHER PT WR/T TETHER REF END (INER FRAME)
    real :: rRUI(3)   ! DTISZW(10)

    ! VEL OF TETHER PT WR/T TETHER REF END (INER FRAME)
    real :: rVUI(3)   ! DTISZW(13)

    ! MISC VARIABLES USED FOR GRAV GARDIENT IC CALCS
    real :: rAUGT(3)     ! DTISZW(25)
    real :: rOMIJT(3,3)  ! DTISZW(28)
#if 0
    ! UNIT TANGENT VECTOR AT PT ON TETHER
    real :: rTUI(3)   ! DTISZW(43)
#else
    real :: WASrTUI(3)   ! DTISZW(43)
#endif

    ! AERODYNAMIC AND MISCELLANEUOS TERMS
    real :: rDRGMUL   ! DTISZW(57)
    real :: rVALMUE   ! DTISZW(61)

    ! UNIFORM COMPONENT OF CURRENT IN FINITE TETHER
    ! (CAN HAVE VALUE INDEPENDENT OF AND ADDITIVE TO CURRTS)
    real :: rCURRT     ! DTISZW(80)

    ! TERMS ASSOCIATED WITH ELECTRODYNAMIC FORCE CALC
    real :: rEMFTOT     ! DTISZW(90)
    real :: rSEGLEN     ! DTISZW(91)

    ! TOSS-TETHER REQUESTED BREAK CRITERIA VALUE
    real :: rVALBRK    ! DTISZW(101)

    ! INSTANTANEOUS ETHER DAMPER FACTOR IN FINITE TETHER
    ! (ASSOCIATED WITH FICTITIOUS SKIP ROPE DAMPING REQUIREMENT)
    real :: rEFACT     ! DTISZW(102)

    !---------------------------------------------------------------
    ! TENSION CALCS, THERMAL CONSTANTS, PLUS MISC
    !---------------------------------------------------------------

    ! DATA RELATED TO ASSESSING DYNAMIC EQUILIBRIUM OF BEAD SOLNS

    ! "OFFICIAL" FINITE TETHER TENSION VECTOR (INER FRAME)
    real :: rXEFTEN(3)  ! DTISRW(1)
    real :: rYEFTEN(3)  ! DTISRW(4)

    ! TENSION VECS DERIVED VIA STRAIN CALCULATIONS (TETHER FRAME)
    real :: rTNSOI(3)  ! DTISRW(7) 
    real :: rTNSLI(3)  ! DTISRW(10)

    ! TENSION REQUIRED FOR GGIC AT 1ST AND LAST SEG (IF GGIC IS ACTIVE)
    real :: rTGGIC1    ! DTISRW(13) 
    real :: rTGGICL    ! DTISRW(14)

    ! THERMAL CONSTANTS
    !------------------
    ! HEAT CONDUCTIVITY OF TETHER PER UNIT AREA
    real :: rAKHC      ! DTISRW(15)

    ! HEAT CONDUCTIVITY OF X-END ATTACH POINT TO TETHER
    real :: rAKHCX     ! DTISRW(16)

    ! HEAT CONDUCTIVITY OF Y-END ATTACH POINT TO TETHER
    real :: rAKHCY     ! DTISRW(17)

    ! COEFF OF THERMAL EXPANSION (LINEAR NOT VOLUMETRIC)
    real :: rALPHAL    ! DTISRW(18)

    ! ABSORPTIVITY IN SOLAR SPECTRUM
    real :: rALPHAS    ! DTISRW(19)

    ! SPECIFIC HEAT PER UNIT MASS
    real :: rCVMASS    ! DTISRW(20)

    ! SLOPE OF DAMPING WR/T TEMP
    real :: rDBTADT    ! DTISRW(21)

    ! SLOPE OF SPECIFIC HEAT WR/T TEMP
    real :: rDCVMDT    ! DTISRW(22)

    ! SLOPE OF RESISTIVITY WR/T TEMP
    real :: rDRHODT    ! DTISRW(23)

    ! SLOPE OF YOUNGS MODULUS WR/T TEMP
    real :: rDYMDT     ! DTISRW(24)

    ! EMISSIVITY IN RADIANT SPECTRUM
    real :: rEPSS      ! DTISRW(25)

    ! RESISTIVITY OF CONDUCTOR PER UNIT LENGTH (AT REF TEMPERATURE)
    real :: rRHOELC    ! DTISRW(26)

    ! REF TEMPERATURE AT WHICH TETHER BASELINE PROPERTIES APPLY
    real :: rTREF      ! DTISRW(27)

    ! DATA RELATED TO ASSESSING DYNAMIC EQUILIBRIUM OF BEAD SOLNS
    !------------------------------------------------------------
    real :: rDPBAI(3)   ! DTISRW(28)
    real :: rDPAAI(3)   ! DTISRW(31)
    real :: rDPBAIL(3)  ! DTISRW(34)
    real :: rDPAAIL(3)  ! DTISRW(37)
    real :: rDHBBIL(3)  ! DTISRW(40)

    ! SOME TERMS ASSOCIATED WITH BARE WIRE POWER SCENARIO OPERATIONS
    ! (SPECIFICALLY RELATED TO SCENARIO 5, BUT CANBE USED FOR OTHERS)
    !---------------------------------------------------------------
    ! EMITTER-END CURRENT, INTEGRAL, AVER, BATT CURR INTEGRAL, MODE
    real :: rEMICUR  ! DTISRW(43)
    real :: rCURINT  ! DTISRW(44)
    real :: rCURAVG  ! DTISRW(45)
    real :: rBATINT  ! DTISRW(46)
    real :: rCURMOD  ! DTISRW(47)

    ! THESE PARAMETERS HAVE SPECIAL MEANING FOR SCENARIO 6 (STEP-AIRSEDS)
    !--------------------------------------------------------------------
    ! BODY BIAS VOLTAGE (POWER SUPPLY VOLTAGE)
    real :: rVOLTS_OUT ! DTISRW(48)
    
    ! POWER SUPPLY POWER
    real :: rPOWER_OUT ! DTISRW(49)

    ! TOTAL END-TO-END ELECTRICAL RESISTANCE OF TETHER (OHM)
    real :: rTOTRIS   ! DTISRW(50)

    ! EFFECTIVE PLASMA CONTACTING GIRTH-LENGTH AROUND TETHER
    real :: rEDYNC    ! DTISRW(51)

    ! DEPLOYMENT MOMENTUM MASS-TRANSFER FORCE AT X-END OF TETHER
    real :: rXEFMT(3)  ! DTISRW(52)
    ! DEPLOYMENT MOMENTUM MASS-TRANSFER FORCE AT Y-END OF TETHER
    real :: rYEFMT(3)  ! DTISRW(52)
    
    !----------------------------------------------------
    ! MISCELLANEOUS BEAD MODEL SUPPORT
    !----------------------------------------------------

    ! NOMINAL DEPLOYED (UNDEFORMED) TETHER LENGTH,RATE - BETWEEN 2 BEADS
    real :: rELB     ! DTISPW(1)
    real :: rELBD    ! DTISPW(2)

    ! X-AXIS UNIFORM SEG LENGTH (AND DERIV) BASED ON DIST BETWEEN ATT PTS
    real :: rELSGX   ! DTISPW(3)
    real :: rELSGXD  ! DTISPW(4)

    ! SPATIAL ARC LENGTH OF TETHER (SUM OF ACTUAL DISTANCES BETWEEN BEADS)
    real :: rARCTOT  ! DTISPW(5)

    ! HST solution and speed of sound solution mutually exclusive
    union
        map
            ! FRACTIONAL ERROR IN SEG LENGTH AT WHICH HST SOLN DECLARES FAILURE
            real :: rHSTFRL  ! DTISPW(6)
        end map
        map
            real :: rSpeedOfSoundFPS
        end map
    end union
    

    ! HST SOLN CONSTRAINT CONTROL ERROR AND RATE GAINS
    real :: rHSTGNE  ! DTISPW(7)
    real :: rHSTGNR  ! DTISPW(8)

    ! ACTUAL TOTAL DEPLOYED UNDEFORMED TETHER LENGTH
    ! (REFLECTS CHANGES DUE TO THERMAL EFFECTS)
    real :: rSEGLAT  ! DTISPW(9)

    ! TOTAL MASS OF DEPLOYED TETHER (IE. SUM OF ALL THE BEAD MASSES)
    ! rBMS(0:NBEAD+1)
    real :: rBMSTOT   ! DTISPW(10)

    ! NUMBER OF TETHER SEGMENTS BETWEEN BEADS (AND RECIPROCAL)
    real :: rBNSEG    ! DTISPW(11)
    real :: rOBNSEG   ! DTISPW(12)

    ! MISCELLANEOUS DYN COUPLING VECTOR
    real :: rSLROC(3) ! DTISPW(13)

    ! TIME AT WHICH SEGMENT BREAKS MAY OCCUR
    real :: rTS1BRK   ! DTISPW(16)
    real :: rTS2BRK   ! DTISPW(17)

    ! POS,VEL WR/T INER PT OF Y-END OF A BEAD SEGMENT (INER FRAME)
    real :: rRYENDI(3) ! DTISPW(24)
    real :: rVYENDI(3) ! DTISPW(27)

    ! TETHERS X-END,Y-END-SEGMENT TARE FORCES (USED IN ATT PT TENS CALC)
    real :: rXETARE(3) ! DTISPW(30)
    real :: rYETARE(3) ! DTISPW(33)
#ifdef _BeadsIPIF
    ! Copies of TARE FORCES stored in
    ! rBeadFEXIF(:,0) = rXETARE
    ! rBeadFEXIF(:,NBEAD+1) = rYETARE
#endif
    
    ! MISCELLANEOUS SEGMENT SPRING FORCE TERMS
    real :: rDELSG     ! DTISPW(36)
    real :: rDELSGD    ! DTISPW(37)
    real :: rFSEG      ! DTISPW(38)

    ! SUM OF AERO AND ELECTRO FORCES ON BEAD TETHER
    real :: rFBMAI(3)  ! DTISPW(39)
    real :: rFBMEI(3)  ! DTISPW(42)

    ! TOTAL LINEAR MOMENTUM (W/NUM DERIV), TOTAL EXT FORCE, FRACT ERROR
    real :: rPBBI(3)    ! DTISPW(49)
    real :: rPBBID(3)   ! DTISPW(52)
    real :: rFEBBI(3)   ! DTISPW(55)
    real :: rERRPBB(3)  ! DTISPW(58)

    ! TOTAL ANGULAR MOMENTUM (W/NUM DERIV), TOTAL EXT FORCE, FRACT ERROR
    real :: rHBBI(3)    ! DTISPW(61)
    real :: rHBBID(3)   ! DTISPW(64)
    real :: rGEBBI(3)   ! DTISPW(67)
    real :: rERRHBB(3)  ! DTISPW(70)

    ! BEAD MODEL CENTER OF MASS STATE WR/T X-END ATTACH PT
    real :: rBBCGI(3)   ! DTISPW(73)
    real :: rBBCGID(3)  ! DTISPW(76)

    ! TRANSIENT TETHER THERMAL VARIABLES
    !-----------------------------------
    ! SEG AND TOTAL QDOT DUE TO ALBEDO
    real :: rQDALB      ! DTISPW(82)
    real :: rQDALBT     ! DTISPW(83)

    ! SEG AND TOTAL QDOT DUE TO AERODYNAMICS
    real :: rQDARO      ! DTISPW(84)
    real :: rQDAROT     ! DTISPW(85)

    ! SEG AND TOTAL QDOT DUE TO EARTH (BLACK BODY) RADIATION
    real :: rQDEBB      ! DTISPW(86)
    real :: rQDEBBT     ! DTISPW(87)

    ! SEG AND TOTAL QDOT DUE TO OHMIC HEATING
    real :: rQDELC      ! DTISPW(88)
    real :: rQDELCT     ! DTISPW(89)

    ! SEG AND TOTAL QDOT DUE TO RADIATION EMISSION BY TETHER
    real :: rQDEMIT     ! DTISPW(90)
    real :: rQDEMTT     ! DTISPW(91)

    ! SEG AND TOTAL QDOT DUE TO INTER-SEGMENT CONDUCTION (4EA==FOURIER)
    real :: rQD4EA      ! DTISPW(92)
    real :: rQD4EAT     ! DTISPW(93)

    ! SEG AND TOTAL QDOT DUE TO SOLAR RADIATION
    real :: rQDSOL      ! DTISPW(94)
    real :: rQDSOLT     ! DTISPW(95)

    ! TETHER PLANET GEOMETRICAL VIEW FACTOR
    real :: rVUFAC      ! DTISPW(96)

    ! TETHER ALBEDO EXPOSURE FACTOR FACTOR
    real :: rALBFAC     ! DTISPW(97)

    ! LAST VALUE OF TENSION (NEEDED FOR PERSISTENCE AND IC IN TNSHIC)
    real :: rTENLAS     ! DTISPW(98)

    ! PLASMA ELECTRON DENSITY ARRAY FOR UP TO 50 BANDS OF ALTITUDE
    real :: rEDENS(50)     ! DTISPW(99)
    
    real :: rPriorXrBeadIPIF(3)
    real :: rPriorXrBeadDIPIF(3)
    real :: rPriorYrBeadIPIF(3)
    real :: rPriorYrBeadDIPIF(3)
    
    real :: LastReal   ! must be last
                        ! (union with last real if you wish)
    
    ! INTEGER variables
    integer :: FirstInteger ! must be first
    integer :: iNFTIME  ! JTISUW(1)

    ! SPECIFIES REF END FOR HST TENSION SOLN (X=0, Y=1)
    integer :: iNXYHST  ! JTISUW(4)

    ! FINITE MODEL TYPE SPECIFIER [BEAD TYPE(S)]
    integer :: iNFTYP   ! JTISUW(5)

    ! NUMBER OF BEADS IN BEAD MODEL
    integer :: iNBEAD   ! JTISUW(6)
    integer :: iN3BEAD  ! JTISUW(7)

    ! ONE SHOT LOGIC FOR SPECIAL HST FINITE SOLN INITIALIZATION
    integer :: iJONCE   ! JTISUW(8)

    ! SUNLIGHT DAY-NIGHT AND TERMINATOR INDICATOR FLAGS
    integer :: iLITNIT  ! JTISUW(9)
    integer :: iLITERM  ! JTISUW(10)

    ! REGION-LENGTH REFERENCE FOR RECKONING NON-UNIFORM PROPERTIES
    integer :: iNNUREF  ! JTISUW(13)

    ! GENERALIZED COORDINATE INITIALIZATION OPTION
    integer :: iLFIC    ! JTISUW(14)

    ! GENRALIZED FORCE EVALUATION OPTION SPECIFIER
    integer :: iLOPGRV  ! JTISUW(15)
    integer :: iLOPARO  ! JTISUW(16)
    integer :: iLOPELC  ! JTISUW(17)

    ! HST SEG LENGTH ERROR FLAG (0 = OK, 1 = FAILED)
    integer :: iJHSTER  ! JTISUW(18)

    ! TOSS TETHER BREAK INDICATOR WHICH GETS ASSOCIATED W/ FINIT SOLN
    integer :: iNBRKTP  ! JTISUW(19)

    ! BEAD SEGMENT BREAK INDICATOR FOR TOSS TETHER ASSOCIATED BREAK
    integer :: iNSTBRK  ! JTISUW(20)

    ! FOR BEAD MODEL, SEGMENT NUMBER OF 1ST AND 2ND POSSIBLE BREAKS
    integer :: iNS1BRK  ! JTISUW(21)
    integer :: iNS2BRK  ! JTISUW(22)

    ! FOR BEAD MODEL, FLAGS TO INDICATE IF 1ST OR 2ND BREAK HAS OCCURRED
    integer :: iNF1BRK  ! JTISUW(23)
    integer :: iNF2BRK  ! JTISUW(24)

    ! FOR BEAD MODEL, NUMBER OF NON-UNIFORM-PROPERTY REGIONS
    integer :: iNNUPR   ! JTISUW(25)
    
    ! BEAD MODEL SKIP ROPE INITIALIZATION OPTION
    integer :: iLSIC    ! JTISUW(26)
    integer :: iLSMODE  ! JTISUW(27)

    ! FOR BEAD MODEL, TYPE OF NON-UNIFORM-PROPERTY INTERPOLATION
    integer :: iNNUITD  ! JTISUW(28)
    integer :: iNNUITE  ! JTISUW(29)
    integer :: iNNUITA  ! JTISUW(30)
    
    union
    map
    integer :: LastInteger   ! must be last (may be unioned)
    end map
    map
    integer :: FirstPointer   ! must be first (may be unioned)
    end map
    end union
#ifdef _DEBUG_SIMD
    type(TypeFiniteSolution), pointer :: NextFiniteSolution
#endif
    ! All allocatable arrays are to follow the real's and integer's
    !
    ! **** the pointer attribute is used in lieu of allocatable
    ! **** because the TypeFiniteSolution (ourself) is itself allocated
    ! **** upon allocation we need to issue the NULLIFY intrinsic function
    
    ! Note, although the following could be placed in a master
    ! structure named Region and then allocated to NNUPR number
    ! of entries and thus make the allocation/deallocation simpler
    ! the field entries are placed individualy below for two reasons
    !
    ! a) The old code expects it this way
    ! b) It turns out that the L1/L2/L3 cache on most processors work
    !    more effectively using this format.
    !
    type(TypeRegionInfo), pointer :: pRegionInfo
    ! Note, although the following could be placed in a master
    ! structure named Bead and then allocated to NBEAD number
    ! of entries and thus make the allocation/deallocation simpler
    ! the field entries are placed individualy below for two reasons
    ! a) The old code expects it this way
    ! b) It turns out that the L1/L2/L3 cache on most processors work
    !    more effectively using this format.
    !
    ! Bead data
#ifdef _BeadsIPIF
    ! allocate to (1:3,0:NBEAD+1)
    ! The 0't index holds a copy of the X-end object state
    ! The NBEAD+1't index holds a copy of the Y-end object state
    ! Position with respect to IP IF
    real, pointer :: rBeadIPIF(:,:)    ! DTISYW(1)
    type(ShadowArray) :: saBeadIPIF
    ! Velocity with respect to IP IF
    real, pointer :: rBeadDIPIF(:,:)   ! DTISYW(1*MAX3BB +1)
    type(ShadowArray) :: saBeadDIPIF
    ! Acceleration with respect to IP IF
    real, pointer :: rBeadDDIPIF(:,:)  ! DTISYW(3*MAX3BB +1)
    type(ShadowArray) :: saBeadDDIPIF
    ! Prior Velocity with respect to IP IF
    real, pointer :: rBeadDIPIFP(:,:)  ! DTISYW(2*MAX3BB +1)
    type(ShadowArray) :: saBeadDIPIFP
#if 0
    ! Prior Acceleration with respect to IP IF
    real, pointer :: rBeadDDIPIFP(:,:) ! DTISYW(4*MAX3BB +1)
    type(ShadowArray) :: saBeadDDIPIFP
#endif
    ! SUM OF EXTERNAL FORCES ON BEAD COORDS (IE NO GRAV, NO SPRING)
    real, pointer :: rBeadFEXIF(:,:)  ! DTISYW(5*MAX3BB +1)
    type(ShadowArray) :: saBeadFEXIF
#if 0
    ! Prior SUM OF EXTERNAL FORCES ON BEAD COORDS (IE NO GRAV, NO SPRING)
    real, pointer :: rBeadFEXIFP(:,:)  ! DTISYW(5*MAX3BB +1)
    type(ShadowArray) :: saBeadFEXIFP
#endif
    ! SPRING AND SPRING DAMPING FORCES ON BEAD COORDS
    real, pointer :: rBeadFSIF(:,:)   ! DTISYW(6*MAX3BB +1)
    type(ShadowArray) :: saBeadFSIF
    ! SUM OF ALL CONTRIBUTION TO ACCEL THAT HAS LOW COORD SENSITIVITY
    real, pointer :: rBeadCINSIF(:,:)  ! DTISYW(7*MAX3BB +1)
    type(ShadowArray) :: saBeadCINSIF
#ifdef _BypassTNSCUP
    ! _BypassTNSCUP does not use rBeadSLROCJIF(:,:)
#else
    ! PERTURBATION COORD COUPLING TERMS
    real, pointer :: rBeadSLROCJIF(:,:) ! DTISYW(8*MAX3BB +1)
    type(ShadowArray) :: saBeadSLROCJIF
#endif
    ! ACCEL OF GRAV AT EACH BEAD POSITION (INER FRAME COMP)
    real, pointer :: rBeadAGIF(:,:)   ! DTISYW(9*MAX3BB +1)
    type(ShadowArray) :: saBeadAGIF
#else
    ! BEAD DISPLACEMENT COORDINATES (AND PREVIOUS VALUES)
    ! allocate to NBEAD*3
    real, pointer :: rBUI(:)    ! DTISYW(1)
    type(ShadowArray) :: saBUI
    real, pointer :: rBUDI(:)   ! DTISYW(1*MAX3BB +1)
    type(ShadowArray) :: saBUDI
    real, pointer :: rBUDIP(:)  ! DTISYW(2*MAX3BB +1)
    type(ShadowArray) :: saBUDIP
    real, pointer :: rBUDDI(:)  ! DTISYW(3*MAX3BB +1)
    type(ShadowArray) :: saBUDDI
#if 0
! BUDDIP not used
    real, pointer :: rBUDDIP(:) ! DTISYW(4*MAX3BB +1)
    type(ShadowArray) :: saBUDDIP
#endif 

    ! SUM OF EXTERNAL FORCES ON BEAD COORDS (IE NO GRAV, NO SPRING)
    ! allocate to NBEAD*3
    real, pointer :: rBFEXI(:)  ! DTISYW(5*MAX3BB +1)
    type(ShadowArray) :: saBFEXI

    ! SPRING AND SPRING DAMPING FORCES ON BEAD COORDS
    ! allocate to NBEAD*3
    real, pointer :: rBFSI(:)   ! DTISYW(6*MAX3BB +1)
    type(ShadowArray) :: saBFSI

    ! SUM OF ALL CONTRIBUTION TO ACCEL THAT HAS LOW COORD SENSITIVITY
    ! allocate to NBEAD*3
    real, pointer :: rBCINS(:)  ! DTISYW(7*MAX3BB +1)
    type(ShadowArray) :: saBCINS

    ! PERTURBATION COORD COUPLING TERMS
    ! allocate to NBEAD*3
    real, pointer :: rSLROCJ(:) ! DTISYW(8*MAX3BB +1)
    type(ShadowArray) :: saSLROCJ

    ! ACCEL OF GRAV AT EACH BEAD POSITION (INER FRAME COMP)
    ! allocate to NBEAD*3
    real, pointer :: rBAGI(:)   ! DTISYW(9*MAX3BB +1)
    type(ShadowArray) :: saBAGI

    ! BEAD STATES IN TETHER FRAME FOR ICS AND INTERPRETATION
    ! allocate to NBEAD*3
    ! position
    real, pointer :: rBUT(:)     ! DTISYW(10*MAX3BB +1)
    type(ShadowArray) :: saBUT
    ! velocity
    real, pointer :: rBUDT(:)    ! DTISYW(11*MAX3BB +1)
    type(ShadowArray) :: saBUDT
    
    ! BFST(JB1) = TENSION DROP ACROSS BEAD
    ! TOZDDB has BFST(JB1) = BMS(JBB)*(AATDUM - AUGT(1) + CUTDUM)
    !   BFST(JB2), BFST(JB3) apparently not used
    ! TOZDDB1 has BFST(JB1) = BMS(JBB)*(AATDUM - AUGT(1) + CUTDUM)
    !   BFST(JB2), BFST(JB3) apparently not used
    ! allocate to NBEAD*3
    real, pointer :: rBFST(:)    ! DTISYW(12*MAX3BB +1)
    type(ShadowArray) :: saBFST

    ! BEAD POSITION AND VELOCITY WR/T TETHER REF END (INER FRAME)
    ! allocate to NBEAD*3
    ! computed by TNSVEL (from BUI and BUDI)
    ! GTOSUB:DERIV:TOSEXE:TOSSET:TNSTHR:TNSVEL
    real, pointer :: rRUBI(:)   ! DTISYW(13*MAX3BB +1)
    type(ShadowArray) :: saRUBI
    real, pointer :: rVUBI(:)   ! DTISYW(14*MAX3BB +1)
    type(ShadowArray) :: saVUBI
    
#endif
    ! CURRENT EQUIVALENT MASS OF A BEAD
    ! rBMS(0:NBEAD+1)
    real, pointer :: rBMS(:)     ! DTISYW(JUMEQ2 +1)
    type(ShadowArray) :: saBMS

    ! Bead displacement (volume) cf for bouyance calculations
    ! rDisplacement(0:NBEAD+1)
    real, pointer :: rDisplacement(:)     ! DTISYW(??)
    type(ShadowArray) :: saDisplacement

    ! NBEAD allocation
    ! HST FORCE COEFF MULTIPLIERS
    real, pointer :: rCLAMBA(:)  ! DTISYW(1*MAXBBS + JUMEQ2 +1)
    type(ShadowArray) :: saCLAMBA

    ! HST CONSTRAINT EQUATION RHS VALUES
    real, pointer :: rADA(:)     ! DTISYW(2*MAXBBS + JUMEQ2 +1)
    type(ShadowArray) :: saADA
    
    ! Segment data
    ! First section allocated to NBEAD+1
    ! TENSION IN EACH SEGMENT BETWEEN 2 BEADS
    real, pointer :: rTENSEG(:) ! DTISYW(JUMEQ1 +1)
    type(ShadowArray) :: saTENSEG

    ! CURRENT EFFECTIVE SEGMENT SPRING RATE AND DAMPING COEFF
    real, pointer :: rBEADKS(:) ! DTISYW(1*MAXSEG + JUMEQ1 +1)
    type(ShadowArray) :: saBEADKS
    real, pointer :: rBEADKD(:) ! DTISYW(2*MAXSEG + JUMEQ1 +1)
    type(ShadowArray) :: saBEADKD

    ! CURRENT EQUIVALENT AERO DIAMETER OF A SEGMENT
    real, pointer :: rDIARO(:) ! DTISYW(3*MAXSEG + JUMEQ1 +1)
    type(ShadowArray) :: saDIARO

    ! DERIV OF SEG WR/T MU (AND ITS TIME DERIV) FOR FLOW CALCS
    real, pointer :: rDSDU(:)   ! DTISYW(4*MAXSEG + JUMEQ1 +1)
    type(ShadowArray) :: saDSDU
    real, pointer :: rDSDUD(:)  ! DTISYW(5*MAXSEG + JUMEQ1 +1)
    type(ShadowArray) :: saDSDUD

    ! SEGMENT ATMOSPHERIC DENSITY
    real, pointer :: rDENF(:)   ! DTISYW(6*MAXSEG + JUMEQ1 +1)
    type(ShadowArray) :: saDENF

    ! SEGMENT LENGTH AND LENGTH RATE
    real, pointer :: rELBSG(:)  ! DTISYW(7*MAXSEG + JUMEQ1 +1)
    type(ShadowArray) :: saELBSG
    real, pointer :: rELBSGD(:) ! DTISYW(8*MAXSEG + JUMEQ1 +1)
    type(ShadowArray) :: saELBSGD

    ! TETHER THERMAL CALC ARRAYS
    real, pointer :: rSTEMPK(:)  ! DTISYW(9*MAXSEG + JUMEQ1 +1)
    type(ShadowArray) :: saSTEMPK
    real, pointer :: rQDTSW(:)   ! DTISYW(10*MAXSEG + JUMEQ1 +1)
    type(ShadowArray) :: saQDTSW
    real, pointer :: rTNEXTK(:)  ! DTISYW(11*MAXSEG + JUMEQ1 +1)
    type(ShadowArray) :: saTNEXTK
    real, pointer :: rQDSARO(:)  ! DTISYW(12*MAXSEG + JUMEQ1 +1)
    type(ShadowArray) :: saQDSARO

    ! ACTUAL SEGMENT DEPLOYED-UNDEFORMED LENGTH (REFLECTS THERMAL)
    real, pointer :: rSEGLA(:)   ! DTISYW(13*MAXSEG + JUMEQ1 +1)
    type(ShadowArray) :: saSEGLA

    ! INSTANTANEOUS SEGMENT-SPECIFIC ELECTRIC CURRENT IN EACH SEGMENT
    real, pointer :: rCURRTS(:)  ! DTISYW(14*MAXSEG + JUMEQ1 +1)
    type(ShadowArray) :: saCURRTS

    ! SEGMENT-SPECIFIC TEMPERATURE-COMPENSATED RESISTANCE/LENGTH
    real, pointer :: rRHOELT(:)  ! DTISYW(15*MAXSEG + JUMEQ1 +1)
    type(ShadowArray) :: saRHOELT

    ! SEGMENT-SPECIFIC TEMPERATURE-COMPENSATED PLASMA CIRCUMFERENCE
    real, pointer :: rEDYNCT(:)  ! DTISYW(16*MAXSEG + JUMEQ1 +1)
    type(ShadowArray) :: saEDYNCT

    ! CURRENT EFFECTIVE UNDEFORMED SEGMENT ELASTIC AREA
    real, pointer :: rBEADELA(:)  ! DTISYW(17*MAXSEG + JUMEQ1 +1)
    type(ShadowArray) :: saBEADELA

    ! ELECTRON DENSITY AT A FINITE TETHER SEGEMNT
    real, pointer :: rEDENSBB(:)  ! DTISYW(18*MAXSEG + JUMEQ1 +1)
    type(ShadowArray) :: saEDENSBB
    
    ! =====
    ! Second section of Segment information
#ifdef _nSegs3to3nSegs
    ! allocated to 3,(NBEAD+1)
#else
    ! allocated to (NBEAD+1),3
#endif
    ! UNIT TANGENT VECTORS AND THEIR DERIVATIVES FOR EACH SEGMENT
    real, pointer :: rBBTUI(:,:)   ! DTISYW(JUMEQ3 +1)
    type(ShadowArray) :: saBBTUI
    real, pointer :: rBBTUDI(:,:)  ! DTISYW(3*MAXSEG + JUMEQ3 +1)
    type(ShadowArray) :: saBBTUDI
    ! TOTAL ATMOSPHERIC WINDS (FOR HOST COMMANDED WIND EVAL)
    real, pointer :: rWNDTOE(:,:)  ! DTISYW(6*MAXSEG + JUMEQ3 +1)
    type(ShadowArray) :: saWNDTOE

    ! MAGNETIC FIELD ATTRIBUTES (FOR HOST COMMANDED MAGNETIC ENVIRON EVAL)
    real, pointer :: rBFLSEG(:,:)  ! DTISYW(9*MAXSEG + JUMEQ3 +1)
    type(ShadowArray) :: saBFLSEG
    real, pointer :: rBVLSEG(:,:)  ! DTISYW(12*MAXSEG + JUMEQ3 +1)
    type(ShadowArray) :: saBVLSEG

#ifdef _BeadsIPIF
    ! UNIT TANGENT VECTORS AND THEIR DERIVATIVES FOR EACH SEGMENT
    ! computed from bead data
#else
    ! UNIT TANGENT VECTORS AND THEIR DERIVATIVES FOR EACH SEGMENT
    real, pointer :: rBBTUT (:,:)   ! DTISYW(15*MAXSEG + JUMEQ3 +1)
    type(ShadowArray) :: saBBTUT
#endif

    ! RELATIVE WIND FOR EACH SEGMENT
    real, pointer :: rVRELSGI(:,:)   ! DTISYW(18*MAXSEG + JUMEQ3 +1)
    type(ShadowArray) :: saVRELSGI

    ! AERO LOAD FOR EACH SEGMENT
    real, pointer :: rFAROSGI(:,:)   ! DTISYW(21*MAXSEG + JUMEQ3 +1)
    type(ShadowArray) :: saFAROSGI

    ! LOCAL WIND PERTURBATION FOR EACH SEGMENT
    real, pointer :: rVWFSGI(:,:)   ! DTISYW(24*MAXSEG + JUMEQ3 +1)
    type(ShadowArray) :: saVWFSGI

    ! LOCAL ATMOSPHERIC WIND PERTURB (FOR HOST COMMANDED WIND EVAL)
    real, pointer :: rWNDLPE(:,:)  ! DTISYW(27*MAXSEG + JUMEQ3 +1)
    type(ShadowArray) :: saWNDLPE
    integer :: LastPointer   ! must be last (may be unioned)
#ifdef _BeadsIPIF
#else
    integer :: padd
#endif
=========================================

Note, it may seem odd that I use a fpp include file, however, the same include file, with different #defines is used to produce different width vector solutions:

#ifdef _Use_AVX

! Note, "real" is not defined at this point
! i.e. "real" in the FPP #include file passes through as "real"
type TypeFiniteSolution
    SEQUENCE
#include "FiniteSolution.inc"
    ! No additional data in the original type
end type TypeFiniteSolution

! XMM, YMM and YMM02 variants replace "real" with
! "type(TypeXMM)", "type(TypeYMM)" and "type(TypeYMM02)"

#define real type(TypeXMM)
type TypeFiniteSolutionXMM
    SEQUENCE
#include "FiniteSolution.inc"
    ! additional members for TypeXMM
    integer :: TetherNumber0
    integer :: TetherNumber1
end type TypeFiniteSolutionXMM
#undef real

! XMM and YMM variants replace "pointer" with "target, allocatable"
! #define pointer allocatable
! YMM variant
#define real type(TypeYMM)

type TypeFiniteSolutionYMM
    SEQUENCE
#include "FiniteSolution.inc"
    ! additional members for TypeYMM
    integer :: TetherNumber0
    integer :: TetherNumber1
    integer :: TetherNumber2
    integer :: TetherNumber3
end type TypeFiniteSolutionYMM
#undef pointer
#undef real

! YMM02 variant
#define real type(TypeYMM02)

type TypeFiniteSolutionYMM02
SEQUENCE
#include "FiniteSolution.inc"
    ! additional members for TypeYMM02
    integer :: TetherNumber0
    integer :: TetherNumber1
    integer :: TetherNumber2
end type TypeFiniteSolutionYMM02
#undef pointer
#undef real

At least until templates are supported this method works.

Jim Dempsey

 

0 Kudos
jimdempseyatthecove
Honored Contributor III
1,125 Views

x64 build

Failure occurs in Debug build

/nologo /debug:full /Od /QxAVX /fpp /I"..\..\Programs\GlobalData\x64\Debug" /I"..\..\Source\Modules" /I"\Downloads\F90GL\f90gl-1.2.15-ifort\lib64" /I"C:\gtoss\Programs\GlobalData\x64\Debug" /D_AvFRT /D_MOD /arch:AVX /real_size:64 /module:"x64\Debug\\" /object:"x64\Debug\\" /Fd"x64\Debug\vc100.pdb" /traceback /check:all /libs:static /threads /dbglibs /libdir:noauto /c /keep

And a more optimal build:

/nologo /debug:full /O2 /QxAVX /fpp /I"..\..\Programs\GlobalData\x64\DebugOpenMPFast" /I"..\..\Source\Modules" /I"C:\Downloads\F90GL\f90gl-1.2.15-ifort\lib64" /I"C:\gtoss\Programs\GlobalData\x64\Debug" /D_AvFRT /D_MOD /arch:AVX /Qopenmp /real_size:64 /module:"x64\DebugOpenMPFast\\" /object:"x64\DebugOpenMPFast\\" /Fd"x64\DebugOpenMPFast\vc100.pdb" /traceback /check:none /libs:static /threads /dbglibs /libdir:noauto /c /keep /Qipo-

The "funny" vector types place different numbers of tethers into the adjacent lanes of the small vectors. This is more effective than taking each tether individually and processing it using vectors. IOW you can pack the vector width without reducing the trip count by 1/vector width.

I am waiting for Kathy to get me a license for V15 so I can try out the newest compiler. If this fails, then I can put together a subset of the solution that reproduces the error. It needs to build a few module files, then one of the files with the errors.

The error occurs in a static library, so it should be somewhat easy to throw out the non-essential subroutines, ...

Jim Dempsey

Jim Dempsey

0 Kudos
Martyn_C_Intel
Employee
1,125 Views

Jim,  Thanks for that extra detail.

There was one inconsistency: the only declaration of the TypeFiniteSolutionYMM component rBeadIPIF in your source is as a pointer to real, whereas in the code fragment you provided, it appears to be used as a pointer to typeYMM. Despite your prognostication, with that change and a little jiggery pokery, I was able to reproduce the internal compiler error that you reported.

The good news is, that although I also reproduced it with the latest 14.0 update, I did not see the error with the 15.0 compiler. I was able to build and execute a little test case successfully.

I hope you will be able to obtain a 15.0 compiler and confirm this. (There is now also a 15.0 compiler update, 15.0.1.148).  I don't propose to ask the developers to investigate further, unless there is a particular need, since this appears fixed in the current compiler. However, if you should see any problems with the new compiler, please let us know.

Thanks for the report and for the detail that allowed us to investigate.

 

0 Kudos
jimdempseyatthecove
Honored Contributor III
1,126 Views

Martin,

The "real" is used in an fpp include file where the macro

#define real type(TypeYMM)

or other #define's may TypeXMM, TypeYMM02, ... be in effect. (a little slight of hand to provide for a quazi-template)

In the non-vector form, #undef real reverts back to standard real.

I am glad to hear you were able to reproduce the error with 14.0, and not with 15.0.

Jim Dempsey

0 Kudos
Martyn_C_Intel
Employee
1,126 Views

Yes, I probably hadn't fully parsed your include files and command line.

Please let us know whether all your errors go away with 15.0, or if some remain.

0 Kudos
jimdempseyatthecove
Honored Contributor III
1,126 Views

After a bunch of hoop-jumping I finally got IVF 15.0 update1 installed.

The download page from my Parallel Studio XE Professional gave me some issues.

On Win7 IE 10.0, when logged in the Download Now button was a NOP (both with and without download manager).
On Win8.1 IE ??, when logged in the Download Now button was a NOP (both with and without download manager).
On Win7 Firefox,, when logged in the Download Now button was a NOP (both with and without download manager).

On Win7 Firefox,, when NOT logged in the Download Now button worked?!?.

After downloading, I found out that the download file was Parallel Studio XE Cluster and as such the license file would not work. So I am running on the trial license while I resolve the license file and download version issue.

First build attempt, after clean of solution

1>GlobalData.f90
2>Build started 12/6/2014 11:13:10 AM.
2>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\x64\Microsoft.Cpp.x64.Targets(514,5): error MSB8008: Specified platform toolset (Intel C++ Compiler XE 12.1) is not installed or invalid. Please make sure that a supported PlatformToolset value is selected.
2>
2>Build FAILED.

So apparently the integration did not fix the version of the C++ integration. It removed the PS V14 with C++ 12.1, but did not remove the links in the Tools Options.

How do I go about removing a tool from the Intel C++ toolset (I am guessing hand editing of the solution file).

The good news is the 1st problem file MOD_FOSScode.f90 now compiles without error - yea!

Files later on have errors

5>C:\gtoss\Source\A_TOSS\T_gen\TOSRR4ymm02.f90: catastrophic error: **Internal compiler error: internal abort** Please report this error along with the circumstances in which it occurred in a Software Problem Report.  Note: File and line given may not be explicit cause of this error.
5>compilation aborted for C:\gtoss\Source\A_TOSS\T_gen\TOSRR4ymm02.f90 (code 1)

The error can be corrected as follows:

#if 0
! { bug hunt
    do i=1,3
        VUBI_BEAD_0(i).v = pFiniteSolutionSIMD.rBeadDIPIF(i,1).v - rBeadDIPIF_X(i).v
        VUBI_BEAD_0(i).v = VUBI_BEAD_0(i).v + (TOSVX1(i).v * pFiniteSolutionSIMD.rELD.v)
        
        !-------------------------------------------------------------------
        ! ADD THIS BEADS CONTRIBUTION TO VELOCITY MASS MOMENT
        !----------------------------------------------------
        pFiniteSolutionSIMD.rBBCGID(i).v = VUBI_BEAD_0(i).v * pFiniteSolutionSIMD.rBMS(0).v
    end do
#else ! }{ bug hunt
    do i=1,3
        do j=0,2
            VUBI_BEAD_0(i).v(j) = pFiniteSolutionSIMD.rBeadDIPIF(i,1).v(j) - rBeadDIPIF_X(i).v(j)
            VUBI_BEAD_0(i).v(j) = VUBI_BEAD_0(i).v(j) + (TOSVX1(i).v(j) * pFiniteSolutionSIMD.rELD.v(j))
        
            !-------------------------------------------------------------------
            ! ADD THIS BEADS CONTRIBUTION TO VELOCITY MASS MOMENT
            !----------------------------------------------------
            pFiniteSolutionSIMD.rBBCGID(i).v(j) = VUBI_BEAD_0(i).v(j) * pFiniteSolutionSIMD.rBMS(0).v(j)
        end do
    end do
! } bug hunt
#endif

The v component is

    ! AVX three-up double vector
    type TypeYMM02
        SEQUENCE
        real(8) :: v(0:2)
    end type TypeYMM02

Due to your being able to reproduce the earlier problem you should be able to find this one as well.

I have a lot of edits to do to fix this but, but at least I know what I am looking for.

I will let you know if errors of a different type show up.

Jim Dempsey

0 Kudos
jimdempseyatthecove
Honored Contributor III
1,126 Views

Another bug, a little different

#if 0
! { bug
        pTether.pFiniteSolution.rPriorXrBeadIPIF = pTether.pFiniteSolution.rBeadIPIF(:,0)
        pTether.pFiniteSolution.rPriorXrBeadDIPIF = pTether.pFiniteSolution.rBeadDIPIF(:,0)
        pTether.pFiniteSolution.rPriorYrBeadIPIF = pTether.pFiniteSolution.rBeadIPIF(:,NBEAD+1)
        pTether.pFiniteSolution.rPriorYrBeadDIPIF = pTether.pFiniteSolution.rBeadDIPIF(:,NBEAD+1)
#else ! }{
        do i=1,3
            pTether.pFiniteSolution.rPriorXrBeadIPIF(i) = pTether.pFiniteSolution.rBeadIPIF(i,0)
            pTether.pFiniteSolution.rPriorXrBeadDIPIF(i) = pTether.pFiniteSolution.rBeadDIPIF(i,0)
            pTether.pFiniteSolution.rPriorYrBeadIPIF(i) = pTether.pFiniteSolution.rBeadIPIF(i,NBEAD+1)
            pTether.pFiniteSolution.rPriorYrBeadDIPIF(i) = pTether.pFiniteSolution.rBeadDIPIF(i,NBEAD+1)
        end do
#endif

Where

real :: rPriorXrBeadIPIF(3)

! allocate to (1:3,0:NBEAD+1)
! The 0't index holds a copy of the X-end object state
! The NBEAD+1't index holds a copy of the Y-end object state
! Position with respect to IP IF
real, pointer :: rBeadIPIF(:,:) ! DTISYW(1)

 

0 Kudos
Brandon_H_Intel
Employee
1,126 Views

Hi Jim,

I get that toolset error on occasion, and it is usually resolved by going to your Project Properties, looking under Configuration Properties->General for the "Platform Toolset" field and re-setting it to a valid value from the listbox. Ignore the selection in my screenshot below - it's just to show you where the field is. Just bring up the listbox and select anything that shows up in the box:

 

compiler-select.JPG

0 Kudos
Martyn_C_Intel
Employee
1,126 Views

Jim,

       I can also reproduce your second internal error using the 14.0 compiler. But it too goes away with 15.0; as you say, it looks very similar to the first error. Were you using 15.0 when you saw it, or were you still using 14.0?

        Is your third issue seen with 14.0 or with 15.0, and is it also an internal error?

0 Kudos
Martyn_C_Intel
Employee
1,126 Views

I saw the same behavior with the third example - internal error with 14.0, compiled fine with 15.0.

0 Kudos
jimdempseyatthecove
Honored Contributor III
1,126 Views

Martyn,

                do JBEAD = 0, NBEAD + 1
#if 1
! { bug hunt
                    pTether.pFiniteSolution.rBeadDIPIFP(:,JBEAD) = pTether.pFiniteSolution.rBeadDIPIF(:,JBEAD) ! Remember current (to be previous) velocity values
#else ! }{ bug hunt 
                    do j=1,3
                        pTether.pFiniteSolution.rBeadDIPIFP(j,JBEAD) = pTether.pFiniteSolution.rBeadDIPIF(j,JBEAD) ! Remember current (to be previous) velocity values
                    end do
! } bug hunt
#endif                    
                end do
=========================
1>Compiling with Intel(R) Visual Fortran Compiler XE 15.0.1.148 [Intel(R) 64]...
1>ChangeDamper.f90
1>C:\gtoss\Source\A_AVFRT\ChangeDamper.f90: catastrophic error: **Internal compiler error: internal abort** Please report this error along with the circumstances in which it occurred in a Software Problem Report.  Note: File and line given may not be explicit cause of this error.
1>compilation aborted for C:\gtoss\Source\A_AVFRT\ChangeDamper.f90 (code 1)

Most of the situations are where the 2D array is being processed in a loop. Even substituting explicit range exhibits the problem:

                    pTether.pFiniteSolution.rBeadDIPIFP(1:3,JBEAD) = pTether.pFiniteSolution.rBeadDIPIF(1:3,JBEAD)

Jim Dempsey

 

0 Kudos
Martyn_C_Intel
Employee
1,126 Views

Jim,

       Even for your new example, I am only able to reproduce an internal error with the 14.0 compiler. I believe the errors may be related to the use of the UNION and MAP language extensions in the type declarations.  (These extensions were probably inherited from the old CVF compiler). Is it possible that one or more of your type declarations are in a module that was compiled with 14.0, even when you recompile other code using 15.0?

As far as I know, UNION and MAP were intended primarily to reduce memory requirements by reusing pieces of memory, (feel free to correct me). Since memory is often less of a constraint for today's systems, your simplest workaround might be to avoid remapping memory using these old extensions.

If you are sure that you see an ICE when everything, including modules, is compiled with 15.0, then I'd need more detail to try to reproduce, especially the derived type definition corresponding to pTether. I was only able to reproduce your latest examples when I added a Union/Map construct into this type declaration.

Martyn

0 Kudos
jimdempseyatthecove
Honored Contributor III
1,126 Views

Martyn,

UNION and MAP

I somewhat require these as the pre-F90 code used COMMONs with translation matrixes declared interchangeably as X(3,3) and other places X(9). It would be a large headache to change this (not that it couldn't be done). The UNION is NOT required to save memory. The simulation portion of the program, in different source files, use the different layouts. Yea, it should get updated to use one layout. While I could use a function as an rvalue, Fortran does not (yet?) have lvalue functions (that resolve to a reference).

In addition to these, I have a rather complex set of unions used in simulation checkpointing and restore.

I performed a CLEAN - everything should be V 15.0 (other than external libraries). I even had to remove C++ helper function as I couldn't get it to link (too many cross-library "... already defined in..." and missing references).

I will see if I can make a simple reproducer (in the next few days).

Jim

0 Kudos
Martyn_C_Intel
Employee
1,125 Views

Jim,

       With regard to your download experiences:

There is now a unified (i.e., shared) download and installer for both Intel Parallel Studio XE 2015 Professional and Intel Parallel Studio XE  2015 Cluster Editions. Only the license differentiates the product installation. Your problem arose because you have an Intel Parallel Studio XE 2011 license; this is missing the Intel Advisor feature, since this was added to Parallel Studio more recently.

The recommended solution is to go the the Intel Registration Center at https://registrationcenter.intel.com and login; then click on the product name on your home page to get to the license subscription history page, where you should see an "Upgrade...>"  link. Clicking this should create a new 2015 serial number that will work with the new 2015 unified installer. Please let us know if this works for you. Apologies for the inconvenience here.

We have occasionally seen issues with the download button, but not in a reproducible way. These can normally be worked around by using a different browser - I have once or twice used Chrome after having a problem with IE. In my case, the original problem went away after some combination of deleting browsing history including cookies, restarting the browser, or rebooting.

Martyn

0 Kudos
Jim_Dempsey1
Beginner
1,126 Views

Thanks,

I got the license file for Windows, had to use Firefox. IE didn't work even after cleaning cookies. Can I simply copy it to:

C:\Program Files (x86)\Common Files\Intel\Licenses

Or do I have to uninstall and re-install?

With earlier versions I could just copy the file to the folder.

Running your Software manager, after the copy does not show the "studio 2015" listed, components yes. Is this related to the unified installer not affixing the license?

Attempting to do this procedure to get the license file for the Linux version did not work. Any hints?

Jim

 

0 Kudos
Martyn_C_Intel
Employee
1,125 Views

Yes, you should be able to just copy the new license file to the license folder. Since you installed successfully using an evaluation license, that should be sufficient. You could test that it works by temporarily moving the evaluation license or renaming the .lic extension.

I don't know if not seeing the studio entry in ISM could be related to installing using the eval license. However, there have been one or two other reports of updates not immediately showing in ISM. Please try the following:

1. Close ISM and double check that the corresponding process is finished

2. Delete 'C:\Users\<user account>\AppData\Local\Intel Corporation\Intel® Software Manager\DataBase\IRC\cache.xml' file.

3. Run ISM.

Even if that doesn't help, if everything else seems to be working normally, I would leave it be. It doesn't seem to me to be worth a reinstallation.

 

I can't see any difference between your IRC entry for Linux and your IRC entry for Windows, apart from the update to 2015. So I don't see why the same procedure shouldn't work for Linux. What error are you seeing?

0 Kudos
Jim_Dempsey1
Beginner
1,125 Views

Martyn,

in C:\Users\Jim\AppData\Local I have two Intel folders:

Intel Corporation
Intel_Corporation

The one with the space has

C:\Users\Jim\AppData\Local\Intel Corporation\Intel® Software Manager
C:\Users\Jim\AppData\Local\Intel Corporation\Remote Monitoring

neither of which have sub-folders nor XML file

The underbar folder has

C:\Users\Jim\AppData\Local\Intel_Corporation\ism2.exe_Url_142siwwhcb44bya24wvq3hvjdofsl211\1.0.46.24840

with user.xml

I did not delete that file as it was not named cache.xml

Task Manager showed no Application, Process nor Service with any name starting with I* with Intel... ISM... or other similar names.

License manager still fails to see the full ... Studio XE 2015 ISM.png

 

0 Kudos
Jim_Dempsey1
Beginner
957 Views

RE: Linux

I do not see an error message. And I do not see an Upgrade as I did with the Windows version

Jim

Linux.png

 

0 Kudos
Reply