~etsf-io-developers/etsf-io/1.0

« back to all changes in this revision

Viewing changes to doc/www/tutorials/read_write_sub_access_f90.html

  • Committer: Damien Caliste
  • Date: 2010-03-29 09:16:49 UTC
  • Revision ID: damien.caliste@cea.fr-20100329091649-263qk2adyod2gqr2
Add the missing tutorial files.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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">
 
5
<head>
 
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) -->
 
12
</head>
 
13
<body>
 
14
<div id="logo">
 
15
<a name="robo_top_of_doc">ETSF_IO library - documentation pages</a>
 
16
</div> <!-- logo -->
 
17
<div id="navigation">
 
18
</div> <!-- navigation -->
 
19
<div id="content">
 
20
<h3>TABLE OF CONTENTS</h3>
 
21
<ul>
 
22
<li><a href="#robo132">read_write_sub_access</a></li>
 
23
</ul>
 
24
<hr />
 
25
<a name="etsf5fio5ftutorials2fread5fwrite5fsub5faccess">
 
26
</a><a name="robo132"></a><h2>read_write_sub_access</h2>
 
27
 
 
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>
 
31
</p>
 
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 &lt;varname&gt;__something_access attributes existing in the different
 
37
  groups (see <a href="../group_level/etsf_io_f90.html#robo123">etsf_main</a> for instance).
 
38
</p>
 
39
 
 
40
<p>  To compile this exemple, use (assuming default installation paths):
 
41
</p>
 
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
 
44
</pre>
 
45
<p></p>
 
46
<p class="item_name">SOURCE</p>
 
47
<pre class="source"><span class="keyword">program</span> <strong>read_write_sub_access</strong>
 
48
 
 
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>
 
51
 
 
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
 
53
</pre>
 
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:
 
57
</p>
 
58
<pre>   &lt;short_variable_name&gt;__[spin|kpoint]_access
 
59
</pre>
 
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.
 
63
</p>
 
64
 
 
65
<p>  All this tutorial is oriented for writing, but it can be adapted easily
 
66
  for reading.
 
67
</p>
 
68
 
 
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.
 
73
</p>
 
74
 
 
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.
 
77
</p>
 
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
 
81
 
 
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
 
88
</pre>
 
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.
 
93
</p>
 
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.
 
98
</pre>
 
99
<p></p>
 
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
 
111
</pre>
 
112
<p class="item_name">NOTES</p>
 
113
<p>  We set the dimension (2 k points, no spin, 5 bands and 100 planewave
 
114
  coefficients).
 
115
</p>
 
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
 
123
</pre>
 
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
 
127
  we want to create.
 
128
</p>
 
129
 
 
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.
 
133
</p>
 
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">&amp;</span>
 
136
       <span class="sign">&amp;</span> etsf_basisdata_red_coord_pw <span class="sign">+</span> <span class="sign">&amp;</span>
 
137
       <span class="sign">&amp;</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">&amp;</span>
 
141
                       <span class="sign">&amp;</span> <span class="quote">"Tutorial ETSF_IO, use sub access to read or write"</span><span class="sign">,</span> <span class="sign">&amp;</span>
 
142
                       <span class="sign">&amp;</span> <span class="quote">"Created by the tutorial example of the library"</span><span class="sign">,</span> <span class="sign">&amp;</span>
 
143
                       <span class="sign">&amp;</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>
 
146
    stop
 
147
  <span class="keyword">end</span> <span class="keyword">if</span>
 
148
</pre>
 
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.
 
153
</p>
 
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>
 
156
 
 
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>
 
163
  
 
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">&amp;</span>
 
166
                            <span class="sign">&amp;</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">&amp;</span>
 
169
       <span class="sign">&amp;</span> dims<span class="sign">%</span>max_number_of_coefficients <span class="sign">/</span><span class="sign">)</span>
 
170
</pre>
 
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
 
176
  header is correct.
 
177
</p>
 
178
 
 
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.
 
182
</p>
 
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">&amp;</span>
 
186
       <span class="sign">&amp;</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>
 
189
    stop
 
190
  <span class="keyword">end</span> <span class="keyword">if</span>
 
191
  
 
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>
 
196
    stop
 
197
  <span class="keyword">end</span> <span class="keyword">if</span>
 
198
</pre>
 
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.
 
203
</p>
 
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">&amp;</span>
 
212
          <span class="sign">&amp;</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">&amp;</span>
 
214
          <span class="sign">&amp;</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>
 
215
</pre>
 
216
<p class="item_name">NOTES</p>
 
217
<p>  We associate the pointers of groups we want to write with the data in memory.
 
218
</p>
 
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">&gt;</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">&gt;</span> red_coord_pw_k
 
226
     basisdata<span class="sign">%</span>red_coord_pw__kpoint_access <span class="sign">=</span> i_kpt
 
227
</pre>
 
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 &lt;var&gt;__kpoint_access attribute
 
231
  and will check the dimensions of the associated arrays.
 
232
</p>
 
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>
 
238
        stop
 
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>
 
243
        stop
 
244
     <span class="keyword">end</span> <span class="keyword">if</span>
 
245
 
 
246
     <span class="comment">! End of the kpoint big loop.</span>
 
247
  <span class="keyword">end</span> <span class="keyword">do</span>
 
248
</pre>
 
249
<p class="item_name">NOTES</p>
 
250
<p>  We write the other data that are independent of the kpoint loop.
 
251
</p>
 
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.
 
255
</p>
 
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">&gt;</span> red_coord_kpt
 
259
  kpoints<span class="sign">%</span>kpoint_weights <span class="sign">=</span><span class="sign">&gt;</span> kpoint_weights
 
260
  basisdata<span class="sign">%</span>basis_set <span class="sign">=</span><span class="sign">&gt;</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">&gt;</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">&gt;</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>
 
267
     stop
 
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>
 
272
     stop
 
273
  <span class="keyword">end</span> <span class="keyword">if</span>
 
274
</pre>
 
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.
 
280
</p>
 
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>
 
286
    stop
 
287
  <span class="keyword">end</span> <span class="keyword">if</span>
 
288
</pre>
 
289
<p class="item_name">NOTES</p>
 
290
<p>  As said before, we need to close the file.
 
291
</p>
 
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>
 
298
    stop
 
299
  <span class="keyword">end</span> <span class="keyword">if</span>
 
300
  
 
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>
 
308
</pre>
 
309
 
 
310
</div> <!-- content -->
 
311
<div id="footer">
 
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
 
313
</p>
 
314
</div> <!-- footer -->
 
315
</body>
 
316
</html>