1
<?xml version="1.0" encoding="ISO-8859-1"?>
2
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
6
<meta http-equiv="Content-Style-Type" content="text/css" />
7
<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1" />
8
<link rel="stylesheet" href="../robodoc.css" type="text/css" />
9
<title>./src/tutorials/read_write_sub_access.f90</title>
10
<!-- Source: ./src/tutorials/read_write_sub_access.f90 -->
11
<!-- Generated with ROBODoc Version 4.99.30 (Jun 25 2008) -->
15
<a name="robo_top_of_doc">ETSF_IO library - documentation pages</a>
18
</div> <!-- navigation -->
20
<h3>TABLE OF CONTENTS</h3>
22
<li><a href="#robo132">read_write_sub_access</a></li>
25
<a name="etsf5fio5ftutorials2fread5fwrite5fsub5faccess">
26
</a><a name="robo132"></a><h2>read_write_sub_access</h2>
28
<p>[ <a href="#robo_top_of_doc">Top</a> ] [ <a href="./README_f90.html#robo119">etsf_io_tutorials</a> ] [ <a href="../robo_tuto_cat.html#robo_top_of_doc">Tutorials</a> ]</p>
29
<p class="item_name">NAME</p>
30
<p> <strong>read_write_sub_access</strong>
32
<p class="item_name">FUNCTION</p>
33
<p> In this example, we will describe how to read or write sub part of arrays.
34
For example, to write the wavefunction each k point per k point, we need to
35
use the wfs_pw__kpoint_access. This tutorial will show how to use all this
36
kind of <varname>__something_access attributes existing in the different
37
groups (see <a href="../group_level/etsf_io_f90.html#robo123">etsf_main</a> for instance).
40
<p> To compile this exemple, use (assuming default installation paths):
42
<pre> ${F90} -I/opt/include/${F90} -o <strong>read_write_sub_access</strong> <a href="#robo_top_of_doc">read_write_sub_access.f90</a>
43
-L/opt/lib -letsf_io -letsf_io_utils -L/usr/lib -lnetcdf
46
<p class="item_name">SOURCE</p>
47
<pre class="source"><span class="keyword">program</span> <strong>read_write_sub_access</strong>
49
<span class="keyword">use</span> <a href="../group_level/etsf_io_f90.html#robo0">etsf_io</a>
50
<span class="keyword">use</span> <a href="../utils/etsf_io_tools_f90.html#robo3">etsf_io_tools</a>
52
<span class="keyword">integer</span> <span class="sign">:</span><span class="sign">:</span> i<span class="sign">,</span> i_kpt<span class="sign">,</span> ncid
54
<p class="item_name">NOTES</p>
55
<p> All groups than contain arrays that can have a sub access (on spin or on k points)
56
have attributes built on the following scheme:
58
<pre> <short_variable_name>__[spin|kpoint]_access
60
<p> When all spin or k points values must be read or write at once, one can let
61
the default value (etsf_no_sub_access) ; but if one want to read or write only
62
one spin or one k point, one should put the desired value in this attribute.
65
<p> All this tutorial is oriented for writing, but it can be adapted easily
69
<p> In the beginning of this tutorial, we define an ETSF file with 2 kpoints. This
70
file will contain the kpoints group (<a href="../group_level/etsf_io_f90.html#robo122">etsf_kpoints</a>), the group of wave data
71
(<a href="../group_level/etsf_io_f90.html#robo8">etsf_basisdata</a>) and the main group (<a href="../group_level/etsf_io_f90.html#robo123">etsf_main</a>) with only
72
the coefficient_of_wavefunctions array.
75
<p> As shown in the first tutorial (<a href="./create_a_crystal_den_file_f90.html#robo5">create_a_crystal_den_file</a>), the classical
76
status variable lstat and error_data are created.
78
<p class="item_name">SOURCE</p>
79
<pre class="source"> <span class="keyword">logical</span> <span class="sign">:</span><span class="sign">:</span> lstat
80
<span class="keyword">type</span><span class="sign">(</span><a href="../low_level/public_variables_f90.html#robo68">etsf_io_low_error</a><span class="sign">)</span> <span class="sign">:</span><span class="sign">:</span> error_data
82
<span class="comment">! Specific variables required by the library</span>
83
<span class="keyword">type</span><span class="sign">(</span><a href="../group_level/etsf_io_f90.html#robo14">etsf_groups_flags</a><span class="sign">)</span> <span class="sign">:</span><span class="sign">:</span> flags
84
<span class="keyword">type</span><span class="sign">(</span><a href="../group_level/etsf_io_f90.html#robo10">etsf_dims</a><span class="sign">)</span> <span class="sign">:</span><span class="sign">:</span> dims
85
<span class="keyword">type</span><span class="sign">(</span><a href="../group_level/etsf_io_f90.html#robo122">etsf_kpoints</a><span class="sign">)</span> <span class="sign">:</span><span class="sign">:</span> kpoints
86
<span class="keyword">type</span><span class="sign">(</span><a href="../group_level/etsf_io_f90.html#robo8">etsf_basisdata</a><span class="sign">)</span> <span class="sign">:</span><span class="sign">:</span> basisdata
87
<span class="keyword">type</span><span class="sign">(</span><a href="../group_level/etsf_io_f90.html#robo123">etsf_main</a><span class="sign">)</span> <span class="sign">:</span><span class="sign">:</span> main
89
<p class="item_name">NOTES</p>
90
<p> The following variables are used in the main program to store the informations.
91
The pointers in the library will be used to point on them. Only some parts of
92
each group will be used.
94
<pre> * coef_pw: is a two dimensional array that store all the coefficients of
95
plane waves, but only for one k point.
96
* red_coord_pw_k: is a two dimensional array that stores the coordinates of plane
97
waves for each band, but restricted on one k point.
100
<p class="item_name">SOURCE</p>
101
<pre class="source"> <span class="comment">! Variables that are declared in the main program in a real case</span>
102
<span class="keyword">double</span> <span class="keyword">precision</span><span class="sign">,</span> <span class="keyword">allocatable</span><span class="sign">,</span> target <span class="sign">:</span><span class="sign">:</span> coef_pw_k<span class="sign">(</span><span class="sign">:</span><span class="sign">,</span> <span class="sign">:</span><span class="sign">)</span>
103
<span class="comment">! Variables that will be used in the basisdata group.</span>
104
<span class="keyword">integer</span><span class="sign">,</span> <span class="keyword">allocatable</span><span class="sign">,</span> target <span class="sign">:</span><span class="sign">:</span> number_of_coefficients<span class="sign">(</span><span class="sign">:</span><span class="sign">)</span>
105
<span class="keyword">integer</span><span class="sign">,</span> <span class="keyword">allocatable</span><span class="sign">,</span> target <span class="sign">:</span><span class="sign">:</span> red_coord_pw_k<span class="sign">(</span><span class="sign">:</span><span class="sign">,</span> <span class="sign">:</span><span class="sign">)</span>
106
<span class="comment">! Variables that will be used in the kpoints group.</span>
107
<span class="keyword">double</span> <span class="keyword">precision</span><span class="sign">,</span> <span class="keyword">allocatable</span><span class="sign">,</span> target <span class="sign">:</span><span class="sign">:</span> red_coord_kpt<span class="sign">(</span><span class="sign">:</span><span class="sign">,</span> <span class="sign">:</span><span class="sign">)</span>
108
<span class="keyword">double</span> <span class="keyword">precision</span><span class="sign">,</span> <span class="keyword">allocatable</span><span class="sign">,</span> target <span class="sign">:</span><span class="sign">:</span> kpoint_weights<span class="sign">(</span><span class="sign">:</span><span class="sign">)</span>
109
<span class="comment">! Variable to store the definition of the basis set</span>
110
<span class="keyword">character</span><span class="sign">(</span><span class="keyword">len</span> <span class="sign">=</span> etsf_charlen<span class="sign">)</span><span class="sign">,</span> target <span class="sign">:</span><span class="sign">:</span> basis
112
<p class="item_name">NOTES</p>
113
<p> We set the dimension (2 k points, no spin, 5 bands and 100 planewave
116
<p class="item_name">SOURCE</p>
117
<pre class="source"> dims<span class="sign">%</span>max_number_of_coefficients <span class="sign">=</span> 100
118
dims<span class="sign">%</span>max_number_of_states <span class="sign">=</span> 5
119
dims<span class="sign">%</span>number_of_kpoints <span class="sign">=</span> 2
120
dims<span class="sign">%</span>number_of_spinor_components <span class="sign">=</span> 1
121
dims<span class="sign">%</span>number_of_spins <span class="sign">=</span> 1
122
dims<span class="sign">%</span>real_or_complex_coefficients <span class="sign">=</span> 2
124
<p class="item_name">NOTES</p>
125
<p> As in the first tutorial (<a href="./create_a_crystal_den_file_f90.html#robo5">create_a_crystal_den_file</a>), we use the high level
126
routine <a href="../group_level/etsf_io_data_init_f90.html#robo26">etsf_io_data_init</a> to define all dimensions and variables for the file
130
<p> In that case, we will use a precise definition of variables, not creating all
131
variables of each included groups. For instance, the basis set will be limited
132
to the required variables for a plane wave description.
134
<p class="item_name">SOURCE</p>
135
<pre class="source"> flags<span class="sign">%</span>basisdata <span class="sign">=</span> etsf_basisdata_basis_set <span class="sign">+</span> <span class="sign">&</span>
136
<span class="sign">&</span> etsf_basisdata_red_coord_pw <span class="sign">+</span> <span class="sign">&</span>
137
<span class="sign">&</span> etsf_basisdata_n_coeff
138
flags<span class="sign">%</span>kpoints <span class="sign">=</span> etsf_kpoints_red_coord_kpt <span class="sign">+</span> etsf_kpoints_kpoint_weights
139
flags<span class="sign">%</span>main <span class="sign">=</span> etsf_main_wfs_coeff
140
<span class="keyword">call</span> <a href="../group_level/etsf_io_data_init_f90.html#robo26">etsf_io_data_init</a><span class="sign">(</span><span class="quote">"<strong>read_write_sub_access</strong>.nc"</span><span class="sign">,</span> flags<span class="sign">,</span> dims<span class="sign">,</span> <span class="sign">&</span>
141
<span class="sign">&</span> <span class="quote">"Tutorial ETSF_IO, use sub access to read or write"</span><span class="sign">,</span> <span class="sign">&</span>
142
<span class="sign">&</span> <span class="quote">"Created by the tutorial example of the library"</span><span class="sign">,</span> <span class="sign">&</span>
143
<span class="sign">&</span> lstat<span class="sign">,</span> error_data<span class="sign">)</span>
144
<span class="keyword">if</span> <span class="sign">(</span><span class="sign">.</span><span class="keyword">not</span><span class="sign">.</span> lstat<span class="sign">)</span> <span class="keyword">then</span>
145
<span class="keyword">call</span> <a href="../low_level/etsf_io_low_level_f90.html#robo70">etsf_io_low_error_handle</a><span class="sign">(</span>error_data<span class="sign">)</span>
147
<span class="keyword">end</span> <span class="keyword">if</span>
149
<p class="item_name">NOTES</p>
150
<p> At this time of the example, the disk space to store the wave-function
151
informations has been reserved. In a real case, we let the main program computing
152
the plane waves and the arrays that describe them.
154
<p class="item_name">SOURCE</p>
155
<pre class="source"> <span class="keyword">write</span><span class="sign">(</span>basis<span class="sign">,</span> <span class="quote">"(A)"</span><span class="sign">)</span> <span class="quote">"plane_waves"</span>
157
<span class="comment">! The main program allocate memory for its computation.</span>
158
<span class="keyword">allocate</span><span class="sign">(</span>coef_pw_k<span class="sign">(</span>2<span class="sign">,</span> dims<span class="sign">%</span>max_number_of_coefficients <span class="sign">*</span> dims<span class="sign">%</span>max_number_of_states<span class="sign">)</span><span class="sign">)</span>
159
<span class="keyword">allocate</span><span class="sign">(</span>number_of_coefficients<span class="sign">(</span>dims<span class="sign">%</span>number_of_kpoints<span class="sign">)</span><span class="sign">)</span>
160
<span class="keyword">allocate</span><span class="sign">(</span>red_coord_pw_k<span class="sign">(</span>3<span class="sign">,</span> dims<span class="sign">%</span>max_number_of_coefficients<span class="sign">)</span><span class="sign">)</span>
161
<span class="keyword">allocate</span><span class="sign">(</span>red_coord_kpt<span class="sign">(</span>3<span class="sign">,</span> dims<span class="sign">%</span>number_of_kpoints<span class="sign">)</span><span class="sign">)</span>
162
<span class="keyword">allocate</span><span class="sign">(</span>kpoint_weights<span class="sign">(</span>dims<span class="sign">%</span>number_of_kpoints<span class="sign">)</span><span class="sign">)</span>
164
<span class="comment">! The main program compute all coordinates for k points and plane waves...</span>
165
red_coord_kpt <span class="sign">=</span> reshape<span class="sign">(</span> <span class="sign">(</span><span class="sign">/</span> 0<span class="sign">.</span>0d0<span class="sign">,</span> 0<span class="sign">.</span>0d0<span class="sign">,</span> 0<span class="sign">.</span>0d0<span class="sign">,</span> <span class="sign">&</span>
166
<span class="sign">&</span> 0<span class="sign">.</span>5d0<span class="sign">,</span> 0<span class="sign">.</span>5d0<span class="sign">,</span> 0<span class="sign">.</span>5d0 <span class="sign">/</span><span class="sign">)</span><span class="sign">,</span> <span class="sign">(</span><span class="sign">/</span> 3<span class="sign">,</span> 2 <span class="sign">/</span><span class="sign">)</span><span class="sign">)</span>
167
kpoint_weights <span class="sign">=</span> <span class="sign">(</span><span class="sign">/</span> 0<span class="sign">.</span>5d0<span class="sign">,</span> 0<span class="sign">.</span>5d0 <span class="sign">/</span><span class="sign">)</span>
168
number_of_coefficients <span class="sign">=</span> <span class="sign">(</span><span class="sign">/</span> dims<span class="sign">%</span>max_number_of_coefficients<span class="sign">,</span> <span class="sign">&</span>
169
<span class="sign">&</span> dims<span class="sign">%</span>max_number_of_coefficients <span class="sign">/</span><span class="sign">)</span>
171
<p class="item_name">NOTES</p>
172
<p> To read or write with sub access, there is no high level routine such as
173
<a href="../group_level/etsf_io_data_write_f90.html#robo28">etsf_io_data_write</a>(). Then, we need to open the file and set it a write state.
174
The way to open a file for writing is to use the routine <a href="../low_level/write_routines_f90.html#robo79">etsf_io_low_open_modify</a>()
175
and then to call <a href="../low_level/etsf_io_low_level_f90.html#robo89">etsf_io_low_set_write_mode</a>(). The first call will check that the
179
<p> When the file is not needed anymore, the ncid id must be released and the file
180
closed, using <a href="../low_level/etsf_io_low_level_f90.html#robo64">etsf_io_low_close</a>(). This is mandatory because without this call
181
the write action may be not done.
183
<p class="item_name">SOURCE</p>
184
<pre class="source"> <span class="comment">! Open file for writing</span>
185
<span class="keyword">call</span> <a href="../low_level/write_routines_f90.html#robo79">etsf_io_low_open_modify</a><span class="sign">(</span>ncid<span class="sign">,</span> <span class="quote">"<strong>read_write_sub_access</strong>.nc"</span><span class="sign">,</span> <span class="sign">&</span>
186
<span class="sign">&</span> lstat<span class="sign">,</span> error_data <span class="sign">=</span> error_data<span class="sign">)</span>
187
<span class="keyword">if</span> <span class="sign">(</span><span class="sign">.</span><span class="keyword">not</span><span class="sign">.</span> lstat<span class="sign">)</span> <span class="keyword">then</span>
188
<span class="keyword">call</span> <a href="../low_level/etsf_io_low_level_f90.html#robo70">etsf_io_low_error_handle</a><span class="sign">(</span>error_data<span class="sign">)</span>
190
<span class="keyword">end</span> <span class="keyword">if</span>
192
<span class="comment">! We switch to write mode.</span>
193
<span class="keyword">call</span> <a href="../low_level/etsf_io_low_level_f90.html#robo89">etsf_io_low_set_write_mode</a><span class="sign">(</span>ncid<span class="sign">,</span> lstat<span class="sign">,</span> error_data <span class="sign">=</span> error_data<span class="sign">)</span>
194
<span class="keyword">if</span> <span class="sign">(</span><span class="sign">.</span><span class="keyword">not</span><span class="sign">.</span> lstat<span class="sign">)</span> <span class="keyword">then</span>
195
<span class="keyword">call</span> <a href="../low_level/etsf_io_low_level_f90.html#robo70">etsf_io_low_error_handle</a><span class="sign">(</span>error_data<span class="sign">)</span>
197
<span class="keyword">end</span> <span class="keyword">if</span>
199
<p class="item_name">NOTES</p>
200
<p> We begin the big loop on k points. In this loop, the main program will compute
201
the plane waves and the coordinates of the coefficients. Then, it will use the
202
library to write the values for the current k point.
204
<p class="item_name">SOURCE</p>
205
<pre class="source"> <span class="keyword">do</span> i_kpt <span class="sign">=</span> 1<span class="sign">,</span> dims<span class="sign">%</span>number_of_kpoints<span class="sign">,</span> 1
206
<span class="comment">! We compute the plane wave coefficient with the famous</span>
207
<span class="comment">! algorithm that works well.</span>
208
<span class="keyword">do</span> i <span class="sign">=</span> 1<span class="sign">,</span> dims<span class="sign">%</span>max_number_of_coefficients<span class="sign">,</span> 1
209
red_coord_pw_k<span class="sign">(</span><span class="sign">:</span><span class="sign">,</span> i<span class="sign">)</span> <span class="sign">=</span> <span class="sign">(</span><span class="sign">/</span> <span class="sign">-</span>i<span class="sign">,</span> 0<span class="sign">,</span> i <span class="sign">/</span><span class="sign">)</span>
210
<span class="keyword">end</span> <span class="keyword">do</span>
211
coef_pw_k<span class="sign">(</span>1<span class="sign">,</span> <span class="sign">:</span><span class="sign">)</span> <span class="sign">=</span> <span class="sign">(</span><span class="sign">/</span> <span class="sign">(</span>i<span class="sign">,</span> i <span class="sign">=</span> 1<span class="sign">,</span> <span class="sign">&</span>
212
<span class="sign">&</span> dims<span class="sign">%</span>max_number_of_coefficients <span class="sign">*</span> dims<span class="sign">%</span>max_number_of_states<span class="sign">)</span> <span class="sign">/</span><span class="sign">)</span>
213
coef_pw_k<span class="sign">(</span>2<span class="sign">,</span> <span class="sign">:</span><span class="sign">)</span> <span class="sign">=</span> <span class="sign">(</span><span class="sign">/</span> <span class="sign">(</span><span class="sign">-</span>i<span class="sign">,</span> i <span class="sign">=</span> 1<span class="sign">,</span> <span class="sign">&</span>
214
<span class="sign">&</span> dims<span class="sign">%</span>max_number_of_coefficients <span class="sign">*</span> dims<span class="sign">%</span>max_number_of_states<span class="sign">)</span> <span class="sign">/</span><span class="sign">)</span>
216
<p class="item_name">NOTES</p>
217
<p> We associate the pointers of groups we want to write with the data in memory.
219
<p class="item_name">SOURCE</p>
220
<pre class="source"> <span class="comment">! We associate the data</span>
221
main<span class="sign">%</span>coefficients_of_wavefunctions<span class="sign">%</span>data2D <span class="sign">=</span><span class="sign">></span> coef_pw_k
222
<span class="comment">! We set the sub access.</span>
223
main<span class="sign">%</span>wfs_coeff__kpoint_access <span class="sign">=</span> i_kpt
224
<span class="comment">! Idem for the reduced coordinates of coefficients.</span>
225
basisdata<span class="sign">%</span>reduced_coordinates_of_plane_waves<span class="sign">%</span>data2D <span class="sign">=</span><span class="sign">></span> red_coord_pw_k
226
basisdata<span class="sign">%</span>red_coord_pw__kpoint_access <span class="sign">=</span> i_kpt
228
<p class="item_name">NOTES</p>
229
<p> Now that all the arrays we want to write are associated, we can call the write
230
routine. This routine will read automatically the <var>__kpoint_access attribute
231
and will check the dimensions of the associated arrays.
233
<p class="item_name">SOURCE</p>
234
<pre class="source"> <span class="comment">! We use the group level write routine.</span>
235
<span class="keyword">call</span> <a href="../group_level/etsf_io_main_put_f90.html#robo103">etsf_io_main_put</a><span class="sign">(</span>ncid<span class="sign">,</span> main<span class="sign">,</span> lstat<span class="sign">,</span> error_data<span class="sign">)</span>
236
<span class="keyword">if</span> <span class="sign">(</span><span class="sign">.</span><span class="keyword">not</span><span class="sign">.</span> lstat<span class="sign">)</span> <span class="keyword">then</span>
237
<span class="keyword">call</span> <a href="../low_level/etsf_io_low_level_f90.html#robo70">etsf_io_low_error_handle</a><span class="sign">(</span>error_data<span class="sign">)</span>
239
<span class="keyword">end</span> <span class="keyword">if</span>
240
<span class="keyword">call</span> <a href="../group_level/etsf_io_basisdata_put_f90.html#robo20">etsf_io_basisdata_put</a><span class="sign">(</span>ncid<span class="sign">,</span> basisdata<span class="sign">,</span> lstat<span class="sign">,</span> error_data<span class="sign">)</span>
241
<span class="keyword">if</span> <span class="sign">(</span><span class="sign">.</span><span class="keyword">not</span><span class="sign">.</span> lstat<span class="sign">)</span> <span class="keyword">then</span>
242
<span class="keyword">call</span> <a href="../low_level/etsf_io_low_level_f90.html#robo70">etsf_io_low_error_handle</a><span class="sign">(</span>error_data<span class="sign">)</span>
244
<span class="keyword">end</span> <span class="keyword">if</span>
246
<span class="comment">! End of the kpoint big loop.</span>
247
<span class="keyword">end</span> <span class="keyword">do</span>
249
<p class="item_name">NOTES</p>
250
<p> We write the other data that are independent of the kpoint loop.
252
<p class="item_name">WARNINGS</p>
253
<p> It is important to associate to nullify the already used pointers
254
to avoid to write them again.
256
<p class="item_name">SOURCE</p>
257
<pre class="source"> <span class="comment">! We set the associations.</span>
258
kpoints<span class="sign">%</span>reduced_coordinates_of_kpoints <span class="sign">=</span><span class="sign">></span> red_coord_kpt
259
kpoints<span class="sign">%</span>kpoint_weights <span class="sign">=</span><span class="sign">></span> kpoint_weights
260
basisdata<span class="sign">%</span>basis_set <span class="sign">=</span><span class="sign">></span> basis
261
basisdata<span class="sign">%</span>reduced_coordinates_of_plane_waves<span class="sign">%</span>data2D <span class="sign">=</span><span class="sign">></span> <span class="keyword">null</span><span class="sign">(</span><span class="sign">)</span>
262
basisdata<span class="sign">%</span>number_of_coefficients <span class="sign">=</span><span class="sign">></span> number_of_coefficients
263
<span class="comment">! We call the group level write routines.</span>
264
<span class="keyword">call</span> <a href="../group_level/etsf_io_kpoints_put_f90.html#robo59">etsf_io_kpoints_put</a><span class="sign">(</span>ncid<span class="sign">,</span> kpoints<span class="sign">,</span> lstat<span class="sign">,</span> error_data<span class="sign">)</span>
265
<span class="keyword">if</span> <span class="sign">(</span><span class="sign">.</span><span class="keyword">not</span><span class="sign">.</span> lstat<span class="sign">)</span> <span class="keyword">then</span>
266
<span class="keyword">call</span> <a href="../low_level/etsf_io_low_level_f90.html#robo70">etsf_io_low_error_handle</a><span class="sign">(</span>error_data<span class="sign">)</span>
268
<span class="keyword">end</span> <span class="keyword">if</span>
269
<span class="keyword">call</span> <a href="../group_level/etsf_io_basisdata_put_f90.html#robo20">etsf_io_basisdata_put</a><span class="sign">(</span>ncid<span class="sign">,</span> basisdata<span class="sign">,</span> lstat<span class="sign">,</span> error_data<span class="sign">)</span>
270
<span class="keyword">if</span> <span class="sign">(</span><span class="sign">.</span><span class="keyword">not</span><span class="sign">.</span> lstat<span class="sign">)</span> <span class="keyword">then</span>
271
<span class="keyword">call</span> <a href="../low_level/etsf_io_low_level_f90.html#robo70">etsf_io_low_error_handle</a><span class="sign">(</span>error_data<span class="sign">)</span>
273
<span class="keyword">end</span> <span class="keyword">if</span>
275
<p class="item_name">NOTES</p>
276
<p> We then set the use_time_reversal_at_gamma attribute for this file using
277
the <a href="../utils/etsf_io_tools_f90.html#robo3">etsf_io_tools</a> module. We write it after the other data since the routine
278
will check that the basis set is indeed a plane wave one and the two variables
279
impacted by this attributes must already exist.
281
<p class="item_name">SOURCE</p>
282
<pre class="source"> <span class="keyword">call</span> <a href="../utils/etsf_io_tools_f90.html#robo118">etsf_io_tools_set_time_reversal_symmetry</a><span class="sign">(</span>ncid<span class="sign">,</span> <span class="sign">.</span><span class="keyword">false</span><span class="sign">.</span><span class="sign">,</span> lstat<span class="sign">,</span> error_data<span class="sign">)</span>
283
<span class="comment">! We handle the error</span>
284
<span class="keyword">if</span> <span class="sign">(</span><span class="sign">.</span><span class="keyword">not</span><span class="sign">.</span> lstat<span class="sign">)</span> <span class="keyword">then</span>
285
<span class="keyword">call</span> <a href="../low_level/etsf_io_low_level_f90.html#robo70">etsf_io_low_error_handle</a><span class="sign">(</span>error_data<span class="sign">)</span>
287
<span class="keyword">end</span> <span class="keyword">if</span>
289
<p class="item_name">NOTES</p>
290
<p> As said before, we need to close the file.
292
<p class="item_name">SOURCE</p>
293
<pre class="source"> <span class="comment">! We close the file.</span>
294
<span class="keyword">call</span> <a href="../low_level/etsf_io_low_level_f90.html#robo64">etsf_io_low_close</a><span class="sign">(</span>ncid<span class="sign">,</span> lstat<span class="sign">,</span> error_data<span class="sign">)</span>
295
<span class="comment">! We handle the error</span>
296
<span class="keyword">if</span> <span class="sign">(</span><span class="sign">.</span><span class="keyword">not</span><span class="sign">.</span> lstat<span class="sign">)</span> <span class="keyword">then</span>
297
<span class="keyword">call</span> <a href="../low_level/etsf_io_low_level_f90.html#robo70">etsf_io_low_error_handle</a><span class="sign">(</span>error_data<span class="sign">)</span>
299
<span class="keyword">end</span> <span class="keyword">if</span>
301
<span class="comment">! The main program will deallocate its own memory.</span>
302
<span class="keyword">deallocate</span><span class="sign">(</span>coef_pw_k<span class="sign">)</span>
303
<span class="keyword">deallocate</span><span class="sign">(</span>number_of_coefficients<span class="sign">)</span>
304
<span class="keyword">deallocate</span><span class="sign">(</span>red_coord_pw_k<span class="sign">)</span>
305
<span class="keyword">deallocate</span><span class="sign">(</span>red_coord_kpt<span class="sign">)</span>
306
<span class="keyword">deallocate</span><span class="sign">(</span>kpoint_weights<span class="sign">)</span>
307
<span class="keyword">end</span> <span class="keyword">program</span> <strong>read_write_sub_access</strong>
310
</div> <!-- content -->
312
<p>Generated from ./src/tutorials/read_write_sub_access.f90 with <a href="http://www.xs4all.nl/~rfsber/Robo/robodoc.html">ROBODoc</a> V4.99.30 on Mon Mar 29 2010 11:04:45
314
</div> <!-- footer -->