Commits (1)
# use glob syntax.
syntax: glob
*.ser
*.class
*~
*.bak
#*.off
*.old
# python
__pycache__
.mypy_cache
*.pyc
*.bk
*.swp
.DS_Store
# logging files
detailed.log
# eclipse conf file
.settings
.classpath
.project
.manager
.scala_dependencies
# idea
.idea
*.iml
# building
target
build
null
tmp*
temp*
dist
test-output
build.log
# other scm
.svn
.CVS
.hg*
# switch to regexp syntax.
# syntax: regexp
# ^\.pc/
#SHITTY output not in target directory
build.log
#emacs TAGS
TAGS
lib/
env/
*.egg-info/
\ No newline at end of file
from .fleur_parser import FleurParser
\ No newline at end of file
from builtins import object
import setup_paths
from nomadcore.simple_parser import SimpleMatcher as SM
from nomadcore.simple_parser import mainFunction, AncillaryParser, CachingLevel
from nomadcore.local_meta_info import loadJsonFile, InfoKindEl
import os, sys, json, logging
import numpy as np
#import fleur_parser_inp
#import fleur_XML_parser
################################################################
# This is the parser for the main output file of Fleur (out) - adapted for version fleur26e
################################################################
# Copyright 2016-2018 Daria M. Tomecka, Fawzi Mohamed
#
# Licensed under the Apache License, Version 2.0 (the "License");
......@@ -27,6 +12,21 @@ import numpy as np
# See the License for the specific language governing permissions and
# limitations under the License.
################################################################
# This is the parser for the main output file of Fleur (out) - adapted for version fleur26e
################################################################
from builtins import object
from nomadcore.simple_parser import SimpleMatcher as SM
from nomadcore.simple_parser import mainFunction, AncillaryParser, CachingLevel
from nomadcore.local_meta_info import loadJsonFile, InfoKindEl
import os, sys, json, logging
import numpy as np
#import fleur_parser_inp
#import fleur_XML_parser
import nomad_meta_info
__author__ = "Daria M. Tomecka"
__maintainer__ = "Daria M. Tomecka"
__email__ = "tomeckadm@gmail.com;"
......@@ -39,12 +39,12 @@ class FleurContext(object):
self.parser = None
self.rootSecMethodIndex = None
self.secMethodIndex = None
self.secSystemIndex = None
self.secSystemIndex = None
def initialize_values(self):
"""allows to reset values if the same superContext is used to parse different files"""
# pass
# self.metaInfoEnv = self.parser.parserBuilder.metaInfoEnv
self.rootSecMethodIndex = None
......@@ -52,6 +52,9 @@ class FleurContext(object):
self.secSystemIndex = None
self.scfIterNr = 0
self.equiv_atom_labels = []
self.equiv_atom_pos = []
def startedParsing(self, path, parser):
"""called when parsing starts"""
......@@ -67,6 +70,9 @@ class FleurContext(object):
def onOpen_section_system(self, backend, gIndex, section):
self.equiv_atom_labels = []
self.equiv_atom_pos = []
mainFile = self.parser.fIn.fIn.name
fName = mainFile[:-4] + ".inp"
if os.path.exists(fName):
......@@ -106,18 +112,18 @@ class FleurContext(object):
"""
# write number of SCF iterations
backend.addValue('number_of_scf_iterations', self.scfIterNr)
# write the references to section_method and section_system
# method_index = self.secMethodIndex("single_configuration_to_calculation_method_ref")
# if method_index is not None:
backend.addValue('single_configuration_to_calculation_method_ref', self.secMethodIndex)
# system_index = self.secSystemIndex("single_configuration_calculation_to_system_ref")
# if system_index is not None:
backend.addValue('single_configuration_calculation_to_system_ref', self.secSystemIndex)
def onOpen_section_method(self, backend, gIndex, section):
#if self.secMethodIndex is None:
if self.rootSecMethodIndex is None:
......@@ -125,6 +131,18 @@ class FleurContext(object):
self.secMethodIndex = gIndex
# self.secMethodIndex["single_configuration_to_calculation_method_ref"] = gIndex
def onClose_x_fleur_section_equiv_atoms(self, backend, gIndex, section):
label = section["x_fleur_atom_name"][0]
x = section["x_fleur_atom_pos_x"]
y = section["x_fleur_atom_pos_y"]
z = section["x_fleur_atom_pos_z"]
if len(x) != len(y) or len(x) != len(z):
raise Exception("incorrect parsing, different number of x,y,z components")
groupPos = [[x[i], y[i], z[i]] for i in range(len(x))]
nAt = len(groupPos)
self.equiv_atom_labels += [label for i in range(nAt)]
self.equiv_atom_pos += groupPos
def onClose_section_system(self, backend, gIndex, section):
......@@ -141,7 +159,7 @@ class FleurContext(object):
backend.addValue('x_fleur_smearing_width', value)
#------1.atom_positions
atom_pos = []
for i in ['x', 'y', 'z']:
......@@ -151,12 +169,16 @@ class FleurContext(object):
logging.error("atom_pos: %s x %s y %s z %s",atom_pos, x, y, z)
if atom_pos:
# need to transpose array since its shape is [number_of_atoms,3] in the metadata
backend.addArrayValues('atom_positions', np.transpose(np.asarray(atom_pos)))
backend.addArrayValues('atom_positions', np.transpose(np.asarray(atom_pos)), gIndex)
elif len(self.equiv_atom_pos) > 0:
backend.addArrayValues('atom_positions', np.asarray(self.equiv_atom_pos), gIndex)
#------2.atom labels
atom_labels = section['x_fleur_atom_name']
if atom_labels is not None:
backend.addArrayValues('atom_labels', np.asarray(atom_labels))
backend.addArrayValues('atom_labels', np.asarray(atom_labels), gIndex)
elif len(self.equiv_atom_labels) > 0:
backend.addArrayValues('atom_labels', np.asarray(self.equiv_atom_labels), gIndex)
#------3.atom force
atom_force = []
......@@ -167,7 +189,7 @@ class FleurContext(object):
if atom_force:
# need to transpose array since its shape is [number_of_atoms,3] in the metadata
backend.addArrayValues('atom_forces', np.transpose(np.asarray(atom_force)))
#----4. unit_cell
unit_cell = []
for i in ['x', 'y', 'z']:
......@@ -179,11 +201,9 @@ class FleurContext(object):
backend.addArrayValues("configuration_periodic_dimensions", np.ones(3, dtype=bool))
def onClose_section_scf_iteration(self, backend, gIndex, section):
#Trigger called when section_scf_iteration is closed.
# count number of SCF iterations
self.scfIterNr += 1
......@@ -195,15 +215,15 @@ class FleurContext(object):
xc_map_legend = {
'pbe': ['GGA_X_PBE', 'GGA_C_PBE'],
'rpbe': ['GGA_X_PBE', 'GGA_C_PBE'],
'Rpbe': ['GGA_X_RPBE'],
'pw91': ['GGA_X_PW91','GGA_C_PW91'],
'l91': ['LDA_C_PW','LDA_C_PW_RPA','LDA_C_PW_MOD','LDA_C_OB_PW'],
'vwn': ['LDA_C_VWN','LDA_C_VWN_1','LDA_C_VWN_2','LDA_C_VWN_3','LDA_C_VWN_4','LDA_C_VWN_RPA'],
'bh': ['LDA_C_VBH'],
......@@ -224,7 +244,7 @@ class FleurContext(object):
#http://dx.doi.org/10.1088/0022-3719/12/15/007
}
# Push the functional string into the backend
xc_map_legend = xc_map_legend.get(xc_index[0])
if not xc_map_legend:
......@@ -262,9 +282,9 @@ class FleurContext(object):
x_fleur_loading_xml_file_list = section['x_fleur_loading_xml_file']
xml_file = x_fleur_loading_xml_file_list[-1]
if xml_file is not None:
xml_file = x_fleur_loading_xml_file_list[-1]
if xml_file is not None:
logger.warning("This output showed this calculation need to load xml file, so we need this xml file ('%s') to read geometry information" % os.path.normpath(xml_file) )
fName = os.path.normpath(xml_file)
......@@ -278,31 +298,10 @@ class FleurContext(object):
try:
with open(fName) as fxml:
xmlParser.parseFile(fxml)
except IOError:
logger.warning("Could not find xml file in directory '%s'. " % os.path.dirname(os.path.abspath(self.fName)))
"""
"""
def onClose_section_system(self, backend, gIndex, section):
equiv_atoms = section["x_fleur_section_equiv_atoms"]
#logging.error("section: %s", section)
labels = []
pos = []
for eqAtoms in equiv_atoms:
label = eqAtoms["x_fleur_atom_name"][0]
x = eqAtoms["x_fleur_atom_pos_x"]
y = eqAtoms["x_fleur_atom_pos_y"]
z = eqAtoms["x_fleur_atom_pos_z"]
if len(x) != len(y) or len(x) != len(z):
raise Exception("incorrect parsing, different number of x,y,z components")
groupPos = [[x[i],y[i],z[i]] for i in range(len(x))]
nAt = len(groupPos)
labels += [label for i in range(nAt)]
pos += groupPos
backend.addValue("atom_labels", labels)
backend.addValue("atom_positions", pos)
"""
#####################################################################################################
# description of the input #
......@@ -326,7 +325,7 @@ mainFileDescription = SM(
sections=["x_fleur_header"],
fixedStartValues={'program_name': 'Fleur', 'program_basis_set_type': 'FLAPW' }
),
SM(name = 'systemName',
#startReStr = r"\s*-{11}fl7para file ends here-{11}\s*",#L112
startReStr = r"\s*[0-9]*\s*f l a p w version\s[\w].*",
......@@ -335,7 +334,7 @@ mainFileDescription = SM(
# SM(r"\s*[0-9]*\s*f l a p w version\s[\w].*"),
SM(r"\s{4}(?P<x_fleur_system_name>[\w*\s*]+)\n"),#L117
SM(r"\s*name of space group=(?P<x_fleur_space_group>.*)"),#L121
SM(name = 'unit cell',
startReStr = r"\sbravais matrices of real and reciprocal lattices",
subMatchers=[
......@@ -346,13 +345,13 @@ mainFileDescription = SM(
SM(r"\s*the volume of the unit cell omega-tilda=\s*(?P<x_fleur_unit_cell_volume>[0-9.]+)"),#L137
SM(r"\s*the volume of the unit cell omega=\s*(?P<x_fleur_unit_cell_volume_omega>[0-9.]+)"), #L138
# SM(r"\s*exchange-correlation:\s*(?P<x_fleur_exch_pot>\w*\s*.*)",sections = ['x_fleur_section_XC']), #L140
# SM(r"\s*exchange-correlation:\s*(?P<x_fleur_exch_pot>\w*\s*.*)",sections = ['x_fleur_section_XC']), #L140
SM(r"\s*exchange-correlation:\s*(?P<x_fleur_exch_pot>\w*)\s*(?P<x_fleur_xc_correction>\w*\s*.*)",sections = ['x_fleur_section_XC']), #L140
SM(name = 'atomPositions',
startReStr = r"\s*(?P<x_fleur_atom_name>\w*)\s+(?P<x_fleur_nuclear_number>[0-9]+)\s+(?P<x_fleur_number_of_core_levels>[0-9]+)\s+(?P<x_fleur_lexpansion_cutoff>[0-9.]+)\s+(?P<x_fleur_mt_gridpoints>[0-9.]+)\s+(?P<x_fleur_mt_radius>[0-9.]+)\s+(?P<x_fleur_logarythmic_increment>[0-9.]+)",
sections=["x_fleur_section_equiv_atoms"],
sections=["x_fleur_section_equiv_atoms"],
repeats = True,
subMatchers=[
SM(name = 'equiv atoms',
......@@ -360,12 +359,12 @@ mainFileDescription = SM(
# sections=["x_fleur_section_equiv_atoms"],
subMatchers = [
SM(r"\s*(?P<x_fleur_atom_pos_x__bohr>[-+0-9.]+)\s+(?P<x_fleur_atom_pos_y__bohr>[-+0-9.]+)\s+(?P<x_fleur_atom_pos_z__bohr>[-+0-9.]+)\s+(?P<x_fleur_atom_coord_scale>[-+0-9.]*)",#L145
repeats = True
)
repeats = True
)
]
)
]),
SM(r"\s* Suggested values for input:"),
SM(r"\s*k_max\s=\s*(?P<x_fleur_k_max>.*)"),#L154
......@@ -384,7 +383,7 @@ mainFileDescription = SM(
startReStr = r"\s{11}coordinates\s{11}weights",
subMatchers = [
SM(r"\s+(?P<x_fleur_k_point_x>[-+0-9.]+)\s+(?P<x_fleur_k_point_y>[-+0-9.]+)\s+(?P<x_fleur_k_point_z>[-+0-9.]+)\s+(?P<x_fleur_k_point_weight>[-+0-9.]+)", repeats = True #L725
)
)
]),
SM(r"\s*total electronic charge =\s*(?P<x_fleur_tot_elec_charge>.*)"),#L1107
SM(r"\s*total nuclear charge =\s*(?P<x_fleur_tot_nucl_charge>.*)") #L1108
......@@ -405,7 +404,7 @@ mainFileDescription = SM(
SM(r"\s*FX_TOT=(?P<x_fleur_tot_for_fx>[-+0-9.]+)\sFY_TOT=(?P<x_fleur_tot_for_fy>[-+0-9.]+)\sFZ_TOT=(?P<x_fleur_tot_for_fz>[-+0-9.]+)", repeats = True)
], repeats = True),
SM(r"\s*---->\s*.*tkb\*entropy.*=\s*(?P<x_fleur_entropy__hartree>[-+0-9.]+)\shtr"),
SM(r"\s*---->\s*free energy=\s*(?P<x_fleur_free_energy__hartree>[-+0-9.]+)\shtr")
]
......@@ -419,8 +418,8 @@ cachingLevelForMetaName = {
"XC_functional_name": CachingLevel.ForwardAndCache,
# "energy_total": CachingLevel.ForwardAndCache,
}
# loading metadata from nomad-meta-info/meta_info/nomad_meta_info/fleur.nomadmetainfo.json
......@@ -429,9 +428,29 @@ parserInfo = {
"version": "1.0"
}
metaInfoPath = os.path.normpath(os.path.join(os.path.dirname(os.path.abspath(__file__)),"../../../../nomad-meta-info/meta_info/nomad_meta_info/fleur.nomadmetainfo.json"))
metaInfoPath = os.path.normpath(os.path.join(os.path.dirname(os.path.abspath(nomad_meta_info.__file__)), "fleur.nomadmetainfo.json"))
metaInfoEnv, warnings = loadJsonFile(filePath = metaInfoPath, dependencyLoader = None, extraArgsHandling = InfoKindEl.ADD_EXTRA_ARGS, uri = None)
class FleurParser():
""" A proper class envolop for running this parser from within python. """
def __init__(self, backend, **kwargs):
self.backend_factory = backend
def parse(self, mainfile):
from unittest.mock import patch
logging.debug('fleur parser started')
logging.getLogger('nomadcore').setLevel(logging.WARNING)
backend = self.backend_factory(metaInfoEnv)
with patch.object(sys, 'argv', ['<exe>', '--uri', 'nmd://uri', mainfile]):
mainFunction(
mainFileDescription=mainFileDescription,
metaInfoEnv=metaInfoEnv,
parserInfo=parserInfo,
superContext=FleurContext(),
superBackend=backend)
return backend
if __name__ == "__main__":
superContext = FleurContext()
mainFunction(mainFileDescription, metaInfoEnv, parserInfo, superContext = superContext)
from builtins import object
import setup_paths
from nomadcore.simple_parser import mainFunction, CachingLevel
from nomadcore.simple_parser import SimpleMatcher as SM
from nomadcore.local_meta_info import loadJsonFile, InfoKindEl
......@@ -75,7 +74,7 @@ def buildStructureMatchers():
sections = ["section_run", "section_system"],
subMatchers = [
SM(name = 'systemName',
startReStr = r"\s*strho.*\n(?P<x_fleur_system_nameIn>.*)"),#L2
startReStr = r"\s*strho.*\n(?P<x_fleur_system_namein>.*)"),#L2
SM(r"\s{2}(?P<<x_fleur_nr_of_atom_types>[0-9]+)\n",#L10
#
sections=["x_fleur_section_equiv_atoms"],
......@@ -87,7 +86,7 @@ def buildStructureMatchers():
)
],
repeat = True
# SM(r"\s\s(?P<add>[0-9.]*)\s\s(?P<addd>[0-9.]*)\nvchk.*"),
# SM(r"\s\s(?P<add>[0-9.]*)\s\s(?P<addd>[0-9.]*)\nvchk.*"),
)
])
......@@ -107,7 +106,7 @@ def get_cachingLevelForMetaName(metaInfoEnv, CachingLvl):
'section_run': CachingLvl,
'section_system': CachingLvl
}
cachingLevelForMetaName["x_fleur_system_nameIn"] = CachingLevel.ForwardAndCache
cachingLevelForMetaName["x_fleur_system_namein"] = CachingLevel.ForwardAndCache
cachingLevelForMetaName["x_fleur_section_equiv_atoms"] = CachingLevel.ForwardAndCache
return cachingLevelForMetaName
......
# Copyright 2016-2018 Daria Tomecka, Fawzi Mohamed
#
# Copyright 2016-2018 Fawzi Mohamed, Lauri Himanen, Danio Brambila, Ankit Kariryaa, Henning Glawe
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#
# http://www.apache.org/licenses/LICENSE-2.0
#
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import sys, os, os.path
baseDir = os.path.dirname(os.path.abspath(__file__))
commonDir = os.path.normpath(os.path.join(baseDir,"../../../../python-common/common/python"))
from setuptools import setup, find_packages
if not commonDir in sys.path:
sys.path.insert(0, commonDir)
def main():
setup(
name='fleurparser',
version='0.1',
description='NOMAD parser implementation for fleur.',
author='Daria M. Tomecka, Fawzi Mohamed',
license='APACHE 2.0',
packages=find_packages(),
install_requires=[
'nomadcore'
],
)
if __name__ == '__main__':
main()
/*
* Copyright 2016-2018 Daria Tomecka, Fawzi Mohamed
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package eu.nomad_lab.parsers
import eu.nomad_lab
import eu.nomad_lab.DefaultPythonInterpreter
import org.{ json4s => jn }
import eu.{ nomad_lab => lab }
import scala.collection.breakOut
object FleurParser extends SimpleExternalParserGenerator(
name = "FleurParser",
parserInfo = jn.JObject(
("name" -> jn.JString("Fleur")) ::
("parserId" -> jn.JString("Fleur" + lab.FleurVersionInfo.version)) ::
("versionInfo" -> jn.JObject(
("nomadCoreVersion" -> jn.JObject(lab.NomadCoreVersionInfo.toMap.map {
case (k, v) => k -> jn.JString(v.toString)
}(breakOut): List[(String, jn.JString)])) ::
(lab.FleurVersionInfo.toMap.map {
case (key, value) =>
(key -> jn.JString(value.toString))
}(breakOut): List[(String, jn.JString)])
)) :: Nil
),
mainFileTypes = Seq("text/.*"),
mainFileRe = """\s*This output is generated by fleur\.(?<version>[0-9]+[a-zA-Z_]*)\s*\* \*\s*
\s+\* \\:/ \*\s*
\s+\* \| \*\s*
\s+\* \*\s*
""".r,
cmd = Seq(DefaultPythonInterpreter.pythonExe(), "${envDir}/parsers/fleur/parser/parser-fleur/fleur_parser.py",
"--uri", "${mainFileUri}", "${mainFilePath}"),
resList = Seq(
"parser-fleur/fleur_parser.py",
"parser-fleur/fleur_parser_inp.py",
"parser-fleur/setup_paths.py",
"nomad_meta_info/public.nomadmetainfo.json",
"nomad_meta_info/common.nomadmetainfo.json",
"nomad_meta_info/meta_types.nomadmetainfo.json",
"nomad_meta_info/fleur.nomadmetainfo.json"
) ++ DefaultPythonInterpreter.commonFiles(),
dirMap = Map(
"parser-fleur" -> "parsers/fleur/parser/parser-fleur",
"nomad_meta_info" -> "nomad-meta-info/meta_info/nomad_meta_info",
"python" -> "python-common/common/python/nomadcore"
) ++ DefaultPythonInterpreter.commonDirMapping(),
metaInfoEnv = Some(lab.meta.KnownMetaInfoEnvs.fleur)
)
/*
* Copyright 2016-2018 Daria Tomecka, Fawzi Mohamed
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package eu.nomad_lab.parsers
import org.specs2.mutable.Specification
object FleurTests extends Specification {
"FleurParserTest" >> {
"test with json-events" >> {
ParserRun.parse(FleurParser, "parsers/fleur/test/examples/ok/out", "json-events") must_== ParseResult.ParseSuccess
}
"test with json" >> {
ParserRun.parse(FleurParser, "parsers/fleur/test/examples/ok/out", "json") must_== ParseResult.ParseSuccess
}
}
}
energy parameters for window 1 spin 1 mix= 1.000000
atom s p d f
--> 1 3.00000 3.00000 3.00000 4.00000 change: FFFF skiplo: 0
--> 2 3.00000 3.00000 3.00000 4.00000 change: FFFF skiplo: 0
strho=F,film=F,dos=F,isec1=99,ndir= 0,secvar=F
alpha Si
any any ,invs=F,zrfs=F,invs2=F,jspins=1,l_noco=F,l_J=F
0.00000000 5.16735528 5.16735528
5.16735528 0.00000000 5.16735528
5.16735528 5.16735528 0.00000000 0.00000000 1.00000000
pbe non-relativi
igrd=1,lwb=F,ndvgrd=6,idsprs=0,chng=-0.100D-11
2
**********************************
Si 14 4 8 711 2.150000 0.016000
1,force =T,nlo= 0,llo=
1.000000 1.000000 1.000000 8.000000
**********************************
Si 14 4 8 711 2.150000 0.016000
1,force =T,nlo= 0,llo=
-0.125000 -0.130000 -0.135000 1.000000
**********************************
11.100000 9.300000
vchk=F,cdinf=F,pot8=F,gw=0,numbands= 0
lpr=0,form66=F,l_f=F,eonly=F,eig66=F,soc66=T
6 6
1 0
ellow, elup, valence electrons:
-0.80000 1.00000 8.00000
3.70000 =kmax
gauss=F 0.00100tria=F
0.000000 0.000000,l_soc=F,spav=F,off=F
frcor=F,slice=F,ctail=T,disp=F,kcrel=0,u2f=F,f2u=F,bmt=F
itmax=20,maxiter= 99,imix= 7,alpha= 0.05,spinf= 2.00
swsp=F 0.00 0.00
lflip=F 1 1
vacdos=F,layers= 0,integ=F,star=F,nstars= 0 0.00 0.00 0.00 0.00,nstm=0,tworkf= 0.000000
iplot=F,score=F,plpot=F,band=F
0 0.000000 0.000000,nnne= 0,pallst=F
xa= 2.00000,thetad= 330.00000,epsdisp= 0.00001,epsforce= 0.00001
relax 111 111
emin_dos= -0.50000,emax_dos= 0.50000,sig_dos= 0.01500
nkpt= 783
This diff is collapsed.
365 18.0000000000
8.00000 8.00000 8.00000 2.00000
6.00000 8.00000 8.00000 2.00000
4.00000 8.00000 8.00000 2.00000
2.00000 8.00000 8.00000 2.00000
0.00000 8.00000 8.00000 2.00000
-2.00000 8.00000 8.00000 2.00000
4.00000 10.00000 10.00000 2.00000
6.00000 10.00000 10.00000 2.00000
10.00000 8.00000 8.00000 2.00000
8.00000 6.00000 8.00000 2.00000
6.00000 6.00000 8.00000 2.00000
4.00000 6.00000 8.00000 2.00000
2.00000 6.00000 8.00000 2.00000
0.00000 6.00000 8.00000 2.00000
-2.00000 6.00000 8.00000 2.00000
-4.00000 6.00000 8.00000 2.00000
12.00000 6.00000 8.00000 2.00000
10.00000 6.00000 8.00000 2.00000
8.00000 4.00000 8.00000 2.00000
6.00000 4.00000 8.00000 2.00000
4.00000 4.00000 8.00000 2.00000
2.00000 4.00000 8.00000 2.00000
0.00000 4.00000 8.00000 2.00000
-2.00000 4.00000 8.00000 2.00000
-4.00000 4.00000 8.00000 2.00000
12.00000 4.00000 8.00000 2.00000
10.00000 4.00000 8.00000 2.00000
8.00000 2.00000 8.00000 2.00000
6.00000 2.00000 8.00000 2.00000
4.00000 2.00000 8.00000 2.00000
2.00000 2.00000 8.00000 2.00000
0.00000 2.00000 8.00000 2.00000
-2.00000 2.00000 8.00000 2.00000
-4.00000 2.00000 8.00000 2.00000
12.00000 2.00000 8.00000 2.00000
10.00000 2.00000 8.00000 2.00000
8.00000 0.00000 8.00000 2.00000
6.00000 0.00000 8.00000 2.00000
4.00000 0.00000 8.00000 2.00000
2.00000 0.00000 8.00000 2.00000
0.00000 0.00000 8.00000 2.00000
-2.00000 0.00000 8.00000 2.00000
4.00000 0.00000 10.00000 2.00000
6.00000 0.00000 10.00000 2.00000
10.00000 0.00000 8.00000 2.00000
8.00000 -2.00000 8.00000 2.00000
6.00000 -2.00000 8.00000 2.00000
4.00000 -2.00000 8.00000 2.00000
2.00000 -2.00000 8.00000 2.00000
0.00000 -2.00000 8.00000 2.00000
2.00000 2.00000 10.00000 2.00000
4.00000 2.00000 10.00000 2.00000
6.00000 2.00000 10.00000 2.00000
8.00000 2.00000 10.00000 2.00000
10.00000 4.00000 10.00000 2.00000
6.00000 -4.00000 8.00000 2.00000
4.00000 -4.00000 8.00000 2.00000
2.00000 -4.00000 8.00000 2.00000
0.00000 4.00000 10.00000 2.00000
2.00000 4.00000 10.00000 2.00000
4.00000 4.00000 10.00000 2.00000
6.00000 4.00000 10.00000 2.00000
8.00000 4.00000 10.00000 2.00000
10.00000 6.00000 10.00000 2.00000
6.00000 12.00000 8.00000 2.00000
4.00000 12.00000 8.00000 2.00000
2.00000 12.00000 8.00000 2.00000
0.00000 6.00000 10.00000 2.00000
2.00000 6.00000 10.00000 2.00000
4.00000 6.00000 10.00000 2.00000
6.00000 6.00000 10.00000 2.00000
8.00000 6.00000 10.00000 2.00000
8.00000 10.00000 8.00000 2.00000
6.00000 10.00000 8.00000 2.00000
4.00000 10.00000 8.00000 2.00000
2.00000 10.00000 8.00000 2.00000
0.00000 10.00000 8.00000 2.00000
2.00000 8.00000 10.00000 2.00000
4.00000 8.00000 10.00000 2.00000
6.00000 8.00000 10.00000 2.00000
8.00000 8.00000 10.00000 2.00000
8.00000 8.00000 6.00000 2.00000
6.00000 8.00000 6.00000 2.00000
4.00000 8.00000 6.00000 2.00000
2.00000 8.00000 6.00000 2.00000
0.00000 8.00000 6.00000 2.00000
-2.00000 8.00000 6.00000 2.00000
-4.00000 8.00000 6.00000 2.00000
12.00000 8.00000 6.00000 2.00000
10.00000 8.00000 6.00000 2.00000
8.00000 6.00000 6.00000 2.00000
6.00000 6.00000 6.00000 2.00000
4.00000 6.00000 6.00000 2.00000
2.00000 6.00000 6.00000 2.00000
0.00000 6.00000 6.00000 2.00000
-2.00000 6.00000 6.00000 2.00000
-4.00000 6.00000 6.00000 2.00000
12.00000 6.00000 6.00000 2.00000
10.00000 6.00000 6.00000 2.00000
8.00000 4.00000 6.00000 2.00000
6.00000 4.00000 6.00000 2.00000
4.00000 4.00000 6.00000 2.00000
2.00000 4.00000 6.00000 2.00000
0.00000 4.00000 6.00000 2.00000
-2.00000 4.00000 6.00000 2.00000
-4.00000 4.00000 6.00000 2.00000
12.00000 4.00000 6.00000 2.00000
10.00000 4.00000 6.00000 2.00000
8.00000 2.00000 6.00000 2.00000
6.00000 2.00000 6.00000 2.00000
4.00000 2.00000 6.00000 2.00000
2.00000 2.00000 6.00000 2.00000
0.00000 2.00000 6.00000 2.00000
-2.00000 2.00000 6.00000 2.00000
-4.00000 2.00000 6.00000 2.00000
-6.00000 2.00000 6.00000 2.00000
10.00000 2.00000 6.00000 2.00000
8.00000 0.00000 6.00000 2.00000
6.00000 0.00000 6.00000 2.00000
4.00000 0.00000 6.00000 2.00000
2.00000 0.00000 6.00000 2.00000
0.00000 0.00000 6.00000 2.00000
-2.00000 0.00000 6.00000 2.00000
-4.00000 0.00000 6.00000 2.00000
-6.00000 0.00000 6.00000 2.00000
10.00000 0.00000 6.00000 2.00000
8.00000 -2.00000 6.00000 2.00000
6.00000 -2.00000 6.00000 2.00000
4.00000 -2.00000 6.00000 2.00000
2.00000 -2.00000 6.00000 2.00000
0.00000 -2.00000 6.00000 2.00000
-2.00000 -2.00000 6.00000 2.00000
-4.00000 -2.00000 6.00000 2.00000
-6.00000 -2.00000 6.00000 2.00000
10.00000 -2.00000 6.00000 2.00000
8.00000 -4.00000 6.00000 2.00000
6.00000 -4.00000 6.00000 2.00000
4.00000 -4.00000 6.00000 2.00000
2.00000 -4.00000 6.00000 2.00000
0.00000 -4.00000 6.00000 2.00000
-2.00000 -4.00000 6.00000 2.00000
-4.00000 -4.00000 6.00000 2.00000
6.00000 4.00000 12.00000 2.00000
8.00000 4.00000 12.00000 2.00000
8.00000 12.00000 6.00000 2.00000
6.00000 12.00000 6.00000 2.00000
4.00000 12.00000 6.00000 2.00000
2.00000 -6.00000 6.00000 2.00000
0.00000 -6.00000 6.00000 2.00000
-2.00000 -6.00000 6.00000 2.00000
4.00000 6.00000 12.00000 2.00000
6.00000 6.00000 12.00000 2.00000
8.00000 6.00000 12.00000 2.00000
8.00000 10.00000 6.00000 2.00000
6.00000 10.00000 6.00000 2.00000
4.00000 10.00000 6.00000 2.00000
2.00000 10.00000 6.00000 2.00000
0.00000 10.00000 6.00000 2.00000
-2.00000 10.00000 6.00000 2.00000
4.00000 8.00000 12.00000 2.00000
6.00000 8.00000 12.00000 2.00000
10.00000 10.00000 6.00000 2.00000
8.00000 8.00000 4.00000 2.00000
6.00000 8.00000 4.00000 2.00000
4.00000 8.00000 4.00000 2.00000
2.00000 8.00000 4.00000 2.00000
0.00000 8.00000 4.00000 2.00000
-2.00000 8.00000 4.00000 2.00000
-4.00000 8.00000 4.00000 2.00000
12.00000 8.00000 4.00000 2.00000
10.00000 8.00000 4.00000 2.00000
8.00000 6.00000 4.00000 2.00000
6.00000 6.00000 4.00000 2.00000
4.00000 6.00000 4.00000 2.00000
2.00000 6.00000 4.00000 2.00000
0.00000 6.00000 4.00000 2.00000
-2.00000 6.00000 4.00000 2.00000
-4.00000 6.00000 4.00000 2.00000
12.00000 6.00000 4.00000 2.00000
10.00000 6.00000 4.00000 2.00000
8.00000 4.00000 4.00000 2.00000
6.00000 4.00000 4.00000 2.00000
4.00000 4.00000 4.00000 2.00000
2.00000 4.00000 4.00000 2.00000
0.00000 4.00000 4.00000 2.00000
-2.00000 4.00000 4.00000 2.00000
-4.00000 4.00000 4.00000 2.00000
-6.00000 4.00000 4.00000 2.00000
10.00000 4.00000 4.00000 2.00000
8.00000 2.00000 4.00000 2.00000
6.00000 2.00000 4.00000 2.00000
4.00000 2.00000 4.00000 2.00000
2.00000 2.00000 4.00000 2.00000
0.00000 2.00000 4.00000 2.00000
-2.00000 2.00000 4.00000 2.00000
-4.00000 2.00000 4.00000 2.00000
-6.00000 2.00000 4.00000 2.00000
10.00000 2.00000 4.00000 2.00000
8.00000 0.00000 4.00000 2.00000
6.00000 0.00000 4.00000 2.00000
4.00000 0.00000 4.00000 2.00000
2.00000 0.00000 4.00000 2.00000
0.00000 0.00000 4.00000 2.00000
-2.00000 0.00000 4.00000 2.00000
-4.00000 0.00000 4.00000 2.00000
-6.00000 0.00000 4.00000 2.00000
10.00000 0.00000 4.00000 2.00000
8.00000 -2.00000 4.00000 2.00000
6.00000 -2.00000 4.00000 2.00000
4.00000 -2.00000 4.00000 2.00000
2.00000 -2.00000 4.00000 2.00000
0.00000 -2.00000 4.00000 2.00000
-2.00000 -2.00000 4.00000 2.00000
-4.00000 -2.00000 4.00000 2.00000
-6.00000 -2.00000 4.00000 2.00000
-8.00000 -2.00000 4.00000 2.00000
8.00000 -4.00000 4.00000 2.00000
6.00000 -4.00000 4.00000 2.00000
4.00000 -4.00000 4.00000 2.00000
2.00000 -4.00000 4.00000 2.00000
0.00000 -4.00000 4.00000 2.00000
-2.00000 -4.00000 4.00000 2.00000
-4.00000 -4.00000 4.00000 2.00000
-6.00000 -4.00000 4.00000 2.00000
-8.00000 -4.00000 4.00000 2.00000
8.00000 12.00000 4.00000 2.00000
6.00000 12.00000 4.00000 2.00000
-4.00000 6.00000 -4.00000 2.00000
2.00000 -6.00000 4.00000 2.00000
0.00000 -6.00000 4.00000 2.00000
-2.00000 -6.00000 4.00000 2.00000
-4.00000 -6.00000 4.00000 2.00000
-6.00000 -6.00000 4.00000 2.00000
-8.00000 -6.00000 4.00000 2.00000
8.00000 10.00000 4.00000 2.00000
6.00000 10.00000 4.00000 2.00000
4.00000 10.00000 4.00000 2.00000
2.00000 10.00000 4.00000 2.00000
0.00000 10.00000 4.00000 2.00000
2.00000 8.00000 -4.00000 2.00000
4.00000 8.00000 -4.00000 2.00000
6.00000 8.00000 -4.00000 2.00000
10.00000 10.00000 4.00000 2.00000
8.00000 8.00000 2.00000 2.00000
6.00000 8.00000 2.00000 2.00000
4.00000 8.00000 2.00000 2.00000
2.00000 8.00000 2.00000 2.00000
0.00000 8.00000 2.00000 2.00000
-2.00000 8.00000 2.00000 2.00000
-4.00000 8.00000 2.00000 2.00000
12.00000 8.00000 2.00000 2.00000
10.00000 8.00000 2.00000 2.00000
8.00000 6.00000 2.00000 2.00000
6.00000 6.00000 2.00000 2.00000
4.00000 6.00000 2.00000 2.00000
2.00000 6.00000 2.00000 2.00000
0.00000 6.00000 2.00000 2.00000
-2.00000 6.00000 2.00000 2.00000
-4.00000 6.00000 2.00000 2.00000
-6.00000 6.00000 2.00000 2.00000
10.00000 6.00000 2.00000 2.00000
8.00000 4.00000 2.00000 2.00000
6.00000 4.00000 2.00000 2.00000
4.00000 4.00000 2.00000 2.00000
2.00000 4.00000 2.00000 2.00000
0.00000 4.00000 2.00000 2.00000
-2.00000 4.00000 2.00000 2.00000
-4.00000 4.00000 2.00000 2.00000
-6.00000 4.00000 2.00000 2.00000
10.00000 4.00000 2.00000 2.00000
8.00000 2.00000 2.00000 2.00000
6.00000 2.00000 2.00000 2.00000
4.00000 2.00000 2.00000 2.00000
2.00000 2.00000 2.00000 2.00000
0.00000 2.00000 2.00000 2.00000
-2.00000 2.00000 2.00000 2.00000
-4.00000 2.00000 2.00000 2.00000
-6.00000 2.00000 2.00000 2.00000
10.00000 2.00000 2.00000 2.00000
8.00000 0.00000 2.00000 2.00000
6.00000 0.00000 2.00000 2.00000
4.00000 0.00000 2.00000 2.00000
2.00000 0.00000 2.00000 2.00000
0.00000 0.00000 2.00000 2.00000
-2.00000 0.00000 2.00000 2.00000
-4.00000 0.00000 2.00000 2.00000
-6.00000 0.00000 2.00000 2.00000
-8.00000 0.00000 2.00000 2.00000
8.00000 -2.00000 2.00000 2.00000
6.00000 -2.00000 2.00000 2.00000
4.00000 -2.00000 2.00000 2.00000
2.00000 -2.00000 2.00000 2.00000
0.00000 -2.00000 2.00000 2.00000
-2.00000 -2.00000 2.00000 2.00000
-4.00000 -2.00000 2.00000 2.00000
-6.00000 -2.00000 2.00000 2.00000
-8.00000 -2.00000 2.00000 2.00000
-8.00000 4.00000 -2.00000 2.00000
-6.00000 4.00000 -2.00000 2.00000
-4.00000 4.00000 -2.00000 2.00000
-2.00000 4.00000 -2.00000 2.00000
0.00000 4.00000 -2.00000 2.00000
2.00000 4.00000 -2.00000 2.00000
4.00000 4.00000 -2.00000 2.00000
-6.00000 -4.00000 2.00000 2.00000
-8.00000 -4.00000 2.00000 2.00000
10.00000 6.00000 -2.00000 2.00000
-6.00000 6.00000 -2.00000 2.00000
-4.00000 6.00000 -2.00000 2.00000
-2.00000 6.00000 -2.00000 2.00000
0.00000 6.00000 -2.00000 2.00000
2.00000 6.00000 -2.00000 2.00000
4.00000 6.00000 -2.00000 2.00000
6.00000 6.00000 -2.00000 2.00000
8.00000 6.00000 -2.00000 2.00000
8.00000 10.00000 2.00000 2.00000
6.00000 10.00000 2.00000 2.00000
4.00000 10.00000 2.00000 2.00000
2.00000 10.00000 2.00000 2.00000
0.00000 8.00000 -2.00000 2.00000
2.00000 8.00000 -2.00000 2.00000
4.00000 8.00000 -2.00000 2.00000
6.00000 8.00000 -2.00000 2.00000
8.00000 8.00000 -2.00000 2.00000
8.00000 8.00000 0.00000 2.00000
6.00000 8.00000 0.00000 2.00000
4.00000 8.00000 0.00000 2.00000
2.00000 8.00000 0.00000 2.00000
0.00000 8.00000 0.00000 2.00000
-2.00000 8.00000 0.00000 2.00000
4.00000 10.00000 0.00000 2.00000
6.00000 10.00000 0.00000 2.00000
10.00000 8.00000 0.00000 2.00000
8.00000 6.00000 0.00000 2.00000
6.00000 6.00000 0.00000 2.00000
4.00000 6.00000 0.00000 2.00000
2.00000 6.00000 0.00000 2.00000
0.00000 6.00000 0.00000 2.00000
-2.00000 6.00000 0.00000 2.00000
-4.00000 6.00000 0.00000 2.00000
-6.00000 6.00000 0.00000 2.00000
10.00000 6.00000 0.00000 2.00000
8.00000 4.00000 0.00000 2.00000
6.00000 4.00000 0.00000 2.00000
4.00000 4.00000 0.00000 2.00000
2.00000 4.00000 0.00000 2.00000
0.00000 4.00000 0.00000 2.00000
-2.00000 4.00000 0.00000 2.00000
-4.00000 4.00000 0.00000 2.00000
-6.00000 4.00000 0.00000 2.00000
10.00000 4.00000 0.00000 2.00000
8.00000 2.00000 0.00000 2.00000
6.00000 2.00000 0.00000 2.00000
4.00000 2.00000 0.00000 2.00000
2.00000 2.00000 0.00000 2.00000
0.00000 2.00000 0.00000 2.00000
-2.00000 2.00000 0.00000 2.00000
-4.00000 2.00000 0.00000 2.00000
-6.00000 2.00000 0.00000 2.00000
-8.00000 2.00000 0.00000 2.00000
-8.00000 0.00000 0.00000 2.00000
-6.00000 0.00000 0.00000 2.00000
-4.00000 0.00000 0.00000 2.00000
-2.00000 0.00000 0.00000 2.00000
0.00000 0.00000 0.00000 1.00000
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
1 1 T ! nop,nop2,symor
! 1
1 0 0 0.00000
0 1 0 0.00000
0 0 1 0.00000