For Programmers: Free Programming Magazines  


Home > Archive > Fortran > April 2007 > XLF and NAMELIST









You are viewing an archived Text-only version of the thread. To view this thread in it's original format and/or if you want to reply to this thread please [click here]

 

Author XLF and NAMELIST
duncanchristie@gmail.com

2007-04-06, 7:07 pm

Hi,

I have a question concerning NAMELISTs and fortran. Here is the
problem I have:

I am attempting to read in configuration information into a large
program (ZEUS-MP v2). It has been compiled and tested on a different
machine (using the intel compiler); however, it refuses to read the
namelist properly. For example,

use config

namelist /geomconf/ lgeom,ldimen

read(1,goeomconf)

with namelist file

&geomconf
lgeom = 2,
ldimen = 3/

would set lgeom=3 and leave ldimen unchanged (or undefined if it
hasn't be set previously). lgeom and ldimen are definied in a
separate file which defines all of the modules.

Since ZEUS-MP is large, I took the two files involved and turned them
into a program. Qualitatively, everything is the same, except that
the configure subroutine has been turned into a program.... and it now
reads everything properly.

I don't know what the problem is! Can somebody give me an idea what
could be wrong?

I can post some code if people like. I avoided doing it here because
it would take up a lot of space.

dpb

2007-04-06, 10:06 pm

On Apr 6, 3:58 pm, duncanchris...@gmail.com wrote:
....
> I am attempting to read in configuration information into a large
> program (ZEUS-MP v2). It has been compiled and tested on a different
> machine (using the intel compiler); however, it refuses to read the
> namelist properly. ...


....snip code segment showing a perfectly normal looking NAMELIST
example...

> Since ZEUS-MP is large, I took the two files involved and turned them
> into a program. Qualitatively, everything is the same, except that
> the configure subroutine has been turned into a program.... and it now
> reads everything properly.
>
> ... Can somebody give me an idea what could be wrong?

....

It appears you've demonstrated that the problem isn't actually
NAMELIST but something in the rest of the code that has been pared.
My guess would be the READ actually did set the values of the
variables in the input namelist but there's an error in the definition
or scoping of the variables between the subroutine in which they are
being read and where you're trying to examine the values.

To confirm this hypothesis, can you display the affected variables
correctly directly after the execution of the NAMELIST input? I'm
thinking you will be able to and it's only when leaving that
subroutine the problem is apparent.

duncanchristie@gmail.com

2007-04-18, 7:05 pm

On Apr 6, 7:09 pm, "dpb" <dpboza...@swko.net> wrote:
> On Apr 6, 3:58 pm, duncanchris...@gmail.com wrote:
> ...
>
>
> ...snip code segment showing a perfectly normal looking NAMELIST
> example...
>
>
>
> ...
>
> It appears you've demonstrated that the problem isn't actually
> NAMELIST but something in the rest of the code that has been pared.
> My guess would be the READ actually did set the values of the
> variables in the input namelist but there's an error in the definition
> or scoping of the variables between the subroutine in which they are
> being read and where you're trying to examine the values.
>
> To confirm this hypothesis, can you display the affected variables
> correctly directly after the execution of the NAMELIST input? I'm
> thinking you will be able to and it's only when leaving that
> subroutine the problem is apparent.



I tried printing out the contents of the variables immediately after
the namelist is read.
The values aren't correct.

Here is a snipit of the actual code:

-------------------------------------------------------------------------------------------------------------------------------
c
subroutine configure
c
use real_prec
use param
use config
c
#ifdef MPI_USED
use mpiyes
#else
use mpino
#endif
use mpipar
c
implicit NONE
c
integer :: confi_buf(10)
logical :: confl_buf(20)
real(rl):: confr_buf(2)
integer :: x,dimen
c
namelist /geomconf/ lgeom, ldimen
namelist /physconf/ lrad , xhydro , xgrav, xmhd , xgrvfft,
& xptmass, xtotnrg, xiso , xvgrid , xsubav,
& xforce , xsphgrv, xodad, leos , nspec,
& lopac
namelist /ioconf/ xascii , xhdf, xrestart, xtsl
namelist /preconf/ small_no, large_no
namelist /arrayconf/ izones, jzones, kzones, maxijk

namelist /duncan/ x,dimen

open(unit=2,file='duncan',status='old')
read(2,duncan)
print *, x,dimen
close(2)


c
c----------------------------------------------------------------------
c If parallel execution, start up MPI
c----------------------------------------------------------------------
c
#ifdef MPI_USED
call MPI_INIT( ierr )
call MPI_COMM_RANK( MPI_COMM_WORLD, myid_w , ierr )
call MPI_COMM_SIZE( MPI_COMM_WORLD, nprocs_w, ierr )
#else
myid_w = 0
myid = 0
#endif /* MPI_USED */
c
c----------------------------------------------------------------------
c Open zmp_conf run configuration file
c----------------------------------------------------------------------
c

if(myid_w .eq. 0) open(unit=1,file='zmp_inp',status='old')

c
c----------------------------------------------------------------------
c Initialize all parameters to default values before continuing
c with configuration READ
c----------------------------------------------------------------------
c
lgeom = 1
ldimen = 3
lrad = 0
leos = 1
lopac = 0
nspec = 1
izones = 32
jzones = 32
kzones = 32
maxijk = 32
xvgrid = .false.
xhydro = .false.
xforce = .false.
xgrav = .true.
xgrvfft = .false.
xsphgrv = .false.
xptmass = .false.
xmhd = .true.
xodad = .false.
xtotnrg = .false.
xiso = .false.
xascii = .false.
xhdf = .true.
xrestart = .false.
xtsl = .false.
large_no = 1.0D99
small_no = 1.0D-99

c
c----------------------------------------------------------------------
c Read remaining namelists
c----------------------------------------------------------------------
c
if(myid_w .eq. 0) then

read(1,geomconf)

confi_buf(1) = lgeom
confi_buf(2) = ldimen
c
c----------------------------------------------------------------------
c Print offending variables... hmmmm... why aren't they being
read?
c----------------------------------------------------------------------
c
print *,"LGEOM=",lgeom
print *,"LDIMEN=",ldimen
c Doesn't print the correct variables.

--------------------------------------------------------------------------------------------------------

Duncan

dpb

2007-04-19, 7:05 pm

On Apr 18, 2:02 pm, duncanchris...@gmail.com wrote:
> On Apr 6, 7:09 pm, "dpb" <dpboza...@swko.net> wrote:
>
>
>
>
>
>
>
>
>
>
>
> I tried printing out the contents of the variables immediately after
> the namelist is read.
> The values aren't correct.


.... snip code for brevity ...

> c
> c----------------------------------------------------------------------
> c Read remaining namelists
> c----------------------------------------------------------------------
> c
> if(myid_w .eq. 0) then
>
> read(1,geomconf)
>

....

myid_w <> 0 would do it for one.

Another thing I noted is the test print is after an assignment, not
_immediately_ after the read so remains possibility of some memory or
definition/type issue I think.

W/O a compilable test case can't more than hypothesize but that the
NAMELIST was shown to actually work in your previous test case still
makes me almost convinced it isn't NAMELIST itself but something else,
either in the code or the data.

Do you have all possible diagnostic checking options on?

It seems peculiar variables named x and dimen would be integers, is
that correct? Is it possible there's a mismatch between namelist and
data?

dpb

2007-04-19, 7:05 pm

On Apr 19, 8:59 am, dpb <bozart...@gmail.com> wrote:
> On Apr 18, 2:02 pm, duncanchris...@gmail.com wrote:
>
>
>
>
>
>
>
>
>
>
>
>
>
> ... snip code for brevity ...
>
>
>
> ...
>
> myid_w <> 0 would do it for one.
>
> Another thing I noted is the test print is after an assignment, not
> _immediately_ after the read so remains possibility of some memory or
> definition/type issue I think.
>
> W/O a compilable test case can't more than hypothesize but that the
> NAMELIST was shown to actually work in your previous test case still
> makes me almost convinced it isn't NAMELIST itself but something else,
> either in the code or the data.
>
> Do you have all possible diagnostic checking options on?
>
> It seems peculiar variables named x and dimen would be integers, is
> that correct? Is it possible there's a mismatch between namelist and
> data?



Also recommend looking at the other thread on NAMELIST -- there the
problem Brendan reported was associated w/ the order of the
declarations of variables and NAMELIST (and apparently and unobserved
or compiler option that defeated an error/warning).

dpturner@lbl.gov

2007-04-19, 7:05 pm

On Apr 6, 1:58 pm, duncanchris...@gmail.com wrote:
> Hi,
>
> I have a question concerning NAMELISTs and fortran. Here is the
> problem I have:
>
> I am attempting to read in configuration information into a large
> program (ZEUS-MP v2). It has been compiled and tested on a different
> machine (using the intel compiler); however, it refuses to read the
> namelist properly. For example,

<snip>

I realize this is a couple ws old, but just in case...

You don't specify the platform, but the subject line mentions xlf.
Try some variation
of this:

setenv XLFRTEOPTS ${XLFRTEOPTS}:"namelist=old"

Just an idea...dt

Gordon Sande

2007-04-19, 7:05 pm

On 2007-04-19 12:59:28 -0300, dpturner@lbl.gov said:

> On Apr 6, 1:58 pm, duncanchris...@gmail.com wrote:
> <snip>
>
> I realize this is a couple ws old, but just in case...
>
> You don't specify the platform, but the subject line mentions xlf.
> Try some variation
> of this:
>
> setenv XLFRTEOPTS ${XLFRTEOPTS}:"namelist=old"
>
> Just an idea...dt


This discussion has been about READing using NAMELIST. About if and
what was read or not read.

A very easy way to check on what was read is to use the NAMELIST to
WRITE out what was just read. It will also tell you about all the
other variables that were not read by the NAMELIST.

The output is rather stylized but it is definitive about what the
NAMELIST processor thinks is going on. It is easy to forget that
NAMELIST works in both directions. Out is not the popular direction.



Sponsored Links







Also available: Server administration forum archive | Web Design forum archive | Software forum archive | Hardware reviews archive

Copyright 2008 codecomments.com