Commit 6e7157ee authored by Adam Powell's avatar Adam Powell

Imported Upstream version 5.5.0.svn.4897.dfsg

parent 0d998314
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE edf>
<edf version="1.0" >
<PDE Name="Richards Equation" >
<Name>Richards Equation</Name>
<Solver>
<Parameter Widget="Edit" >
<Name > Procedure </Name>
<DefaultValue> "RichardsSolver" "RichardsSolver" </DefaultValue>
</Parameter>
<Parameter Widget="Edit" Enabled="False">
<Name> Variable </Name>
<DefaultValue> Total Head </DefaultValue>
</Parameter>
<Parameter Widget="CheckBox">
<Name> Saturated Initial Guess </Name>
<Whatis> If checked use fully saturated flow parameters for the first iteration. </Whatis>
</Parameter>
<Parameter Widget="Edit">
<Name> Active Coordinate </Name>
<Whatis> The depth coordinate aligned with the gravity vector. </Whatis>
</Parameter>
</Solver>
<InitialCondition>
<Parameter Widget="Label" > <Name> Variables </Name> </Parameter>
<Parameter Widget="Edit">
<Name> Total Head </Name>
</Parameter>
</InitialCondition>
<BodyForce>
<Parameter Widget="Label" > <Name> Source terms</Name> </Parameter>
<Parameter Widget="Edit">
<Name> Richards Source </Name>
<Whatis> Source term in the Richards equation. </Whatis>
</Parameter>
<Parameter Widget="Label" > <Name> Bodywise Dirichlet Conditions</Name> </Parameter>
<Parameter Widget="Edit">
<Name> Total Head </Name>
<Activate> /Richards Equation/BodyForce/Total Head Condition </Activate>
</Parameter>
<Parameter Widget="Edit" Enabled="False">
<Name> Total Head Condition </Name>
</Parameter>
</BodyForce>
<Material>
<Parameter Widget="Label" > <Name> Material properties </Name> </Parameter>
<Parameter Widget="Combo">
<Name>Porosity Model</Name>
<Type>String </Type>
<Whatis> The porosity models for the medium. </Whatis>
<Item> <Name> van Genuchten </Name>
<Activate> /Richards Equation/Material/Saturated Hydraulic Conductivity</Activate>
<Activate> /Richards Equation/Material/Saturated Water Content</Activate>
<Activate> /Richards Equation/Material/Residual Water Content</Activate>
<Activate> /Richards Equation/Material/van Genuchten Alpha</Activate>
<Activate> /Richards Equation/Material/van Genuchten N</Activate>
<Activate> /Richards Equation/Material/van Genuchten M</Activate>
</Item>
<Item> <Name> Default </Name>
<Activate> /Richards Equation/Material/Hydraulic Conductivity</Activate>
<Activate> /Richards Equation/Material/Water Content</Activate>
</Item>
<DefaultValue> Default </DefaultValue>
</Parameter>
<Parameter Widget="Edit" Enabled="False" Visible="False">
<Name> Saturated Hydraulic Conductivity </Name>
</Parameter>
<Parameter Widget="Edit" Enabled="False" Visible="False">
<Name> Saturated Water Content </Name>
</Parameter>
<Parameter Widget="Edit" Enabled="False" Visible="False">
<Name> Residual Water Content </Name>
</Parameter>
<Parameter Widget="Edit" Enabled="False" Visible="False">
<Name> van Genuchten Alpha </Name>
</Parameter>
<Parameter Widget="Edit" Enabled="False" Visible="False">
<Name> van Genuchten N </Name>
</Parameter>
<Parameter Widget="Edit" Enabled="False" Visible="False">
<Name> van Genuchten M </Name>
</Parameter>
<Parameter Widget="Edit" Enabled="False" Visible="False">
<Name> Hydraulic Conductivity </Name>
</Parameter>
<Parameter Widget="Edit" Enabled="False" Visible="False">
<Name> Water Content </Name>
</Parameter>
</Material>
<InitialCondition>
<Parameter Widget="Label" > <Name> Variables </Name> </Parameter>
<Parameter Widget="Edit">
<Name> Total Head </Name>
</Parameter>
</InitialCondition>
<BoundaryCondition>
<Parameter Widget="Label" > <Name> Boundary Conditions </Name> </Parameter>
<Parameter Widget="Edit">
<Name> Total Head </Name>
<Activate> /Richards Equation/BoundaryCondition/Total Head Condition </Activate>
</Parameter>
<Parameter Widget="Edit" Enabled="False">
<Name> Total Head Condition </Name>
<Whatis> Only apply Dirichlet conditions for total head if this expression obtains a positive value. </Whatis>
<StatusTip> Give Total head condition value for this boundary. </StatusTip>
</Parameter>
<Parameter Widget="Edit">
<Name> Richards Flux </Name>
</Parameter>
</BoundaryCondition>
</PDE>
</edf>
......@@ -1516,44 +1516,69 @@ void MainWindow::saveProjectSlot()
saveElmerMesh(projectDirName);
//===========================================================================
// SAVE GEOMETRY INPUT FILE
// SAVE GEOMETRY INPUT FILE(S)
//===========================================================================
progressBar->setValue(3);
QFileInfo geometryInputFileInfo(geometryInputFileName);
QString baseName = geometryInputFileInfo.baseName();
QString p_path = projectDirName;
QString g_path = geometryInputFileInfo.path();
#ifdef Q_OS_LINUX
QFileInfo fileInfo(geometryInputFileName);
QString pathName(fileInfo.absolutePath());
QString baseName(fileInfo.baseName());
// System copy command:
QString cmd("cp -f " + pathName + "/" + baseName + ".* "+ projectDirName);
if(system(cmd.toLatin1().data()))
logMessage("Geometry input file(s) not copied");
while(p_path.at(p_path.size()-1) == '/') p_path.chop(1);
while(p_path.at(p_path.size()-1) == '\\') p_path.chop(1);
while(g_path.at(g_path.size()-1) == '/') g_path.chop(1);
while(g_path.at(g_path.size()-1) == '\\') g_path.chop(1);
QDomElement geomInput(projectDoc.createElement("geometryinputfile"));
QDomText geomInputValue(projectDoc.createTextNode(fileInfo.fileName()));
geomInput.appendChild(geomInputValue);
contents.appendChild(geomInput);
#else
QFileInfo geometryInputFileInfo(geometryInputFileName);
QString baseName(geometryInputFileInfo.baseName());
QString srcPathName(geometryInputFileInfo.absolutePath());
QString dstPathName(QDir(projectDirName).absolutePath());
// Avoid copying file(s) into it self:
if( g_path != p_path ) {
QDirIterator iterator(geometryInputFileInfo.path());
while(iterator.hasNext()) {
QString fileName = iterator.next();
QFileInfo fileInfo(fileName);
if(fileInfo.baseName() == baseName) {
logMessage("Copying: " + fileName);
if( srcPathName != dstPathName ) {
QDirIterator srcDirIterator(srcPathName);
while(srcDirIterator.hasNext()) {
QString srcFileName(srcDirIterator.next());
QFileInfo srcFileInfo(srcDirIterator.fileInfo());
if(srcFileInfo.baseName() == baseName) {
logMessage("Copying: " + srcFileName);
QFile src(srcFileName);
if(!src.open(QFile::ReadOnly)) {
logMessage("Unable to read: " + src.fileName());
continue;
}
QFile dst(dstPathName + "/" + srcFileInfo.fileName());
if(!dst.open(QFile::WriteOnly)) {
logMessage("Unable to write: " + dst.fileName());
src.close();
continue;
}
QFile src(fileName);
src.open(QIODevice::ReadOnly);
QTextStream srcStream(&src);
QFile dst(fileInfo.fileName());
dst.open(QIODevice::WriteOnly);
QTextStream dstStream(&dst);
dstStream << srcStream.readAll();
dst.close();
src.close();
}
}
} else {
logMessage("Geometry input file(s) not copied");
}
......@@ -1562,6 +1587,7 @@ void MainWindow::saveProjectSlot()
QDomText geomInputValue = projectDoc.createTextNode(geometryInputFileInfo.fileName());
geomInput.appendChild(geomInputValue);
contents.appendChild(geomInput);
#endif
//===========================================================================
// SAVE OPERATIONS
......
#==============================================================================
#
# ElmerGUI: configuration file
#
#==============================================================================
#------------------------------------------------------------------------------
# Optional components (undefine or comment out to exclude from compilation):
#------------------------------------------------------------------------------
DEFINES += EG_QWT # Use QWT for convergence monitor?
DEFINES += EG_VTK # Use VTK for postprocessing?
DEFINES += EG_MATC # Use MATC for internal operations in postprocessing?
DEFINES += EG_OCC # Use OpenCASCADE 6.3 for importing CAD files? Needs VTK.
DEFINES -= EG_PYTHONQT # Use PythonQt for scripting in post processor?
#------------------------------------------------------------------------------
# 64 bit system?
#------------------------------------------------------------------------------
BITS = 32
#------------------------------------------------------------------------------
# Installation directory:
#------------------------------------------------------------------------------
ELMERGUI_HOME = $$(ELMERGUI_HOME)
isEmpty(ELMERGUI_HOME) {
ELMER_HOME = $$(ELMER_HOME)
isEmpty(ELMER_HOME) {
unix: ELMER_HOME = /usr/local
win32: ELMER_HOME = c:\Elmer5.4
macx: ELMER_HOME = /usr/local
}
ELMERGUI_HOME = $${ELMER_HOME}/bin
}
#------------------------------------------------------------------------------
# Python library:
#------------------------------------------------------------------------------
unix {
PY_INCLUDEPATH = /usr/include/python2.5
PY_LIBPATH = /usr/lib
PY_LIBS = -lpython2.5
}
win32 {
PY_INCLUDEPATH = c:\PYTHON\Python-2.6.1\Include
PY_LIBPATH = c:\PYTHON\Python-2.6.1\PCbuild
PY_LIBS = -lpython26
}
macx {
}
#------------------------------------------------------------------------------
# QWT library:
#------------------------------------------------------------------------------
unix {
QWT_INCLUDEPATH = /usr/include/qwt-qt4
QWT_LIBPATH = /usr/lib
QWT_LIBS = -lqwt-qt4
}
win32 {
QWT_INCLUDEPATH = c:\Source\Qwt\include
QWT_LIBPATH = c:\Source\Qwt\lib
QWT_LIBS = -lqwt5
}
macx {
QWT_INCLUDEPATH = /usr/local/qwt-5.0.2/include
QWT_LIBPATH = /usr/local/qwt-5.0.2/lib
QWT_LIBS = -lqwt5
}
#------------------------------------------------------------------------------
# VTK library:
#------------------------------------------------------------------------------
unix {
VTK_INCLUDEPATH = /usr/include/vtk-5.2
VTK_LIBPATH = /usr/lib
VTK_LIBS = -lvtkHybrid \
-lvtkWidgets \
-lQVTK
}
win32 {
VTK_INCLUDEPATH = c:\Source\VTK\include\vtk-5.4
VTK_LIBPATH = c:\Source\VTK\lib\vtk-5.4
VTK_LIBS = -lQVTK \
-lvtkCommon \
-lvtkDICOMParser \
-lvtkFiltering \
-lvtkGenericFiltering \
-lvtkGraphics \
-lvtkHybrid \
-lvtkIO \
-lvtkImaging \
-lvtkInfovis \
-lvtkNetCDF \
-lvtkRendering \
-lvtkViews \
-lvtkVolumeRendering \
-lvtkWidgets \
-lvtkexoIIc \
-lvtkexpat \
-lvtkfreetype \
-lvtkftgl \
-lvtkjpeg \
-lvtklibxml2 \
-lvtkmetaio \
-lvtkpng \
-lvtksys \
-lvtktiff \
-lvtkverdict \
-lvtkzlib \
-ladvapi32
}
macx {
VTK_INCLUDEPATH = /usr/local/include/vtk-5.0
VTK_LIBPATH = /usr/lib
VTK_LIBS = -lvtkHybrid \
-lvtkWidgets \
-lQVTK
}
#------------------------------------------------------------------------------
# OpenCASCADE library:
#------------------------------------------------------------------------------
unix {
OCC_INCLUDEPATH = /usr/include/opencascade
OCC_LIBPATH = /usr/lib
OCC_LIBS = -lTKBRep -lTKSTL -lTKSTEP -lTKIGES
}
win32 {
OCC_INCLUDEPATH = $(CASROOT)/inc
OCC_LIBPATH = $(CASROOT)/win32/lib
OCC_LIBS = $(CASROOT)/win32/lib/TKBRep.lib \
$(CASROOT)/win32/lib/TKernel.lib \
$(CASROOT)/win32/lib/TKG2d.lib \
$(CASROOT)/win32/lib/TKG3d.lib \
$(CASROOT)/win32/lib/TKGeomAlgo.lib \
$(CASROOT)/win32/lib/TKGeomBase.lib \
$(CASROOT)/win32/lib/TKMath.lib \
$(CASROOT)/win32/lib/TKMesh.lib \
$(CASROOT)/win32/lib/TKShHealing.lib \
$(CASROOT)/win32/lib/TKSTEP.lib \
$(CASROOT)/win32/lib/TKSTEP209.lib \
$(CASROOT)/win32/lib/TKSTEPAttr.lib \
$(CASROOT)/win32/lib/TKSTEPBase.lib \
$(CASROOT)/win32/lib/TKIGES.lib \
$(CASROOT)/win32/lib/TKTopAlgo.lib \
$(CASROOT)/win32/lib/TKXSBase.lib
}
macx {
OCC_INCLUDEPATH =
OCC_LIBPATH =
OCC_LIBS =
}
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -128,7 +128,6 @@ SUBROUTINE StatElecForce( Model,Solver,dt,TransientSimulation )
END IF
END IF
Var => VariableGet( Mesh % Variables, 'Electric Force Density' )
IF(.NOT. ASSOCIATED(Var) ) THEN
n = SIZE( Potential )
......@@ -143,7 +142,6 @@ SUBROUTINE StatElecForce( Model,Solver,dt,TransientSimulation )
END IF
ForceDensity => Var % Values
ALLOCATE( ElementNodes % x( Mesh % MaxElementNodes ) )
ALLOCATE( ElementNodes % y( Mesh % MaxElementNodes ) )
ALLOCATE( ElementNodes % z( Mesh % MaxElementNodes ) )
......@@ -319,23 +317,23 @@ SUBROUTINE StatElecForce( Model,Solver,dt,TransientSimulation )
DO j = 1, Dim
ForceDensity(Dim*(i-1)+j) = ForceDensity(Dim*i-Dim+j) / Visited(i)
END DO
ELSE
DO j = 1, Dim
ForceDensity(Dim*(i-1)+j) = 0.0d0
END DO
END IF
END DO
!------------------------------------------------------------------------------
CALL Info( 'StatElecForce', ' ', Level=4 )
WRITE( Message, '("Net electric force : ", 3ES15.6E2 )' ) Force
IF(dim == 2 ) THEN
WRITE( Message, '("Net electric force : ", 3ES15.6E2 )' ) Force(1:2)
ELSE
WRITE( Message, '("Net electric force : ", 3ES15.6E2 )' ) Force
END IF
CALL Info( 'StatElecForce', Message, Level=4 )
sf = SQRT(SUM( Force**2 ) )
WRITE( Message, '("Resultant force : ", ES15.6 )' ) sf
CALL Info( 'StatElecForce', Message, Level=4 )
IF(CalculateMoment) THEN
CALL ListAddConstReal( Model % Simulation, &
'res: Electric Moment 3', Moment(3) )
......@@ -352,7 +350,6 @@ SUBROUTINE StatElecForce( Model,Solver,dt,TransientSimulation )
CALL ListAddConstReal( Model % Simulation, &
'res: Electric Force 1', Force(1) )
DEALLOCATE( ElementNodes % x )
DEALLOCATE( ElementNodes % y )
DEALLOCATE( ElementNodes % z )
......@@ -364,7 +361,7 @@ SUBROUTINE StatElecForce( Model,Solver,dt,TransientSimulation )
DEALLOCATE( LocalPotential )
DEALLOCATE( Permittivity )
DEALLOCATE( Visited )
Var => VariableGet( Mesh % Variables, 'Electric Force Density' ,ThisOnly=.TRUE. )
Var % PrimaryMesh => Mesh
CALL InvalidateVariable( Model % Meshes, Mesh, 'Electric Force Density' )
......
......@@ -1031,6 +1031,14 @@ END FUNCTION ComponentNameVar
n = SIZE(TValues)
! This is a misuse of the interpolation in case of standard dependency
! of type y=a*x.
IF( n == 1 ) THEN
F = FValues(1) * T
RETURN
END IF
DO i=1,n
IF ( TValues(i) >= T ) EXIT
END DO
......
......@@ -1333,7 +1333,6 @@ PRINT *,'adding derivative'
DO i=1,nSolvers
Solver => Model % Solvers(i)
IF ( Solver % Procedure==0 ) CYCLE
Solver % Variable % PrevNorm = Solver % Variable % Norm
RungeKutta = .FALSE.
IF ( TransientSimulation .AND. Solver % TimeOrder == 1 ) THEN
......@@ -1519,7 +1518,7 @@ CONTAINS
IF ( ASSOCIATED(Solver % Variable) ) THEN
IF ( ASSOCIATED(Solver % Variable % Values) ) &
n = SIZE(Solver % Variable % Values)
! Solver % Variable % PrevNorm = Solver % Variable % Norm
Solver % Variable % PrevNorm = Solver % Variable % Norm
END IF
! There are some operations that require that the previous steady state values
......
......@@ -1301,16 +1301,38 @@ CONTAINS
Depname = ' '
Depname(1:k-7) = str(str_beg:k)
n = 2
n = 1
IF ( n > SIZE( ATt ) ) THEN
DEALLOCATE( ATt, ATx )
ALLOCATE( ATt(2), ATx(1,1,2) )
ALLOCATE( ATt(n), ATx(1,1,n) )
END IF
ATt(1) = 0
ATt(2) = 1
ATx(1,1,1) = 0
ATx(1,1,2) = 1
ATt(1) = 1.0_dp
ATx(1,1,1) = 1.0_dp
CALL ListAddDepReal(List,Name,Depname,n,ATt(1:n),ATx(1,1,1:n))
END IF
EXIT
CASE('opposes')
IF ( .NOT. ScanOnly ) THEN
DO k=MAX_NAME_LEN,1,-1
IF ( str(k:k) /= ' ' ) EXIT
END DO
Depname = ' '
Depname(1:k-7) = str(str_beg:k)
n = 1
IF ( n > SIZE( ATt ) ) THEN
DEALLOCATE( ATt, ATx )
ALLOCATE( ATt(n), ATx(1,1,n) )
END IF
ATt(1) = 1.0_dp
ATx(1,1,1) = -1.0_dp
CALL ListAddDepReal(List,Name,Depname,n,ATt(1:n),ATx(1,1,1:n))
END IF
EXIT
......
......@@ -82,7 +82,7 @@
REAL (KIND=dp) :: SimulationTime,dt,MinFactor,MaxOmittedFactor, ConsideredSum
REAL (KIND=dp) :: s,Norm,PrevNorm,Emissivity,maxds,refds,ds,x,y,z,&
dx,dy,dz,x0(2),y0(2),MeshU(TSolver % Mesh % MaxElementNodes)
dx,dy,dz,x0(1),y0(1),MeshU(TSolver % Mesh % MaxElementNodes)
REAL (KIND=dp), POINTER :: Vals(:)
REAL (KIND=dp), ALLOCATABLE :: SOL(:), RHS(:), Fac(:)
REAL (KIND=dp) :: MinSum, MaxSum, SolSum, PrevSelf, FactorSum, &
......@@ -183,10 +183,8 @@
ConstantEmissivity = FirstTime .AND. ( UpdateGebhardtFactors .OR. UpdateViewFactors )
IF(GeometryFixedAfter == TimesVisited) THEN
x0(1) = 0.0
x0(2) = 1.0
y0(1) = 0.0
y0(2) = 1.0
x0(1) = 1.0
y0(1) = 1.0
END IF
FullMatrix = ListGetLogical( TSolver % Values, &
......@@ -235,14 +233,14 @@
WRITE (Message,'(A,I3)') 'Freezing Mesh Update 1 for bc',i
CALL Info('RadiationFactors',Message)
CALL ListAddDepReal( Model % BCs(i) % Values,'Mesh Update 1', &
'Mesh Update 1',2, x0, y0 )
'Mesh Update 1',1, x0, y0 )
END IF
MeshU(1:n) = ListGetReal(Model % BCs(i) % Values,'Mesh Update 2',n,NodeIndexes,GotIt)
IF(.NOT. GotIt) THEN
WRITE (Message,'(A,I3)') 'Freezing Mesh Update 2 for bc',i
CALL Info('RadiationFactors',Message)
CALL ListAddDepReal( Model % BCs(i) % Values,'Mesh Update 2', &
'Mesh Update 2',2, x0, y0 )
'Mesh Update 2',1, x0, y0 )
END IF
END IF
END IF
......
This diff is collapsed.
......@@ -1063,3 +1063,55 @@ Solver:Integer: 'BoomerAMG Max Levels'
Solver:Integer: 'BoomerAMG Interpolation'
Solver:Integer: 'BoomerAMG Smooth Type'
Solver:Integer: 'BoomerAMG Cycle Type'
!
! keywords for RichardsSolver
Material:String: 'Porosity Model'
Material:Real: 'Hydraulic Conductivity'
! default model
Material:Real: 'Water Content',
Material:Real: 'Saturated Hydraulic Conductivity'
! van genuchten model
Material:Real: 'van Genuchten Alpha'
Material:Real: 'van Genuchten N'
Material:Real: 'van Genuchten M'
Material:Real: 'Residual Water Content'
Material:Real: 'Saturated Water Content'
Solver:Integer: 'Active Coordinate'
Solver:Logical: 'Saturated Initial Guess'
BodyForce:Real: 'Richards Source'
BC:Real: 'Richards Flux'
BC:Real: 'Total Head'
!
! keywords for ReynoldsSolver
Solver:Logical: 'Cavitation'
Solver:Real: 'Cavitation Pressure'
BC:Real: 'FilmPressure'
BC:Real: 'FilmPressure Condition'
BodyForce:Real: 'FilmPressure'
BodyForce:Real: 'FilmPressure Condition'
IC:Real: 'FilmPressure'
IC:Real: 'FilmPressure Loads'
Material:Real: 'Surface Velocity 1'
Material:Real: 'Surface Velocity 2'
Material:Real: 'Surface Velocity 3'
Material:Real: 'Normal Velocity'
Material:Real: 'Tangent Velocity 1'
Material:Real: 'Tangent Velocity 2'
Material:Real: 'Tangent Velocity 3'
Material:Real: 'Gap Height'
Material:Real: 'Flow Admittance'
Material:Real: 'Bulk Modulus'
Material:Real: 'Mean free path'
Equation:Real: 'Surface Velocity 1'
Equation:Real: 'Surface Velocity 2'
Equation:Real: 'Surface Velocity 3'
Equation:Real: 'Normal Velocity'
Equation:Real: 'Tangent Velocity 1'
Equation:Real: 'Tangent Velocity 2'
Equation:Real: 'Tangent Velocity 3'
! ReynoldsPostprocess
Solver:Logical: 'Calculate Heating'
Solver:Logical: 'Calculate Force'
Solver:Logical: 'Calculate Flux'
......@@ -130,7 +130,7 @@ CONTAINS
IF ( Solver % Variable % DOFs <= 1 ) RETURN
NormalTangentialName = 'Normal-Tangential'
IF ( Solver % Variable % Name == 'flow solution' ) THEN
IF ( Solver % Variable % Name(1:13) == 'flow solution' ) THEN
NormalTangentialName = TRIM(NormalTangentialName) // ' Velocity'
ELSE
NormalTangentialName = TRIM(NormalTangentialName) // ' ' // &
......
This diff is collapsed.
# A poisson equation solver using the coupled system routines
#
run:
$(F90) -c PoissonAssembly.f90
$(LD) -o PoissonAssembly$(SHL_EXT) PoissonAssembly$(OBJ_EXT) $(LIBS)
$(ELMER_GRID) 1 2 angle
$(ELMER_SOLVER)
clean:
/bin/rm test.log temp.log mon.out PoissonAssembly$(SHL_EXT) PoissonAssembly$(OBJ_EXT) so_locations
/bin/rm -r angle
This diff is collapsed.
##### ElmerGrid input file for structured grid generation ######
Version = 210903
Coordinate System = Cartesian 2D
Subcell Divisions in 2D = 2 2
Subcell Limits 1 = 0 1 2
Subcell Limits 2 = 0 1 2
Material Structure in 2D
0 2
1 1
End
Materials Interval = 1 2
Boundary Definitions
# type out int
1 0 1 1
2 0 2 1
3 2 1 1
End
Numbering = Horizontal
Element Degree = 1
Element Innernodes = False