- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Any suggestions for cleaning this up, please? I know you can usually do so put inserting dummy variables in the correct location, but with something this large it is hard to guess where.
instdata.f90: warning #6379: The structure contains one or more misaligned fields. [SHAREDDATACHUNK]
TYPE SharedDataChunk
-------^
MODULE SharedData
INTEGER INEGASX
PARAMETER (INEGASX = -5)
integer, parameter :: MAXASSX = 200
INTEGER MMIDEXX, MSIDEXX,LYMSTKX
PARAMETER (MMIDEXX=85000, MSIDEXX=15000,LYMSTKX=250)
INTEGER MGSSIZX
PARAMETER (MGSSIZX=100)
INTEGER iMaxSuppressX
PARAMETER (iMaxSuppressX=100)
INTEGER LDBPX,LPX
PARAMETER ( LDBPX = 44 + 83 , LPX = 94 )
INTEGER NPCOMPX
PARAMETER ( NPCOMPX = 83 )
TYPE SharedDataChunk
! This will end up having a ton of data.
INTEGER ID
INTEGER ASWRKF,ASWFLN,NXTASW
INTEGER CPWRKF,CPWFLN,NXTCPW
DOUBLE PRECISION PREDS(INEGASX:MAXASSX,7),TREDS(INEGASX:MAXASSX,7)
DOUBLE PRECISION ETVAS(INEGASX:MAXASSX,7),ECORRS(INEGASX:MAXASSX,7)
DOUBLE PRECISION PRESSS(INEGASX:MAXASSX,22),TEMPS(INEGASX:MAXASSX,22)
DOUBLE PRECISION ADMWTS(INEGASX:MAXASSX,22),ECORR2(INEGASX:MAXASSX,22)
DOUBLE PRECISION VALUE
INTEGER ITYPE,NINSTR,NLINES,LEVEL,ICOL1,ICOL2,ICREAD,LTOKEN
INTEGER IVAL,LLINE,FTYPE,NREC,RECL,IECHO,ECHMOD,KTTY,KPRNT,TAGSPC
INTEGER L2BEGN
LOGICAL NEWINS,CONTFG,EOF,ENAKEY,ENASWT,ENAILA,ENASCI,ENAEQN
LOGICAL ENAECH,ENAPMT,ENACON,ENACMA,ENATK8,KTTYFG,EOL,ENAMKW
LOGICAL ENALOW,ENATAG,ENASDI,ENAMCA,ENAVFY,ENAKNF
INTEGER MINDEX(MMIDEXX),SINDEX(MSIDEXX),PMODEL,PSCLST,MOFFST
INTEGER YMSTCK(3,LYMSTKX),TOPYMS
INTEGER ZZINDC(0:15,10),ZZIPTR(10),ZZLWID(10),ZZLINP(10)
INTEGER ZZLINC(10),ZZIPT1(10),ZZIPT2(10),ZZNCOL(10),ZZPAGE(10)
INTEGER ZZDSTK(10),ZZTOP,ZZCUR,ZZINDX(10)
CHARACTER ZZWLIN(10)*133,ZZHDLN(10)*132,ZZSVLN(10)*133
CHARACTER ZZCOLC(0:15,10)*1
LOGICAL ZZSQFG(10),ZZGPAG(10),ZZUHD(10)
integer doneMGINIT
INTEGER iNumSuppress, iaSuppressClass(iMaxSuppressX)
INTEGER iaSuppressMess(iMaxSuppressX)
CHARACTER*1600 MGTEXT(MGSSIZX)
CHARACTER*1600 MGTEXTNARGS(MGSSIZX)
INTEGER MGCLAS(MGSSIZX),MGNUM(MGSSIZX),MGSEV(MGSSIZX),NMESS,MGADD
INTEGER MGWARN,MGFLAG
DOUBLE PRECISION REF_T, REF_P, H2O_DENS,NMOLVOL
INTEGER PRNMAD(100,100),PRMTAD(100,100)
INTEGER PMSRCE(LDBPX),PMASSA(LDBPX),PMSRCP(LPX+14),PMPROP(LPX+4)
INTEGER PMKVAL,PMGRES,PMCLCT,PMSYNO,PMSYNS,PMSYNN,IPTUIF
INTEGER PMVFUG,PMLFUG,PMLACT,PMWATK,PMCRIT,PMSULS,PMVISS
INTEGER PMOLES,PMSYNT,PMTHER,PMVIT,PMCACN,PMPPS,PMPPE,PMCDRY
INTEGER PMCPNA
INTEGER CLOU14,PPCFLG,GLOADD
DOUBLE PRECISION PMSMER(NPCOMPX,2),CPMT14(25)
DOUBLE PRECISION GCRACF,CLOUR1,CLOUR2,CLX(5),CLY(5)
DOUBLE PRECISION INDEXA,INDEXB,INDEXC
CHARACTER*20 PMASSY,PMMNEM
LOGICAL METH14,CNGASS
integer SSTACK(103),TOPSTR,ISTTOT,SSTKSZ
INTEGER NXTWFR,NSTRMS,NUTYPE,NEXTAS,NSTYPE,NSOLER,NSOLWR
INTEGER SVSMSX,bypassRangeErrors
LOGICAL OVRIDE
CHARACTER OVTEXT*128,COMMND*32,CFSYMB*128
INTEGER DTABLE(20),GETDRV,PUTDRV,EMODTG,VERMOD,PMTABN,PMTABD
INTEGER PMTABC,EDEVTG,PMSALT,PMCOMF,PMHDRF,PMASIZ,PMCMKR,PMCSNO
INTEGER DFCOMF,DFASIZ,DFCSNO,DFSALT,DFHDRF,PMWRTF,DFWRTF
INTEGER DCHAR(10,20),TGLTOP,TGLMAX
CHARACTER DRVCSP(20)*20,DFCMKR*20
CHARACTER TAGLST(5000)*20,TAGVLS(5000)*80
DOUBLE PRECISION UPARAM(30),FLOTOT
INTEGER MSDEV,MSRLEN,MSBTOP,MSBSIZ,MSBMAX,MSLTB(100),MSDTB(200)
INTEGER MSSTAT(200),MSTTY,MSPRNT
INTEGER MSSREC,MSSUMF,MSSUMR,MSSMAX,MSSCMX,MSSPF(100),MXSPPL
INTEGER MSINDX(30000),MSBIDX(60)
CHARACTER MSNAME*128,MSSUMN*128,MSKEYS(50)*4
LOGICAL MSOPEN,MSBAD,MSTTYF,MSUSUM,MSSDTB(50),MSRDKY
DOUBLE PRECISION PLPBLV(2),ABPEND(5),XAMPRP,NIMSUM,VISCT(2)
INTEGER PLMACR,PLCRUD,PLINFO,PLHIST,PLBLEN,PLECON,PLSUMY,PLMSGS
INTEGER PLUTYS,PLINVT,PLUNTS,PLSTMS,PLCSEQ,PMXXXX,PLPBLN,NABPR
INTEGER PMBEXL,NMBEXL,PLWTCH,WATCHP(5),NPPLIM
LOGICAL PLSTLV,PLMDLV,PLCRLV,PLUTLV,PLNABP,WATCHF,PONAW,TBPWRQ
DOUBLE PRECISION TOL,EMAX,DAMPF
INTEGER IC,ITN,ITNMAX,NESTLV,METHOD,LOOPXX(50),CURTXX,SUBUNT
LOGICAL CONV,INLOOP,DIAGPS,INFEAS,INFSXX(25),SVUMOD
CHARACTER*6 YCINST(36),YNMODL(150),YSMODL(300),YRNSTK(100)
CHARACTER*6 ZCINST(22)
END TYPE
END MODULE
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
In a command line (makefile) build, you would use /align:rec8byte (or on Linux/Mac, -align rec8byte). -Zp8 (not -zp8) will also work, but it isn't the recommended form.
In the source, you can bracket your type declaration with:
!DIR$ OPTIONS /ALIGN=RECORDS=ALL
...
!DIR$ END OPTIONS
This is a holdover from VAX (DEC) FORTRAN. See OPTIONS Directive (intel.com)
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
The type declaration starts with seven integers, an odd number, which will cause the first double precision component to be misaligned. If you can tolerate it, rearrange the components such that the double precision variables are declared before the integer components, and so on.
You can ask the compiler to generate a cross-reference listing, and you can examine that listing for misaligned components.
The message is only a warning; unless the language rules prohibit it, the compiler may do padding to overcome misalignment.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Thank you, but that is not the only cause of misalignment. How do you tell the compiler to generate a cross listing? I googled it but no luck.
Is there is an option to tell the compiler "If things are misaligned, add dummy argument or spacing all you want".
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
The listing file includes the cross reference. You can use /list or turn on Source Listing from the Fortran > Output Files property page.
The option you want is Data > Structure Member Alignment > 8 Bytes.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Thank you Lionel, you are a star. So in a makefile you would use: -zp8 ?. Also, it is possible to do it per file inside a file use !DEC$ ?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
In a command line (makefile) build, you would use /align:rec8byte (or on Linux/Mac, -align rec8byte). -Zp8 (not -zp8) will also work, but it isn't the recommended form.
In the source, you can bracket your type declaration with:
!DIR$ OPTIONS /ALIGN=RECORDS=ALL
...
!DIR$ END OPTIONS
This is a holdover from VAX (DEC) FORTRAN. See OPTIONS Directive (intel.com)
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Thank you Lionel, this seems to work:
!DEC$ OPTIONS /ALIGN=(RECORDS=NATURAL)
TYPE ....
END TYPE
!DEC$ END OPTIONS

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page