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

Oleg Rubel rubelo at mcmaster.ca
Thu Nov 14 21:31:44 CET 2019


Dear Gavin and Peter:

thank you very much for the suggestion and patched file. I tested optics 
with the new opticpara_lapw script, and it works :)

Best regards
Oleg

On 2019-11-14 10:11, Peter Blaha wrote:
> There is a little incompatibility (bug) in opticpara_lapw when using 
> -hf  (hybrid calculations).
> 
> Because of the nature of the hf-module, we have to set the scratch 
> variable to blank in any def file which has the    -hf switch.
> 
> This is done in x_lapw :
> 
> ....
> if ($hf == hf) then
>    set scratch=
>    set scratchstring=
>    setenv SCRATCH $scratch
> endif
> ....
> 
> and means that any calculation with -hf  should NOT use scratch for 
> case.vectorhf_XX, but also case.symmat_XX, .....
> 
> opticpara_lapw has 2 "logial" problems:
> 
> ...
> 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
> endif
> ...
> 
> should be done only if SCRATCH is not empty (but since x_lapw has set it 
> empty, also in opticpara it is empty).
> The solution is the same what is already in x_lapw, change the if 
> statement:
> 
> if ( $?SCRATCH && $SCRATCH != '') then
> 
> ------------
> second problem:
> opticpara calls opticcopy_lapw, but also this should NOT be done when 
> -hf was specified (the symmat files are already local and not on a 
> remote node in $SCRATCH).
> 
> I attach a patched   opticpara_lapw script.
> 
> Regards
> Peter Blaha
> 
> On 11/14/19 4:01 AM, Oleg Rubel wrote:
>> 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
>>
> 
> 
> _______________________________________________
> Wien mailing list
> Wien at 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
> 


More information about the Wien mailing list