I can reproduce this.

Apparently, some "clever informatics-guy" has changed the default behaviour, namely that

write(*,...    prints to stdout

while

write(6,... prints to the connected file, and ONLY if it has not been connected explicitly via an OPEN statement, it would print to stdout.

Now, in gfortran one has changed that to "*" = "6"  (why this limitation ??)

We have been using this different behaviour of unit=* or 5 and 6 (for read and write) in several places, when we want to alert a user of a certain fact (like "inversion is (not) present).

I'll change in SRC_symmetry all "write(6," to "write(66,", which should fix this problem (and also modify x_lapw for the corresponding def file).

There might be similar problems in other parts. Let me know if you find one.

Regards

On 10/30/2017 06:13 PM, Pavel Ondračka wrote:
Dear Wien2k mailing list,

this is probably gfortran (I have version 7.2.1) specific. Recently I
saw some problems with dstart crashing in init_lapw for structures
without inversion, when trying to open the complex input files
(case.in1c and case.in2c), which are not present.

In init_lapw the in1c and in2c files are prepared if this test
succeeds:
set b = `grep INVERSION $file.outputs`
if ( $#b == 7 ) then

The problem is that on ifort system the case.outputs contains the line:
PGBSYM: SPACE GROUP DOES NOT CONTAIN INVERSION
and with gfortran there is one extra line:
SPACE GROUP DOES NOT CONTAIN INVERSION
which is printed to stdout with ifort....

Greeping for the error message in SRC_symmetry finds this two
consequent lines:
SRC_symmetry/pgbsym.f:      WRITE(6,*) 'PGBSYM: SPACE GROUP DOES NOT
CONTAIN INVERSION'
SRC_symmetry/pgbsym.f:      WRITE(*,*) 'SPACE GROUP DOES NOT CONTAIN
INVERSION'

looking at the def file:
6, 'testcase.outputs','unknown','formatted',0
17,'testcase.in2_sy', 'unknown','formatted',0
20,'testcase.struct', 'old',    'formatted',0
21,'testcase.struct_st', 'unknown',    'formatted',0
the unit 6 (usually stdout although IIRC not mandated by the standard)
is attached to testcase.outputs

The question is what is the standard way to do in this case, the
gfortran still treats the asterisk as unit 6 (and hence the WRITE(*,*)
stuff end in the testcase.outputs file), while the ifort still sends
the WRITE(*,*) stuff to stdout.

This manifests later in dstart, x script actually checks for the
inversion by different method and crashes when it tries to open the
in*c files. When looking at the x script, there are also other
instances of redefining the unit 6, so this might be problematic in
more places...

Is this an undefined behavior or a bug in gfortran? Is there maybe some
gfortran switch to force the ifort behavior?

Best regards
Pavel
_______________________________________________
Wien mailing list
Wien@zeus.theochem.tuwien.ac.at
http://zeus.theochem.tuwien.ac.at/mailman/listinfo/wien
SEARCH the MAILING-LIST at:  
http://www.mail-archive.com/wien@zeus.theochem.tuwien.ac.at/index.html


--

                                      P.Blaha
--------------------------------------------------------------------------
Peter BLAHA, Inst.f. Materials Chemistry, TU Vienna, A-1060 Vienna
Phone: +43-1-58801-165300             FAX: +43-1-58801-165982
Email: bl...@theochem.tuwien.ac.at    WIEN2k: http://www.wien2k.at
WWW:   http://www.imc.tuwien.ac.at/TC_Blaha
--------------------------------------------------------------------------
_______________________________________________
Wien mailing list
Wien@zeus.theochem.tuwien.ac.at
http://zeus.theochem.tuwien.ac.at/mailman/listinfo/wien
SEARCH the MAILING-LIST at:  
http://www.mail-archive.com/wien@zeus.theochem.tuwien.ac.at/index.html

Reply via email to