[Wien] cannot touch '/optics.symmat': Read-only file system

Oleg Rubel rubelo at mcmaster.ca
Thu Nov 14 04:01:03 CET 2019


Dear Wien2k community,

I run into a problem when performing optics calculations in parallel 
mode (not MPI), hybrid with SOC. It is run for Si, but it is just a step 
stone to heavier materials where SOC really matters.

Optics is executed as

> [rubel at gra690 optics]$ x optic -so  -hf -p
> running OPTIC in parallel mode
> [1] 4932
>  OPTIC END
> [1]  + Done                          ( cd $PWD; $t $exe ${def}_${loop}.def; rm -f .lock_$lockfile[$p] ) >> .timeop_$loop
> [1] 4937
> ...
>    Summary of opticpara:
>    localhost     user=0  wallclock=203580
> scratch=/
> touch: cannot touch '/optics.symmat': Read-only file system
> touch: cannot touch '/optics.mommat2': Read-only file system
> touch: cannot touch '/optics.mat_diag': Read-only file system
> touch: cannot touch '/optics.mme': Read-only file system
> /optics.symmat: Read-only file system.
> /optics.symma1: Read-only file system.
> /optics.symma2: Read-only file system.
> /optics.mat_diag: Read-only file system.
> /optics.mme: Read-only file system.
> rm: cannot remove '/optics.symmat_1': No such file or directory
> rm: cannot remove '/optics.mat_diag_1': No such file or directory
> rm: cannot remove '/optics.mme_1': No such file or directory
> ...

The output shows that optics actually ends OK, but the script gets stuck 
with results files pointing to the root directory "/" for some reason. 
Of course, I have no permission to write there. The same problem was 
reported earlier on the mailing list
https://www.mail-archive.com/wien@zeus.theochem.tuwien.ac.at/msg17103.html

The problem is the value of "scratch" variable. I edited the file

> [rubel at gra690 optics]$ vim $WIENROOT/opticcpara

to display the variable. As you can see in the output above, the value 
is "scratch=/" in spite of the fact that

> [rubel at gra690 optics]$ echo $SCRATCH
> ./

The workaround is to make changes in the file $WIENROOT/opticcpara

> if ( $?SCRATCH ) then
>   set scratch=`echo $SCRATCH  | sed -e 's/\/$//'`/ # we are afraid
>                                 # different settings in different
>                                 # computing centers
>                                 #use global variable for scratch if set
>   echo "scratch=$scratch" # OLEG
>   set scratch=$SCRATCH # OLEG
> endif

I am not sure what does the whole command with "sed ..." suppose to do? 
Why do we need to change $SCRATCH value? I tried in different shells

> [rubel at gra-login1 optics]$ scratch=`echo $SCRATCH  | sed -e 's/\/$//'`/
> [rubel at gra-login1 optics]$ echo $scratch
> ./
> [rubel at gra-login1 optics]$ /bin/csh
> [rubel at gra-login1 optics]$ set scratch=`echo $SCRATCH  | sed -e 's/\/$//'`/
> [rubel at gra-login1 optics]$ echo $scratch
> ./
> [rubel at gra-login1 optics]$ echo $shell
> /bin/tcsh

I could not reproduce "/" in the command line, but in the script the 
value is different for some reason.

Any thoughts are welcome :)

Thank you in advance
Oleg

-- 
Oleg Rubel (PhD, PEng)
Department of Materials Science and Engineering
McMaster University
JHE 359, 1280 Main Street West, Hamilton, Ontario L8S 4L8, Canada
Email: rubelo at mcmaster.ca
Tel: +1-905-525-9140, ext. 24094
Web: http://olegrubel.mcmaster.ca


More information about the Wien mailing list