Corregido un error en la lectura de los array.
[ptslat.git] / ncpack_str.f90
blob2fc27fd86fa63f600bddd84786cd7d0b8bd82f25
1 MODULE NCPACK_STR
2 Use typeSizes
3 Use NETCDF
4 Use Dot_Geometry, ONLY : Rqd_Base,Rqd_Top,Hqd,ISHAPE
5 Use Input_Data
6 Use Auxiliar_Procedures, ONLY : MTYPE, check
7 IMPLICIT NONE
9 INTEGER,PRIVATE :: ncFileID, HdVarID, RtVarID, RbVarID, NDots_XVarID, &
10 NDots_YVarID,NDots_ZVarID, A1VarID, A2VarID, A3VarID, &
11 DWL_VarID, Dim3ID
14 CONTAINS
16 SUBROUTINE NCPACK_CART(EXX,EYY,EZZ,EXY,EXZ,EYZ)
19 IMPLICIT NONE
21 REAL,DIMENSION(:,:,:) :: EXX,EYY,EZZ,EXY,EXZ,EYZ
23 ! netcdf related variables
24 integer :: DimXID, DimYID, DimZID,i, &
25 exxVarID, eyyVarID, ezzVarID, exyVarID, exzVarID, eyzVarID, &
26 ehidVarID,etilVarID,DimXVarID, DimYVarID, DimZVarID
28 ! Local variables
29 character (len = 60) :: fileName
31 !-----
32 ! Initialization
33 !-----
35 fileName = STR_Filename
38 ! --------------------
39 ! Code begins
40 ! --------------------
41 if(.not. byteSizesOK()) then
42 print *, "Compiler does not appear to support required kinds of variables."
43 stop
44 end if
46 ! Create the file
48 call open_over(fileName) !Check if a file with the same name exists
50 call check(nf90_create(path = trim(fileName), cmode = nf90_clobber, ncid = ncFileID))
52 CALL NCPACK_INPUT_STR( )
54 ! Define the dimensions
55 call check(nf90_def_dim(ncid = ncFileID, name = "dimx", len = XDim, dimid = DimXID))
56 call check(nf90_def_dim(ncid = ncFileID, name = "dimy", len = YDim, dimid = DimYID))
57 call check(nf90_def_dim(ncid = ncFileID, name = "dimz", len = ZDim, dimid = DimZID))
59 ! Create variables and attributes
61 ! Box sizes
64 call check(nf90_def_var(ncFileID, "dimx", nf90_float, dimids = DimXID, varID = DimXVarID) )
65 call check(nf90_put_att(ncFileID, DimXVarID, "long_name", "X dimension"))
66 call check(nf90_put_att(ncFileID, DimXVarID, "units", "Angstroms"))
68 call check(nf90_def_var(ncFileID, "dimy", nf90_float, dimids = DimYID, varID = DimYVarID) )
69 call check(nf90_put_att(ncFileID, DimYVarID, "long_name", "Y dimension"))
70 call check(nf90_put_att(ncFileID, DimYVarID, "units", "Angstroms"))
72 call check(nf90_def_var(ncFileID, "dimz", nf90_float, dimids = DimZID, varID = DimZVarID) )
73 call check(nf90_put_att(ncFileID, DimZVarID, "long_name", "Z dimension"))
74 call check(nf90_put_att(ncFileID, DimZVarID, "units", "Angstroms"))
77 ! strain grids
78 call check(nf90_def_var(ncid = ncFileID, name = "exx", xtype = nf90_float, &
79 dimids = (/ DimXID, DimYID, DimZID /), varID = exxVarID) )
80 call check(nf90_put_att(ncFileID, exxVarID, "long_name", "exx"))
82 call check(nf90_def_var(ncid = ncFileID, name = "eyy", xtype = nf90_float, &
83 dimids = (/ DimXID, DimYID, DimZID /), varID = eyyVarID) )
84 call check(nf90_put_att(ncFileID, eyyVarID, "long_name", "eyy"))
86 call check(nf90_def_var(ncid = ncFileID, name = "ezz", xtype = nf90_float, &
87 dimids = (/ DimXID, DimYID, DimZID /), varID = ezzVarID) )
88 call check(nf90_put_att(ncFileID, ezzVarID, "long_name", "ezz"))
90 call check(nf90_def_var(ncid = ncFileID, name = "exy", xtype = nf90_float, &
91 dimids = (/ DimXID, DimYID, DimZID /), varID = exyVarID) )
92 call check(nf90_put_att(ncFileID, exyVarID, "long_name", "exy"))
94 call check(nf90_def_var(ncid = ncFileID, name = "exz", xtype = nf90_float, &
95 dimids = (/ DimXID, DimYID, DimZID /), varID = exzVarID) )
96 call check(nf90_put_att(ncFileID, exzVarID, "long_name", "exz"))
98 call check(nf90_def_var(ncid = ncFileID, name = "eyz", xtype = nf90_float, &
99 dimids = (/ DimXID, DimYID, DimZID /), varID = eyzVarID) )
100 call check(nf90_put_att(ncFileID, eyzVarID, "long_name", "eyz"))
102 call check(nf90_def_var(ncid = ncFileID, name = "ehid", xtype = nf90_float, &
103 dimids = (/ DimXID, DimYID, DimZID /), varID = ehidVarID) )
104 call check(nf90_put_att(ncFileID, ehidVarID, "long_name", "Hidrostatic Strain"))
106 call check(nf90_def_var(ncid = ncFileID, name = "etil", xtype = nf90_float, &
107 dimids = (/ DimXID, DimYID, DimZID /), varID = etilVarID) )
108 call check(nf90_put_att(ncFileID, etilVarID, "long_name", "etil = exx + eyy - 2 * ezz"))
110 ! In the C++ interface the define a scalar variable - do we know how to do this?
111 !call check(nf90_def_var(ncFileID, "ScalarVariable", nf90_real, scalarVarID))
113 ! Leave define mode
114 call check(nf90_enddef(ncfileID))
116 ! Write the dimension variables
118 call check(nf90_put_var(ncFileID, DimXVarId, (/(X_Min+REAL(I-1)*X_Inc, i=1,XDim)/)) )
119 call check(nf90_put_var(ncFileID, DimYVarId, (/(Y_Min+REAL(I-1)*Y_Inc, i=1,YDim)/)) )
120 call check(nf90_put_var(ncFileID, DimZVarId, (/(Z_Min+REAL(I-1)*Z_Inc, i=1,ZDim)/)) )
123 ! Write the Strain distributions
125 call check(nf90_put_var(ncFileID, exxVarID, exx) )
126 call check(nf90_put_var(ncFileID, eyyVarID, eyy) )
127 call check(nf90_put_var(ncFileID, ezzVarID, ezz) )
128 call check(nf90_put_var(ncFileID, exyVarID, exy) )
129 call check(nf90_put_var(ncFileID, exzVarID, exz) )
130 call check(nf90_put_var(ncFileID, eyzVarID, eyz) )
131 call check(nf90_put_var(ncFileID, ehidVarID, exx+eyy+ezz) )
132 call check(nf90_put_var(ncFileID, etilVarID, exx+eyy-2.E0*ezz) )
134 call check(nf90_close(ncFileID))
136 END SUBROUTINE NCPACK_CART
138 SUBROUTINE NCREAD_CART(EXX,EYY,EZZ,EXY,EXZ,EYZ)
141 IMPLICIT NONE
143 REAL,DIMENSION(:,:,:) :: EXX,EYY,EZZ,EXY,EXZ,EYZ
145 ! netcdf related variables
146 integer :: DimXID, DimYID, DimZID, &
147 exxVarID, eyyVarID, ezzVarID, exyVarID, exzVarID, eyzVarID
150 integer :: NcDimX,NcDimY,NcDimZ
152 ! Local variables
153 character (len = 60) :: fileName
155 !-----
156 ! Initialization
157 !-----
159 fileName = STR_Filename
162 ! --------------------
163 ! Code begins
164 ! --------------------
165 if(.not. byteSizesOK()) then
166 print *, "Compiler does not appear to support required kinds of variables."
167 stop
168 end if
170 ! Create the file
172 call check(nf90_open(path = trim(fileName), mode = nf90_nowrite, ncid = ncFileID))
174 ! Define the dimensions
175 call check(nf90_inq_dimid(ncid = ncFileID, name = "dimx", dimid = DimXID))
176 call check(nf90_inq_dimid(ncid = ncFileID, name = "dimy", dimid = DimYID))
177 call check(nf90_inq_dimid(ncid = ncFileID, name = "dimz", dimid = DimZID))
179 ! Create variables and attributes
180 call check(nf90_Inquire_Dimension(ncid = ncFileID, dimid = DimXID, len = NcDimX))
181 call check(nf90_Inquire_Dimension(ncid = ncFileID, dimid = DimYID, len = NcDimY))
182 call check(nf90_Inquire_Dimension(ncid = ncFileID, dimid = DimZID, len = NcDimZ))
184 if ((NcDimX.ne.XDim).or.(NcDimY.ne.YDim).or.(NcDimZ.ne.ZDim)) then
185 write(6,*)"Dimensions problem:"
186 write(6,*)"Dimensions of the NetCDF File: ",TRIM(filename)
187 write(6,*)"DimX:",NcDimX
188 write(6,*)"DimY:",NcDimY
189 write(6,*)"DimZ:",NcDimZ
190 write(6,*)"Dimensions defined on actual run:"
191 write(6,*)"DimX-Y-Z:",XDim,YDim,ZDim
192 STOP
193 end if
196 call check(nf90_inq_varid(ncid = ncFileID, name = "exx", &
197 varID = exxVarID) )
198 call check(nf90_inq_varid(ncid = ncFileID, name = "eyy", &
199 varID = eyyVarID) )
200 call check(nf90_inq_varid(ncid = ncFileID, name = "ezz", &
201 varID = ezzVarID) )
202 call check(nf90_inq_varid(ncid = ncFileID, name = "exy", &
203 varID = exyVarID) )
204 call check(nf90_inq_varid(ncid = ncFileID, name = "exz", &
205 varID = exzVarID) )
206 call check(nf90_inq_varid(ncid = ncFileID, name = "eyz", &
207 varID = eyzVarID) )
209 ! Read the Strain distributions
211 call check(nf90_get_var(ncFileID, exxVarID, exx) )
212 call check(nf90_get_var(ncFileID, eyyVarID, eyy) )
213 call check(nf90_get_var(ncFileID, ezzVarID, ezz) )
214 call check(nf90_get_var(ncFileID, exyVarID, exy) )
215 call check(nf90_get_var(ncFileID, exzVarID, exz) )
216 call check(nf90_get_var(ncFileID, eyzVarID, eyz) )
218 call check(nf90_close(ncFileID))
220 END SUBROUTINE NCREAD_CART
223 SUBROUTINE NCPACK_CYL(EXX,EYY,EZZ,EXZ)
225 IMPLICIT NONE
227 REAL,DIMENSION(:,:,:) :: EXX,EYY,EZZ,EXZ
229 ! netcdf related variables
230 integer :: DimXID, DimZID,i, &
231 esumVarID, errVarID, e00VarID, edifVarID, ezzVarID, erzVarID, &
232 ehidVarID,etilVarID,DimXVarID, DimZVarID
234 real, dimension(1:XDim,1:ZDim) :: STR_AUX
236 ! Local variables
237 character (len = 60) :: fileName
239 !-----
240 ! Initialization
241 !-----
243 fileName = STR_Filename
245 ! --------------------
246 ! Code begins
247 ! --------------------
248 if(.not. byteSizesOK()) then
249 print *, "Compiler does not appear to support required kinds of variables."
250 stop
251 end if
253 ! Create the file
255 call open_over(fileName) !Check if a file with the same name exists
257 call check(nf90_create(path = trim(fileName), cmode = nf90_clobber, ncid = ncFileID))
259 CALL NCPACK_INPUT_STR( )
261 ! Define the dimensions
262 call check(nf90_def_dim(ncid = ncFileID, name = "dimx", len = XDim, dimid = DimXID))
263 call check(nf90_def_dim(ncid = ncFileID, name = "dimz", len = ZDim, dimid = DimZID))
265 ! Create variables and attributes
267 ! Box sizes
269 call check(nf90_def_var(ncFileID, "dimx", nf90_float, dimids = DimXID, varID = DimXVarID) )
270 call check(nf90_put_att(ncFileID, DimXVarID, "long_name", "Radial dimension"))
271 call check(nf90_put_att(ncFileID, DimXVarID, "units", "Angstroms"))
273 call check(nf90_def_var(ncFileID, "dimz", nf90_float, dimids = DimZID, varID = DimZVarID) )
274 call check(nf90_put_att(ncFileID, DimZVarID, "long_name", "Z dimension"))
275 call check(nf90_put_att(ncFileID, DimZVarID, "units", "Angstroms"))
278 ! strain grids
279 call check(nf90_def_var(ncid = ncFileID, name = "esum", xtype = nf90_float, &
280 dimids = (/ DimXID, DimZID /), varID = esumVarID) )
281 call check(nf90_put_att(ncFileID, esumVarID, "long_name", "err+e00"))
283 call check(nf90_def_var(ncid = ncFileID, name = "err", xtype = nf90_float, &
284 dimids = (/ DimXID, DimZID /), varID = errVarID) )
285 call check(nf90_put_att(ncFileID, errVarID, "long_name", "err"))
287 call check(nf90_def_var(ncid = ncFileID, name = "e00", xtype = nf90_float, &
288 dimids = (/ DimXID, DimZID /), varID = e00VarID) )
289 call check(nf90_put_att(ncFileID, e00VarID, "long_name", "e00"))
291 call check(nf90_def_var(ncid = ncFileID, name = "ezz", xtype = nf90_float, &
292 dimids = (/ DimXID, DimZID /), varID = ezzVarID) )
293 call check(nf90_put_att(ncFileID, ezzVarID, "long_name", "ezz"))
295 call check(nf90_def_var(ncid = ncFileID, name = "edif", xtype = nf90_float, &
296 dimids = (/ DimXID, DimZID /), varID = edifVarID) )
297 call check(nf90_put_att(ncFileID, edifVarID, "long_name", "edif"))
299 call check(nf90_def_var(ncid = ncFileID, name = "erz", xtype = nf90_float, &
300 dimids = (/ DimXID, DimZID /), varID = erzVarID) )
301 call check(nf90_put_att(ncFileID, erzVarID, "long_name", "erz"))
303 call check(nf90_def_var(ncid = ncFileID, name = "ehid", xtype = nf90_float, &
304 dimids = (/ DimXID, DimZID /), varID = ehidVarID) )
305 call check(nf90_put_att(ncFileID, ehidVarID, "long_name", "Hidrostatic Strain"))
307 call check(nf90_def_var(ncid = ncFileID, name = "etil", xtype = nf90_float, &
308 dimids = (/ DimXID, DimZID /), varID = etilVarID) )
309 call check(nf90_put_att(ncFileID, etilVarID, "long_name", "etil = exx + eyy - 2 * ezz"))
311 ! Leave define mode
312 call check(nf90_enddef(ncfileID))
314 ! Write the dimension variables
316 call check(nf90_put_var(ncFileID, DimXVarId, (/(X_Min+REAL(I-1)*X_Inc, i=1,XDim)/)) )
317 call check(nf90_put_var(ncFileID, DimZVarId, (/(Z_Min+REAL(I-1)*Z_Inc, i=1,ZDim)/)) )
320 ! Write the Strain distributions
322 STR_AUX=EXX(1:XDim,1,1:ZDim)+EYY(1:XDim,1,1:ZDim)
323 call check(nf90_put_var(ncFileID, esumVarID, STR_AUX) )
325 STR_AUX=EXX(1:XDim,1,1:ZDim)
326 call check(nf90_put_var(ncFileID, errVarID, STR_AUX) )
328 STR_AUX=EYY(1:XDim,1,1:ZDim)
329 call check(nf90_put_var(ncFileID, e00VarID, STR_AUX) )
331 STR_AUX=EZZ(1:XDim,1,1:ZDim)
332 call check(nf90_put_var(ncFileID, ezzVarID, STR_AUX) )
334 STR_AUX=EXX(1:XDim,1,1:ZDim)-EYY(1:XDim,1,1:ZDim)
335 call check(nf90_put_var(ncFileID, edifVarID, STR_AUX) )
337 STR_AUX=EXZ(1:XDim,1,1:ZDim)
338 call check(nf90_put_var(ncFileID, erzVarID, STR_AUX) )
340 STR_AUX=EXX(1:XDim,1,1:ZDim)+EYY(1:XDim,1,1:ZDim)+EZZ(1:XDim,1,1:ZDim)
341 call check(nf90_put_var(ncFileID, ehidVarID, STR_AUX) )
343 STR_AUX=EXX(1:XDim,1,1:ZDim)+EYY(1:XDim,1,1:ZDim)+2.*EZZ(1:XDim,1,1:ZDim)
344 call check(nf90_put_var(ncFileID, etilVarID, STR_AUX) )
346 call check(nf90_close(ncFileID))
348 END SUBROUTINE NCPACK_CYL
350 SUBROUTINE NCREAD_CYL(EXX,EYY,EZZ,EXZ)
353 IMPLICIT NONE
355 REAL,DIMENSION(:,:,:) :: EXX,EYY,EZZ,EXZ
357 ! netcdf related variables
358 integer :: DimXID, DimZID, &
359 errVarID, e00VarID, ezzVarID, erzVarID
362 real, dimension(1:XDim,1:ZDim) :: STR_AUX
364 integer :: NcDimX,NcDimZ
366 ! Local variables
367 character (len = 60) :: fileName
369 !-----
370 ! Initialization
371 !-----
373 fileName = STR_Filename
376 ! --------------------
377 ! Code begins
378 ! --------------------
379 if(.not. byteSizesOK()) then
380 print *, "Compiler does not appear to support required kinds of variables."
381 stop
382 end if
384 ! Create the file
386 call check(nf90_open(path = trim(fileName), mode = nf90_nowrite, ncid = ncFileID))
388 ! Define the dimensions
389 call check(nf90_inq_dimid(ncid = ncFileID, name = "dimx", dimid = DimXID))
390 call check(nf90_inq_dimid(ncid = ncFileID, name = "dimz", dimid = DimZID))
392 ! Create variables and attributes
393 call check(nf90_Inquire_Dimension(ncid = ncFileID, dimid = DimXID, len = NcDimX))
394 call check(nf90_Inquire_Dimension(ncid = ncFileID, dimid = DimZID, len = NcDimZ))
396 if ((NcDimX.ne.XDim).or.(NcDimZ.ne.ZDim)) then
397 write(6,*)"Dimensions problem:"
398 write(6,*)"Dimensions of the NetCDF File: ",TRIM(filename)
399 write(6,*)"DimX:",NcDimX
400 write(6,*)"DimZ:",NcDimZ
401 write(6,*)"Dimensions defined on actual run:"
402 write(6,*)"DimX-Z:", XDim,ZDim
403 STOP
404 end if
407 call check(nf90_inq_varid(ncid = ncFileID, name = "err", &
408 varID = errVarID) )
409 call check(nf90_inq_varid(ncid = ncFileID, name = "e00", &
410 varID = e00VarID) )
411 call check(nf90_inq_varid(ncid = ncFileID, name = "ezz", &
412 varID = ezzVarID) )
413 call check(nf90_inq_varid(ncid = ncFileID, name = "erz", &
414 varID = erzVarID) )
416 ! Read the Strain distributions
418 call check(nf90_get_var(ncFileID, errVarID, STR_AUX) )
419 EXX(1:XDim,1,1:ZDim)=STR_AUX
420 call check(nf90_get_var(ncFileID, e00VarID, STR_AUX) )
421 EYY(1:XDim,1,1:ZDim)=STR_AUX
422 call check(nf90_get_var(ncFileID, ezzVarID, STR_AUX) )
423 EZZ(1:XDim,1,1:ZDim)=STR_AUX
424 call check(nf90_get_var(ncFileID, erzVarID, STR_AUX) )
425 EXZ(1:XDim,1,1:ZDim)=STR_AUX
427 call check(nf90_close(ncFileID))
429 RETURN
431 END SUBROUTINE NCREAD_CYL
433 SUBROUTINE NCPACK_INPUT_STR( )
434 IMPLICIT NONE
436 CHARACTER(LEN=200) :: stitle
438 call check(nf90_def_dim(ncid = ncFileID, name = "vector", len = 3, dimid = Dim3ID))
440 call check(nf90_def_var(ncid = ncFileID, name = "HD", xtype = nf90_float, &
441 varID = HdVarID) )
442 call check(nf90_put_att(ncFileID, HdVarID, "long_name", "Dot Height (Angstroms)"))
444 call check(nf90_def_var(ncid = ncFileID, name = "RT", xtype = nf90_float, &
445 varID = RtVarID) )
446 call check(nf90_put_att(ncFileID, RtVarID, "long_name", "Top Dot Radius (Angstroms)"))
448 call check(nf90_def_var(ncid = ncFileID, name = "RB", xtype = nf90_float, &
449 varID = RbVarID ) )
450 call check(nf90_put_att(ncFileID, RbVarID, "long_name", "Base Dot Radius (Angstroms)"))
452 call check(nf90_def_var(ncid = ncFileID, name = "ND_X", xtype = nf90_int, &
453 varID = NDots_XVarID ) )
454 call check(nf90_put_att(ncFileID, NDots_XVarID, "long_name", "Number of Dots along X-axis"))
456 call check(nf90_def_var(ncid = ncFileID, name = "ND_Y", xtype = nf90_int, &
457 varID = NDots_YVarID ) )
458 call check(nf90_put_att(ncFileID, NDots_YVarID, "long_name", "Number of Dots along Y-axis"))
460 call check(nf90_def_var(ncid = ncFileID, name = "ND_Z", xtype = nf90_int, &
461 varID = NDots_ZVarID ) )
462 call check(nf90_put_att(ncFileID, NDots_ZVarID, "long_name", "Number of Dots along Z-axis"))
464 call check(nf90_def_var(ncFileID, "A1", nf90_float, dimids = Dim3ID, varID = A1VarID) )
465 call check(nf90_put_att(ncFileID, A1VarID, "long_name", "Vector A1 Superlattice"))
466 call check(nf90_put_att(ncFileID, A1VarID, "units", "Angstroms"))
468 call check(nf90_def_var(ncFileID, "A2", nf90_float, dimids = Dim3ID, varID = A2VarID) )
469 call check(nf90_put_att(ncFileID, A2VarID, "long_name", "Vector A2 Superlattice"))
470 call check(nf90_put_att(ncFileID, A2VarID, "units", "Angstroms"))
472 call check(nf90_def_var(ncFileID, "A3", nf90_float, dimids = Dim3ID, varID = A3VarID) )
473 call check(nf90_put_att(ncFileID, A3VarID, "long_name", "Vector A3 Superlattice"))
474 call check(nf90_put_att(ncFileID, A3VarID, "units", "Angstroms"))
476 call check(nf90_def_var(ncFileID, "DWL", nf90_float, varID = DWL_VarID))
478 SELECT CASE(ISHAPE)
479 CASE(1)
480 stitle="Shape: Truncated Cone. "
481 CASE(2)
482 stitle="Shape: Cap. "
483 END SELECT
485 SELECT CASE(MTYPE)
486 CASE(1) !! Isotropic Zincblende
487 stitle="Material Type: Isotropic Zincblende. "//stitle
488 CASE(2) !! Isotropic Wurtzite
489 stitle="Material Type: Isotropic Wurtzite. "//stitle
490 CASE(3) !! Anisotropic Wurtzite
491 stitle="Material Type: Anisotropic Wurtzite. "//stitle
492 END SELECT
494 ! Global attributes
495 call check(nf90_put_att(ncFileID, nf90_global, "history", &
496 "NetCDF file"))
497 stitle="Strain distribution. "//stitle
499 call check(nf90_put_att(ncFileID, nf90_global, "title", TRIM(stitle)))
501 call check(nf90_enddef(ncfileID))
503 call check(nf90_put_var(ncFileID, RbVarId, Rqd_Base ) )
504 call check(nf90_put_var(ncFileID, RtVarId, Rqd_Top ) )
505 call check(nf90_put_var(ncFileID, HdVarId, Hqd ) )
506 call check(nf90_put_var(ncFileID, DWL_VarId, D*ZC ) )
507 call check(nf90_put_var(ncFileID, NDots_XVarId, NMax_X-NMin_X+1 ) )
508 call check(nf90_put_var(ncFileID, NDots_YVarId, NMax_Y-NMin_Y+1 ) )
509 call check(nf90_put_var(ncFileID, NDots_ZVarId, NMax_Z-NMin_Z+1 ) )
510 call check(nf90_put_var(ncFileID, A1VarId, A1_S ) )
511 call check(nf90_put_var(ncFileID, A2VarId, A2_S ) )
512 call check(nf90_put_var(ncFileID, A3VarId, A3_S ) )
515 call check(nf90_redef(ncfileID))
517 RETURN
519 END SUBROUTINE NCPACK_INPUT_STR
522 END MODULE NCPACK_STR