Commit 04a29b64 authored by Stefanie Kiemle's avatar Stefanie Kiemle
Browse files

Merge branch 'feature/parameterlist' into 'master'

Feature/parameterlist

Closes #1101

See merge request !3067
parents fbfa9bc2 95e4cacd
Pipeline #17503 passed with stages
in 0 seconds
......@@ -202,9 +202,9 @@ def getParameterListFromFile(fileName):
if errors:
# remove the known warnings
for lineIdx in list(errors.keys()):
searchKey = os.path.basename(fileName) + "." + str(lineIdx)
searchKey = os.path.relpath(fileName, cmdArgs["root"])
if searchKey in warningDict:
if errors[lineIdx]["line"] == warningDict[searchKey]["text"]:
if errors[lineIdx]["line"] in warningDict[searchKey]:
errors.pop(lineIdx)
if len(errors) > 0:
......@@ -310,12 +310,12 @@ for key in parameterDict:
hasDVInput = "defaultValue" in inputDict[paramName]
hasPTInput = "type" in inputDict[paramName]
parameterTypeName = entry["paramType"][0]
parameterTypeName = [entry["paramType"][0]]
hasMultiplePT = not all(pt == parameterTypeName for pt in entry["paramType"])
defaultValue = next((e for e in entry["defaultValue"] if e), "-")
defaultValue = [next((e for e in entry["defaultValue"] if e), "-")]
entry["defaultValue"] = [value if value is not None else "-" for value in entry["defaultValue"]]
hasMultipleDV = not all(dv == defaultValue for dv in entry["defaultValue"])
hasMultipleDV = not all(dv == defaultValue[0] for dv in entry["defaultValue"])
if hasMultiplePT or hasMultipleDV:
logger.debug(
f"\nFound multiple occurrences of parameter {paramName}"
......
{
"cakegridmanager.hh.114": {
"text": "positions[i] = getParamFromGroup<std::vector<Scalar>>(modelParamGroup, \"Grid.Radial\" + std::to_string(i));"
},
"cakegridmanager.hh.119": {
"text": "positions[i] = getParamFromGroup<std::vector<Scalar>>(modelParamGroup, \"Grid.Angular\" + std::to_string(i));"
},
"cakegridmanager.hh.124": {
"text": "positions[i] = getParamFromGroup<std::vector<Scalar>>(modelParamGroup, \"Grid.Axial\" + std::to_string(i));"
},
"cakegridmanager.hh.145": {
"text": "cells[i] = getParamFromGroup<std::vector<int>>(modelParamGroup, \"Grid.Cells\" + std::to_string(i), cells[i]);"
},
"cakegridmanager.hh.155": {
"text": "grading[i] = getParamFromGroup<std::vector<Scalar>>(modelParamGroup, \"Grid.Grading\" + std::to_string(i), grading[i]);"
},
"gridmanager_yasp.hh.238": {
"text": "positions[i] = getParamFromGroup<std::vector<ctype>>(modelParamGroup, \"Grid.Positions\" + std::to_string(i));"
},
"gridmanager_yasp.hh.245": {
"text": "cells[i] = getParamFromGroup<std::vector<int>>(modelParamGroup, \"Grid.Cells\" + std::to_string(i), cells[i]);"
},
"gridmanager_yasp.hh.253": {
"text": "grading[i] = getParamFromGroup<std::vector<ctype>>(modelParamGroup, \"Grid.Grading\" + std::to_string(i), grading[i]);"
},
"structuredlatticegridcreator.hh.253": {
"text": "grading[i] = getParamFromGroup<std::vector<ctype>>(modelParamGroup, \"Grid.Grading\" + std::to_string(i), grading[i]);"
},
"structuredlatticegridcreator.hh.372": {
"text": "positions[i] = getParamFromGroup<std::vector<CoordScalar>>(paramGroup_, \"Grid.Positions\" + std::to_string(i), std::vector<CoordScalar>{});"
},
"structuredlatticegridcreator.hh.395": {
"text": "grading[i] = getParamFromGroup<std::vector<CoordScalar>>(paramGroup_, \"Grid.Grading\" + std::to_string(i), grading[i]);"
},
"loadsolution.hh.293": {
"text": "const auto pvName = getParamFromGroup<std::vector<std::string>>(paramGroup, paramNameWithState);"
},
"linearsolverparameters.hh.83": {
"text": "const auto value = getParam<std::string>(fullDumuxKey, \"\");"
},
"parametersforgeneratedgrid.hh.134": {
"text": "auto lowerLeft = getParamFromGroup<GlobalPosition>(paramGroup_, \"Grid.Subregion\" + std::to_string(i) + \".LowerLeft\");"
},
"parametersforgeneratedgrid.hh.135": {
"text": "auto upperRight = getParamFromGroup<GlobalPosition>(paramGroup_, \"Grid.Subregion\" + std::to_string(i) + \".UpperRight\");"
},
"parametersforgeneratedgrid.hh.401": {
"text": "const auto poreLabelsToSetFixedRadius = getParamFromGroup<std::vector<int>>(paramGroup_, prefix + \"PoreLabelsToSetFixedRadius\", std::vector<int>{});"
},
"parametersforgeneratedgrid.hh.402": {
"text": "const auto poreLabelsToApplyFactorForRadius = getParamFromGroup<std::vector<int>>(paramGroup_, prefix + \"PoreLabelsToApplyFactorForRadius\", std::vector<int>{});"
},
"parametersforgeneratedgrid.hh.403": {
"text": "const auto poreRadiusForLabel = getParamFromGroup<std::vector<Scalar>>(paramGroup_, prefix + \"FixedPoreRadiusForLabel\", std::vector<Scalar>{});"
},
"parametersforgeneratedgrid.hh.404": {
"text": "const auto poreRadiusFactorForLabel = getParamFromGroup<std::vector<Scalar>>(paramGroup_, prefix + \"PoreRadiusFactorForLabel\", std::vector<Scalar>{});"
},
"parametersforgeneratedgrid.hh.441": {
"text": "const Scalar fixedPoreRadius = getParamFromGroup<Scalar>(paramGroup_, prefix + \"PoreInscribedRadius\", -1.0);"
},
"parametersforgeneratedgrid.hh.446": {
"text": "const auto seed = getParamFromGroup<unsigned int>(paramGroup_, prefix + \"ParameterRandomNumberSeed\", std::random_device{}());"
},
"parametersforgeneratedgrid.hh.449": {
"text": "const auto type = getParamFromGroup<std::string>(paramGroup_, prefix + \"ParameterType\", \"lognormal\");"
},
"parametersforgeneratedgrid.hh.495": {
"text": "return std::array{getParamFromGroup<Scalar>(paramGroup_, prefix + paramName0),"
},
"parametersforgeneratedgrid.hh.496": {
"text": "getParamFromGroup<Scalar>(paramGroup_, prefix + paramName1)};"
},
"parametersforgeneratedgrid.hh.563": {
"text": "const Scalar inputThroatInscribedRadius = getParamFromGroup<Scalar>(paramGroup_, prefix + \"ThroatInscribedRadius\", -1.0);"
},
"parametersforgeneratedgrid.hh.566": {
"text": "const Scalar throatN = getParamFromGroup<Scalar>(paramGroup_, prefix + \"ThroatInscribedRadiusN\", 0.1);"
},
"parametersforgeneratedgrid.hh.591": {
"text": "const Scalar inputThroatLength = getParamFromGroup<Scalar>(paramGroup_, prefix + \"ThroatLength\", -1.0);"
},
"parametersforgeneratedgrid.hh.593": {
"text": "const bool substractRadiiFromThroatLength = getParamFromGroup<bool>(paramGroup_, prefix + \"SubstractRadiiFromThroatLength\", true);"
},
"parametersforgeneratedgrid.hh.563": {
"text": "const Scalar inputThroatInscribedRadius = getParamFromGroup<Scalar>(paramGroup_, prefix + \"ThroatInscribedRadius\", -1.0);"
},
"parametersforgeneratedgrid.hh.563": {
"text": "const Scalar inputThroatInscribedRadius = getParamFromGroup<Scalar>(paramGroup_, prefix + \"ThroatInscribedRadius\", -1.0);"
},
"velocitygradients.hh.281": {
"text": "static const bool unsymmetrizedGradientForBJ = getParamFromGroup<bool>(problem.paramGroup(),"
},
"velocitygradients.hh.341": {
"text": "static const bool unsymmetrizedGradientForBJ = getParamFromGroup<bool>(problem.paramGroup(),"
},
"fvspatialparams1pconstant.hh.52": {
"text": ", temperature_(getParam<Scalar>("
},
"fluxvariablescachefiller.hh.630": {
"text": "static const auto zeroD = getParamFromGroup<Scalar>("
},
"snappygridmanager.hh.325": {
"text": "static const auto couplingPlaneNormal = getParamFromGroup<GlobalPosition>(modelParamGroup,"
},
"snappygridmanager.hh.355": {
"text": "const ScalarVector upstreamPositions = getParamFromGroup<ScalarVector>(modelParamGroup, \"Grid.UpstreamPositions\" + std::to_string(i), ScalarVector{});"
},
"snappygridmanager.hh.364": {
"text": "const ScalarVector downstreamPositions = getParamFromGroup<ScalarVector>(modelParamGroup, \"Grid.DownstreamPositions\" + std::to_string(i), ScalarVector{});"
},
"snappygridmanager.hh.385": {
"text": "const ScalarVector normalPositions = getParamFromGroup<ScalarVector>(modelParamGroup, \"Grid.Positions\" + std::to_string(i), ScalarVector{});"
},
"snappygridmanager.hh.438": {
"text": "const IntVector cellsUpstream = getParamFromGroup<IntVector>(modelParamGroup_,"
},
"snappygridmanager.hh.463": {
"text": "const ScalarVector upstreamGrading = getParamFromGroup<ScalarVector>(modelParamGroup_, \"Grid.UpstreamGrading\" + std::to_string(directionIndex), ScalarVector{});"
},
"snappygridmanager.hh.500": {
"text": "const IntVector downstreamcells = getParamFromGroup<IntVector>(modelParamGroup_,"
},
"snappygridmanager.hh.526": {
"text": "const ScalarVector downstreamGrading = getParamFromGroup<ScalarVector>(modelParamGroup_, \"Grid.DownstreamGrading\" + std::to_string(directionIndex), ScalarVector{});"
},
"snappygridmanager.hh.631": {
"text": "const IntVector cellsNormal = getParamFromGroup<IntVector>(modelParamGroup_, \"Grid.Cells\" + std::to_string(directionIndex));"
},
"snappygridmanager.hh.644": {
"text": "const ScalarVector normalGrading = getParamFromGroup<ScalarVector>(modelParamGroup_, \"Grid.Grading\" + std::to_string(directionIndex), ScalarVector{});"
}
"dumux/io/grid/cakegridmanager.hh": [
"positions[i] = getParamFromGroup<std::vector<Scalar>>(modelParamGroup, \"Grid.Radial\" + std::to_string(i));",
"positions[i] = getParamFromGroup<std::vector<Scalar>>(modelParamGroup, \"Grid.Angular\" + std::to_string(i));",
"positions[i] = getParamFromGroup<std::vector<Scalar>>(modelParamGroup, \"Grid.Axial\" + std::to_string(i));",
"cells[i] = getParamFromGroup<std::vector<int>>(modelParamGroup, \"Grid.Cells\" + std::to_string(i), cells[i]);",
"grading[i] = getParamFromGroup<std::vector<Scalar>>(modelParamGroup, \"Grid.Grading\" + std::to_string(i), grading[i]);"
],
"dumux/io/grid/gridmanager_yasp.hh": [
"positions[i] = getParamFromGroup<std::vector<ctype>>(modelParamGroup, \"Grid.Positions\" + std::to_string(i));",
"cells[i] = getParamFromGroup<std::vector<int>>(modelParamGroup, \"Grid.Cells\" + std::to_string(i), cells[i]);",
"grading[i] = getParamFromGroup<std::vector<ctype>>(modelParamGroup, \"Grid.Grading\" + std::to_string(i), grading[i]);"
],
"dumux/io/grid/porenetwork/structuredlatticegridcreator.hh": [
"grading[i] = getParamFromGroup<std::vector<ctype>>(modelParamGroup, \"Grid.Grading\" + std::to_string(i), grading[i]);",
"positions[i] = getParamFromGroup<std::vector<CoordScalar>>(paramGroup_, \"Grid.Positions\" + std::to_string(i), std::vector<CoordScalar>{});",
"grading[i] = getParamFromGroup<std::vector<CoordScalar>>(paramGroup_, \"Grid.Grading\" + std::to_string(i), grading[i]);"
],
"dumux/io/loadsolution.hh": [
"const auto pvName = getParamFromGroup<std::vector<std::string>>(paramGroup, paramNameWithState);"
],
"dumux/linear/linearsolverparameters.hh": [
"const auto value = getParam<std::string>(fullDumuxKey, \"\");"
],
"dumux/io/grid/porenetwork/parametersforgeneratedgrid.hh": [
"auto lowerLeft = getParamFromGroup<GlobalPosition>(paramGroup_, \"Grid.Subregion\" + std::to_string(i) + \".LowerLeft\");",
"auto upperRight = getParamFromGroup<GlobalPosition>(paramGroup_, \"Grid.Subregion\" + std::to_string(i) + \".UpperRight\");",
"const auto poreLabelsToSetFixedRadius = getParamFromGroup<std::vector<int>>(paramGroup_, prefix + \"PoreLabelsToSetFixedRadius\", std::vector<int>{});",
"const auto poreLabelsToApplyFactorForRadius = getParamFromGroup<std::vector<int>>(paramGroup_, prefix + \"PoreLabelsToApplyFactorForRadius\", std::vector<int>{});",
"const auto poreRadiusForLabel = getParamFromGroup<std::vector<Scalar>>(paramGroup_, prefix + \"FixedPoreRadiusForLabel\", std::vector<Scalar>{});",
"const auto poreRadiusFactorForLabel = getParamFromGroup<std::vector<Scalar>>(paramGroup_, prefix + \"PoreRadiusFactorForLabel\", std::vector<Scalar>{});",
"const Scalar fixedPoreRadius = getParamFromGroup<Scalar>(paramGroup_, prefix + \"PoreInscribedRadius\", -1.0);",
"const auto seed = getParamFromGroup<unsigned int>(paramGroup_, prefix + \"ParameterRandomNumberSeed\", std::random_device{}());",
"const auto type = getParamFromGroup<std::string>(paramGroup_, prefix + \"ParameterType\", \"lognormal\");",
"return std::array{getParamFromGroup<Scalar>(paramGroup_, prefix + paramName0),",
"getParamFromGroup<Scalar>(paramGroup_, prefix + paramName1)};",
"const Scalar inputThroatInscribedRadius = getParamFromGroup<Scalar>(paramGroup_, prefix + \"ThroatInscribedRadius\", -1.0);",
"const Scalar throatN = getParamFromGroup<Scalar>(paramGroup_, prefix + \"ThroatInscribedRadiusN\", 0.1);",
"const Scalar inputThroatLength = getParamFromGroup<Scalar>(paramGroup_, prefix + \"ThroatLength\", -1.0);",
"const bool substractRadiiFromThroatLength = getParamFromGroup<bool>(paramGroup_, prefix + \"SubstractRadiiFromThroatLength\", true);",
"// TODO remove if/else after 3.5 and use const bool subtractRadiiFromThroatLength = getParamFromGroup<bool>(paramGroup_, prefix + \"SubtractPoreInscribedRadiiFromThroatLength\", true);",
"subtractRadiiFromThroatLength = getParamFromGroup<bool>(paramGroup_, prefix + \"SubstractRadiiFromThroatLength\");",
"subtractRadiiFromThroatLength = getParamFromGroup<bool>(paramGroup_, prefix + \"SubtractPoreInscribedRadiiFromThroatLength\", true);"
],
"dumux/freeflow/navierstokes/staggered/velocitygradients.hh": [
"static const bool unsymmetrizedGradientForBJ = getParamFromGroup<bool>(problem.paramGroup(),",
"static const bool unsymmetrizedGradientForBJ = getParamFromGroup<bool>(problem.paramGroup(),"
],
"dumux/porousmediumflow/fvspatialparams1pconstant.hh": [
", temperature_(getParam<Scalar>("
],
"dumux/porousmediumflow/fluxvariablescachefiller.hh": [
"static const auto zeroD = getParamFromGroup<Scalar>("
],
"dumux/multidomain/boundary/freeflowporenetwork/snappygridmanager.hh": [
"static const auto couplingPlaneNormal = getParamFromGroup<GlobalPosition>(modelParamGroup,",
"const ScalarVector upstreamPositions = getParamFromGroup<ScalarVector>(modelParamGroup, \"Grid.UpstreamPositions\" + std::to_string(i), ScalarVector{});",
"const ScalarVector downstreamPositions = getParamFromGroup<ScalarVector>(modelParamGroup, \"Grid.DownstreamPositions\" + std::to_string(i), ScalarVector{});",
"const ScalarVector normalPositions = getParamFromGroup<ScalarVector>(modelParamGroup, \"Grid.Positions\" + std::to_string(i), ScalarVector{});",
"const IntVector cellsUpstream = getParamFromGroup<IntVector>(modelParamGroup_,",
"const ScalarVector upstreamGrading = getParamFromGroup<ScalarVector>(modelParamGroup_, \"Grid.UpstreamGrading\" + std::to_string(directionIndex), ScalarVector{});",
"const IntVector downstreamcells = getParamFromGroup<IntVector>(modelParamGroup_,",
"const ScalarVector downstreamGrading = getParamFromGroup<ScalarVector>(modelParamGroup_, \"Grid.DownstreamGrading\" + std::to_string(directionIndex), ScalarVector{});",
"const IntVector cellsNormal = getParamFromGroup<IntVector>(modelParamGroup_, \"Grid.Cells\" + std::to_string(directionIndex));",
"const ScalarVector normalGrading = getParamFromGroup<ScalarVector>(modelParamGroup_, \"Grid.Grading\" + std::to_string(directionIndex), ScalarVector{});"
],
"dumux/assembly/boxlocalassembler.hh": [
"static const bool updateAllVolVars = getParamFromGroup<bool>("
]
}
This diff is collapsed.
......@@ -80,11 +80,17 @@
]
},
"-.KrnData": {
"type":[
"std::vector<Scalar>"
],
"explanation": [
"Relative permeability for the non-wetting phase data for spline material law."
]
},
"-.KrwData": {
"type":[
"std::vector<Scalar>"
],
"explanation": [
"Relative permeability for the wetting phase data for spline material law."
]
......@@ -167,6 +173,9 @@
]
},
"-.PcData": {
"type": [
"std::vector<Scalar>"
],
"explanation": [
"Capillary pressure data for spline material law."
]
......@@ -232,11 +241,17 @@
]
},
"-.SplineSweInterval": {
"defaultValue": [
"std::array<double, 2>{{0.1, 1.0}"
],
"explanation": [
"Effective wetting saturation interval for spline material law."
]
},
"-.SwData": {
"type": [
"std::vector<Scalar>"
],
"explanation": [
"Wetting saturation pressure data for spline material law."
]
......@@ -326,6 +341,11 @@
"Whether to refine where source terms are specified"
]
},
"Assembly.Multithreading": {
"explanation": [
"Whether to enable multi-threaded assembly"
]
},
"Assembly.NumericDifference.BaseEpsilon": {
"explanation": [
"The basic numeric epsilon used in the differentiation for deflecting primary variables"
......@@ -356,6 +376,11 @@
"The salinity"
]
},
"Component.EnthalpyOfVaporization": {
"explanation": [
"The enthalpy of the vaporization"
]
},
"Component.GasDensity": {
"explanation": [
"The density of the gas"
......@@ -371,11 +396,21 @@
"The dynamic viscosity of the gas"
]
},
"Component.GasHeatCapacity": {
"explanation": [
"The heat capacity of the gas"
]
},
"Component.GasKinematicViscosity": {
"explanation": [
"The gas kinematic viscosity"
]
},
"Component.GasThermalConductivity": {
"explanation": [
"The thermal conductivity of the gas"
]
},
"Component.HenryComponentInWater": {
"explanation": [
"Henry coefficient for the constant component in liquid water"
......@@ -446,6 +481,16 @@
"Thermal conductivity of the component as a solid"
]
},
"Component.TriplePressure": {
"explanation": [
"The triple pressure of the component"
]
},
"Component.TripleTemperature": {
"explanation": [
"The triple temperature of the component"
]
},
"ElectroChemistry.ActivationBarrier": {
"explanation": [
"The activation barrier to calculate the exchange current density."
......@@ -593,7 +638,7 @@
},
"FreeFlow.UseOldTransportingVelocity": {
"explanation": [
""
"whether to use the old transporting velocity"
]
},
"Grid.AddThroatVolumeToPoreVolume": {
......@@ -635,6 +680,11 @@
"With this, the boundary faces can be set in the format xmin xmax ymin ymax (zmin zmax)."
]
},
"Grid.BoundaryPoreLabels": {
"explanation": [
"With this, the boundary faces can be set in the format xmin xmax ymin ymax (zmin zmax)."
]
},
"Grid.BoundarySegments": {
"explanation": [
"For the dune gmsh reader: Whether to insert boundary segments into the grid"
......@@ -656,6 +706,12 @@
]
},
"Grid.Cells": {
"type": [
"std::array<unsigned int, dim>"
],
"defaultValue": [
"{1, 1, 1}"
],
"explanation": [
"The number of elements in a structured uniform grid in x, y and z direction"
]
......@@ -687,12 +743,12 @@
"To construct a 1D grid with just a coordinates vector"
]
},
"Grid.CouplingNormal": {
"Grid.CouplinglineNormal": {
"defaultValue": [
"[0...,1]"
"{0,0,1}"
],
"explanation": [
""
"The normal direction of the coupled interface"
],
"mode": "manual",
"type": [
......@@ -700,6 +756,9 @@
]
},
"Grid.CouplingPlaneLowerLeft": {
"defaultValue": [
"Grid.LowerLeft"
],
"explanation": [
"the lower left point of the coupling plane"
]
......@@ -784,7 +843,7 @@
},
"Grid.GmshPhysicalEntityThreshold": {
"explanation": [
""
"Boundary element index threshold"
]
},
"Grid.Grading0/1/2": {
......@@ -821,7 +880,7 @@
},
"Grid.MakeConsistentlyOriented": {
"explanation": [
""
"Whether to make sure that all element intersections follow the same local orientation and indexing no matter how the elements may be rotated or twisted."
]
},
"Grid.Marker": {
......@@ -1687,7 +1746,7 @@
],
"mode": "manual",
"type": [
"SmootherArgs::RelaxationFactor"
"double"
]
},
"LinearSolver.Preconditioner.AmgStrengthMeasure": {
......@@ -1776,7 +1835,7 @@
},
"LinearSolver.Preconditioner.Relaxation": {
"defaultValue": [
"1"
"1.0"
],
"explanation": [
"The relaxation parameter for the preconditioner"
......@@ -1884,6 +1943,9 @@
]
},
"MPFA.Q": {
"type": [
"CoordScalar = GridView::ctype"
],
"explanation": [
"The quadrature point parameterizaion to be used on scvfs"
]
......@@ -1893,7 +1955,7 @@
"1e-16"
],
"explanation": [
""
"The threshold for zero effective diffusion coefficient, used for epsilon computation"
],
"mode": "manual",
"type": [
......@@ -2041,11 +2103,17 @@
]
},
"Newton.ReassemblyMaxThreshold": {
"defaultValue": [
"1e2 * MaxRelativeShift"
],
"explanation": [
"'maxEps' in reassembly threshold max( minEps, min(maxEps, omega*(currently achieved maximum relative shift)) ). Increasing/decreasing 'maxEps' leads to less/more reassembly if 'omega*shift' is large, i.e., for the first Newton iterations."
]
},
"Newton.ReassemblyMinThreshold": {
"defaultValue": [
"1e-1 * MaxRelativeShift"
],
"explanation": [
"'minEps' in reassembly threshold max( minEps, min(maxEps, omega*(currently achieved maximum relative shift)) ). Increasing/decreasing 'minEps' leads to less/more reassembly if 'omega*shift' is small, i.e., for the last Newton iterations."
]
......@@ -2140,6 +2208,11 @@
"Set to true, if geometry consists of flat walls"
]
},
"RANS.SSTModelVersion": {
"explanation": [
"the model version of the SST model"
]
},
"RANS.TurbulentPrandtlNumber": {
"explanation": [
"The turbulent Prandtl number"
......@@ -2226,6 +2299,9 @@
]
},
"SpatialParams.Temperature": {
"defaultValue": [
"293.15"
],
"explanation": [
"The temperature"
]
......@@ -2246,6 +2322,9 @@
]
},
"Vtk.AddProcessRank": {
"defaultValue": [
"true"
],
"explanation": [
"Whether to add a process rank"
]
......@@ -2270,4 +2349,4 @@
"For the staggered grid approach, write face-related data into vtp files."
]
}
}
\ No newline at end of file
}
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment