Commit 2501aaa9 authored by Richard Angersbach's avatar Richard Angersbach
Browse files

Merge branch 'master' into devel/adapt_alloc

# Conflicts:
#	Compiler/src/exastencils/app/ir/IR_LayerHandler.scala
#	Compiler/src/exastencils/config/Knowledge.scala
parents 26a768cf d243c6d7
...@@ -12,9 +12,9 @@ stages: ...@@ -12,9 +12,9 @@ stages:
####################################### #######################################
.test_template: .test_template:
image: i10git.cs.fau.de:5005/exastencils/exastencils/ubuntu-20.04-openjdk-11
dependencies: dependencies:
- build:generator - build:generator
image: i10git.cs.fau.de:5005/exastencils/exastencils/ubuntu-20.04-openjdk-11
tags: tags:
- docker - docker
artifacts: artifacts:
...@@ -60,6 +60,26 @@ stages: ...@@ -60,6 +60,26 @@ stages:
- ln -s /usr/local/cuda-11.4/targets/x86_64-linux/lib/libcudart.so /usr/lib - ln -s /usr/local/cuda-11.4/targets/x86_64-linux/lib/libcudart.so /usr/lib
- cd Testing - cd Testing
.test_template_IO:
extends: .test_template
image: i10git.cs.fau.de:5005/exastencils/exastencils/ubuntu-20.04-openjdk-11-par-io
artifacts:
when: on_failure
paths:
- Testing/output/Debug/*
- Testing/output/generated/*
- Testing/data/*
expire_in: 1 weeks
before_script:
- java -version
- python3 --version
- mpirun --version
- sionversion
- h5pcc -showconfig
- pnetcdf-config --all
- cd Testing
.benchmark_template: .benchmark_template:
dependencies: dependencies:
- build:generator - build:generator
...@@ -84,7 +104,7 @@ stages: ...@@ -84,7 +104,7 @@ stages:
## ## ## ##
####################################### #######################################
generate-docker-image: generate-docker-image-base:
stage: .pre stage: .pre
when: manual when: manual
image: docker:latest image: docker:latest
...@@ -96,6 +116,18 @@ generate-docker-image: ...@@ -96,6 +116,18 @@ generate-docker-image:
- docker build --pull . -f dockerfiles/ubuntu-20.04-openjdk-11.Dockerfile -t i10git.cs.fau.de:5005/exastencils/exastencils/ubuntu-20.04-openjdk-11 - docker build --pull . -f dockerfiles/ubuntu-20.04-openjdk-11.Dockerfile -t i10git.cs.fau.de:5005/exastencils/exastencils/ubuntu-20.04-openjdk-11
- docker push i10git.cs.fau.de:5005/exastencils/exastencils/ubuntu-20.04-openjdk-11 - docker push i10git.cs.fau.de:5005/exastencils/exastencils/ubuntu-20.04-openjdk-11
generate-docker-image-pario:
stage: .pre
when: manual
image: docker:latest
tags:
- docker-docker
script:
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
- docker pull i10git.cs.fau.de:5005/exastencils/exastencils/ubuntu-20.04-openjdk-11-par-io || true
- docker build --pull . -f dockerfiles/ubuntu-20.04-openjdk-11-par-io.Dockerfile -t i10git.cs.fau.de:5005/exastencils/exastencils/ubuntu-20.04-openjdk-11-par-io
- docker push i10git.cs.fau.de:5005/exastencils/exastencils/ubuntu-20.04-openjdk-11-par-io
####################################### #######################################
## ## ## ##
## Generator ## ## Generator ##
...@@ -254,6 +286,46 @@ test:Appl_OptFlow3D: ...@@ -254,6 +286,46 @@ test:Appl_OptFlow3D:
script: script:
- python3 run_test.py ../Compiler/Compiler.jar:../Compiler/lib Appl_OptFlow3D Application/OpticalFlow3D.knowledge "Application/OpticalFlow3D.exa4" Application/OpticalFlow3D.results 1 10 Platform/random.platform output - python3 run_test.py ../Compiler/Compiler.jar:../Compiler/lib Appl_OptFlow3D Application/OpticalFlow3D.knowledge "Application/OpticalFlow3D.exa4" Application/OpticalFlow3D.results 1 10 Platform/random.platform output
###############################################
# (PARALLEL) I/O TESTS #
###############################################
test:ParIO_CheckEquality_2D:
extends: .test_template_IO
tags:
- docker
- AVX2
script:
# 2D_Scalar_CheckEquality_ReadAfterWrite
- mkdir -p data/2D_Scalar_CheckEquality_ReadAfterWrite
- python3 run_test.py ../Compiler/Compiler.jar:../Compiler/lib 2D_Scalar_CheckEquality_ReadAfterWrite IOTest/2D_Scalar_CheckEquality_ReadAfterWrite.knowledge "IOTest/2D_Scalar_CheckEquality_ReadAfterWrite.exa4" "" 2 1 Platform/anyavx2.platform output
# 2D_LayoutTrafo_CheckEquality_ReadAfterWrite
- mkdir -p data/2D_LayoutTrafo_CheckEquality_ReadAfterWrite
- python3 run_test.py ../Compiler/Compiler.jar:../Compiler/lib 2D_LayoutTrafo_CheckEquality_ReadAfterWrite IOTest/2D_LayoutTrafo_CheckEquality_ReadAfterWrite.knowledge "IOTest/2D_LayoutTrafo_CheckEquality_ReadAfterWrite.exa4" "" 2 1 Platform/anyavx2.platform output
# 2D_Vector_CheckEquality_ReadAfterWrite
- mkdir -p data/2D_Vector_CheckEquality_ReadAfterWrite
- python3 run_test.py ../Compiler/Compiler.jar:../Compiler/lib 2D_Vector_CheckEquality_ReadAfterWrite IOTest/2D_Vector_CheckEquality_ReadAfterWrite.knowledge "IOTest/2D_Vector_CheckEquality_ReadAfterWrite.exa4" "" 4 1 Platform/anyavx2.platform output
test:ParIO_CheckEquality_3D:
extends: .test_template_IO
tags:
- docker
- AVX2
script:
# 3D_Matrix_CheckEquality_ReadAfterWrite
- mkdir -p data/3D_Matrix_CheckEquality_ReadAfterWrite
- python3 run_test.py ../Compiler/Compiler.jar:../Compiler/lib 3D_Matrix_CheckEquality_ReadAfterWrite IOTest/3D_Matrix_CheckEquality_ReadAfterWrite.knowledge "IOTest/3D_Matrix_CheckEquality_ReadAfterWrite.exa4" "" 4 1 Platform/anyavx2.platform output
# 3D_Scalar_CheckEquality_ReadAfterWrite
- mkdir -p data/3D_Scalar_CheckEquality_ReadAfterWrite
- python3 run_test.py ../Compiler/Compiler.jar:../Compiler/lib 3D_Scalar_CheckEquality_ReadAfterWrite IOTest/3D_Scalar_CheckEquality_ReadAfterWrite.knowledge "IOTest/3D_Scalar_CheckEquality_ReadAfterWrite.exa4" "" 8 1 Platform/anyavx2.platform output
# 3D_Vector_CheckEquality_ReadAfterWrite
- mkdir -p data/3D_Vector_CheckEquality_ReadAfterWrite
- python3 run_test.py ../Compiler/Compiler.jar:../Compiler/lib 3D_Vector_CheckEquality_ReadAfterWrite IOTest/3D_Vector_CheckEquality_ReadAfterWrite.knowledge "IOTest/3D_Vector_CheckEquality_ReadAfterWrite.exa4" "" 4 1 Platform/anyavx2.platform output
# CheckEquality_ReadAfterWrite
- mkdir -p data/CheckEquality_ReadAfterWrite
- python3 run_test.py ../Compiler/Compiler.jar:../Compiler/lib CheckEquality_ReadAfterWrite IOTest/CheckEquality_ReadAfterWrite.knowledge "IOTest/CheckEquality_ReadAfterWrite.exa4" "" 8 1 Platform/anyavx2.platform output
############################################### ###############################################
# BASIC COMMUNICATION TESTS # # BASIC COMMUNICATION TESTS #
############################################### ###############################################
......
//============================================================================= //=============================================================================
// //
// This file is part of the ExaStencils code generation framework. ExaStencils // This file is part of the ExaStencils code generation framework. ExaStencils
// is free software: you can redistribute it and/or modify it under the terms // is free software: you can redistribute it and/or modify it under the terms
// of the GNU General Public License as published by the Free Software // of the GNU General Public License as published by the Free Software
// Foundation, either version 3 of the License, or (at your option) any later // Foundation, either version 3 of the License, or (at your option) any later
// version. // version.
// //
// ExaStencils is distributed in the hope that it will be useful, but WITHOUT // ExaStencils is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
// more details. // more details.
// //
// You should have received a copy of the GNU General Public License along // You should have received a copy of the GNU General Public License along
// with ExaStencils. If not, see <http://www.gnu.org/licenses/>. // with ExaStencils. If not, see <http://www.gnu.org/licenses/>.
// //
//============================================================================= //=============================================================================
package exastencils.app.l4 package exastencils.app.l4
import exastencils.app.LayerHandler import exastencils.app.LayerHandler
import exastencils.applications.l4.L4_AddDefaultApplication import exastencils.applications.l4.L4_AddDefaultApplication
import exastencils.base.ExaRootNode import exastencils.base.ExaRootNode
import exastencils.base.l4._ import exastencils.base.l4._
import exastencils.baseExt.l4._ import exastencils.baseExt.l4._
import exastencils.boundary.ir.L4_ResolveBoundaryHandlingFunctions import exastencils.boundary.ir.L4_ResolveBoundaryHandlingFunctions
import exastencils.communication.l4._ import exastencils.communication.l4._
import exastencils.config._ import exastencils.config._
import exastencils.datastructures.StrategyTimer import exastencils.datastructures.StrategyTimer
import exastencils.domain.l4.L4_DomainCollection import exastencils.domain.l4.L4_DomainCollection
import exastencils.field.ir.IR_AddPaddingToFieldLayouts import exastencils.field.ir.IR_AddPaddingToFieldLayouts
import exastencils.field.l4._ import exastencils.field.l4._
import exastencils.grid.l4._ import exastencils.grid.l4._
import exastencils.interfacing.l4.L4_ExternalFieldCollection import exastencils.interfacing.l4.L4_ExternalFieldCollection
import exastencils.knowledge.l4.L4_KnowledgeContainer._ import exastencils.knowledge.l4.L4_KnowledgeContainer._
import exastencils.knowledge.l4._ import exastencils.knowledge.l4._
import exastencils.layoutTransformation.l4.L4_AddSoAtoAoSTransformation import exastencils.layoutTransformation.l4.L4_AddSoAtoAoSTransformation
import exastencils.logger.Logger import exastencils.logger.Logger
import exastencils.operator.l4._ import exastencils.operator.l4._
import exastencils.optimization.l4.L4_GeneralSimplify import exastencils.optimization.l4.L4_GeneralSimplify
import exastencils.parsers.l4._ import exastencils.parsers.l4._
import exastencils.prettyprinting.Indenter import exastencils.prettyprinting.Indenter
import exastencils.solver.l4._ import exastencils.solver.l4._
import exastencils.timing.l4.L4_ResolveTimerFunctions import exastencils.timing.l4.L4_ResolveTimerFunctions
import exastencils.util.l4._ import exastencils.util.l4._
/// L4_LayerHandler /// L4_LayerHandler
trait L4_LayerHandler extends LayerHandler trait L4_LayerHandler extends LayerHandler
/// L4_DummyLayerHandler /// L4_DummyLayerHandler
object L4_DummyLayerHandler extends L4_LayerHandler { object L4_DummyLayerHandler extends L4_LayerHandler {
def initialize() : Unit = {} def initialize() : Unit = {}
def handle() : Unit = {} def handle() : Unit = {}
def print() : Unit = {} def print() : Unit = {}
def shutdown() : Unit = {} def shutdown() : Unit = {}
} }
/// L4_DefaultLayerHandler /// L4_DefaultLayerHandler
object L4_DefaultLayerHandler extends L4_LayerHandler { object L4_DefaultLayerHandler extends L4_LayerHandler {
override def initialize() : Unit = { override def initialize() : Unit = {
// activate default knowledge collections // activate default knowledge collections
L4_DomainCollection L4_DomainCollection
L4_FieldLayoutCollection L4_FieldLayoutCollection
L4_FieldCollection L4_FieldCollection
L4_StencilCollection L4_StencilCollection
L4_StencilFieldCollection L4_StencilFieldCollection
L4_VirtualFieldCollection L4_VirtualFieldCollection
L4_ExternalFieldCollection L4_ExternalFieldCollection
L4_EquationCollection L4_EquationCollection
L4_FieldCombinationCollection L4_FieldCombinationCollection
L4_PrepareAccesses.strategies += L4_PrepareMatrixAccesses L4_PrepareAccesses.strategies += L4_PrepareMatrixAccesses
} }
override def shutdown() : Unit = { override def shutdown() : Unit = {
L4_KnowledgeContainer.clear() L4_KnowledgeContainer.clear()
} }
override def print() : Unit = { override def print() : Unit = {
if (Settings.getDebugL4file.nonEmpty) { if (Settings.getDebugL4file.nonEmpty) {
val outFile = new java.io.FileWriter(Settings.getDebugL4file) val outFile = new java.io.FileWriter(Settings.getDebugL4file)
outFile.write(Indenter.addIndentations(ExaRootNode.l4_root.prettyprint())) outFile.write(Indenter.addIndentations(ExaRootNode.l4_root.prettyprint()))
outFile.close() outFile.close()
} }
} }
override def handle() : Unit = { override def handle() : Unit = {
if (Settings.timeStrategies) StrategyTimer.startTiming("Handling Layer 4") if (Settings.timeStrategies) StrategyTimer.startTiming("Handling Layer 4")
if (ExaRootNode.l4_root.nodes.nonEmpty) { if (ExaRootNode.l4_root.nodes.nonEmpty) {
L4_WrapFieldFieldConvolutions.apply() L4_WrapFieldFieldConvolutions.apply()
L4_AddLoopsToFieldAssignments.apply() L4_AddLoopsToFieldAssignments.apply()
L4_AddLoopsToLocalSolve.apply() L4_AddLoopsToLocalSolve.apply()
L4_AddCommunicationToLoops.apply() L4_AddCommunicationToLoops.apply()
L4_AdaptFieldLayoutsForComm.apply() L4_AdaptFieldLayoutsForComm.apply()
} }
//try { //try {
ExaRootNode.mergeL4(L4_Root(Settings.getL4file.map(L4_Parser.parseFile(_) : L4_Node))) ExaRootNode.mergeL4(L4_Root(Settings.getL4file.map(L4_Parser.parseFile(_) : L4_Node)))
//} catch { //} catch {
// case foo : Exception => Logger.error("first parse") // case foo : Exception => Logger.error("first parse")
//} //}
ExaRootNode.l4_root.flatten() ExaRootNode.l4_root.flatten()
if (true) { if (true) {
L4_UnresolveOperatorTimesField.apply() L4_UnresolveOperatorTimesField.apply()
L4_UnresolveFieldFieldConvolutions.apply() L4_UnresolveFieldFieldConvolutions.apply()
L4_UnresolveStencilAccesses.apply() L4_UnresolveStencilAccesses.apply()
L4_UnresolveStencilFieldAccesses.apply() L4_UnresolveStencilFieldAccesses.apply()
L4_UnresolveFieldAccesses.apply() L4_UnresolveFieldAccesses.apply()
// FIXME: transform back to declarations and re-fold // FIXME: transform back to declarations and re-fold
L4_ReplaceLevelsInFunctionDecls.apply() L4_ReplaceLevelsInFunctionDecls.apply()
L4_CombineLeveledFunctionDecls.apply() L4_CombineLeveledFunctionDecls.apply()
// L4_GenerateLeveledKnowledgeDecls.apply() // L4_GenerateLeveledKnowledgeDecls.apply()
} }
if (Knowledge.l4_genSoA2AoSTransformation) if (Knowledge.l4_genSoA2AoSTransformation)
L4_AddSoAtoAoSTransformation.apply() L4_AddSoAtoAoSTransformation.apply()
print() print()
val oldL4Code = ExaRootNode.l4_root.prettyprint() val oldL4Code = ExaRootNode.l4_root.prettyprint()
// re-parse the code to check for errors - also clear knowledge collections // re-parse the code to check for errors - also clear knowledge collections
L4_KnowledgeContainer.clear() L4_KnowledgeContainer.clear()
val l4FileName = if (Settings.getDebugL4file.nonEmpty) Settings.getDebugL4file else "debugLayer4" val l4FileName = if (Settings.getDebugL4file.nonEmpty) Settings.getDebugL4file else "debugLayer4"
try { try {
ExaRootNode.l4_root = L4_Parser.parse(oldL4Code, l4FileName) ExaRootNode.l4_root = L4_Parser.parse(oldL4Code, l4FileName)
} catch { } catch {
case foo : Exception => Logger.error("second parse") case foo : Exception => Logger.error("second parse")
} }
ExaRootNode.l4_root.flatten() ExaRootNode.l4_root.flatten()
if (ExaRootNode.l4_root.nodes.nonEmpty) { if (ExaRootNode.l4_root.nodes.nonEmpty) {
L4_ProcessInlineKnowledge.apply() L4_ProcessInlineKnowledge.apply()
if (Knowledge.l4_genDefaultApplication) if (Knowledge.l4_genDefaultApplication)
L4_AddDefaultApplication.apply() L4_AddDefaultApplication.apply()
L4_Validation.apply() L4_Validation.apply()
if (Settings.timeStrategies) StrategyTimer.stopTiming("Handling Layer 4") if (Settings.timeStrategies) StrategyTimer.stopTiming("Handling Layer 4")
L4_UnifyGlobalSections.apply() L4_UnifyGlobalSections.apply()
// go to IR // go to IR
L4_ResolveColorLoops.apply() L4_ResolveColorLoops.apply()
// pre-process level specifications in declarations // pre-process level specifications in declarations
L4_ResolveLevelSpecifications.apply() L4_ResolveLevelSpecifications.apply()
L4_ResolveFunctionInstantiations.apply() L4_ResolveFunctionInstantiations.apply()
L4_UnfoldFunctionDeclarations.apply() L4_UnfoldFunctionDeclarations.apply()
L4_ProcessFunctionDeclarations.apply() L4_ProcessFunctionDeclarations.apply()
L4_UnfoldKnowledgeDeclarations.apply() L4_UnfoldKnowledgeDeclarations.apply()
L4_UnfoldLeveledExpressionDeclarations.apply() L4_UnfoldLeveledExpressionDeclarations.apply()
L4_UnfoldLeveledVariableDeclarations.apply() L4_UnfoldLeveledVariableDeclarations.apply()
// resolve current, etc. // resolve current, etc.
L4_ResolveRelativeLevels.apply() L4_ResolveRelativeLevels.apply()
L4_ResolveLevelScopes.apply() L4_ResolveLevelScopes.apply()
L4_PrepareDeclarations.apply() L4_PrepareDeclarations.apply()
L4_InlineDeclaredExpressions.apply() L4_InlineDeclaredExpressions.apply()
L4_PrepareAccesses.apply() L4_PrepareAccesses.apply()
L4_ResolveVariableAccesses.apply() L4_ResolveVariableAccesses.apply()
L4_ResolveSpecialConstants.apply() L4_ResolveSpecialConstants.apply()
L4_ResolveFrozenFields.apply() L4_ResolveFrozenFields.apply()
L4_ResolveDslFunctionReferences.apply() L4_ResolveDslFunctionReferences.apply()
L4_ResolveEvaluateFunctions.apply() L4_ResolveEvaluateFunctions.apply()
L4_ResolveIntegrateFunctions.apply() L4_ResolveIntegrateFunctions.apply()
L4_ResolveMathFunctions.apply() L4_ResolveMathFunctions.apply()
L4_ResolveTimerFunctions.apply() L4_ResolveTimerFunctions.apply()
var matches = 0 var matches = 0
do { do {
matches = 0 matches = 0
matches += L4_ProcessDeclarations.applyAndCountMatches() matches += L4_ProcessDeclarations.applyAndCountMatches()
matches += L4_ResolveAccesses.applyAndCountMatches() matches += L4_ResolveAccesses.applyAndCountMatches()
if (Knowledge.experimental_l4_resolveVirtualFields) { if (Knowledge.experimental_l4_resolveVirtualFields) {
// integrate before evaluate -> might be nested // integrate before evaluate -> might be nested
L4_ResolveIntegrateOnGrid.apply() L4_ResolveIntegrateOnGrid.apply()
matches += (if (L4_ResolveIntegrateOnGrid.results.isEmpty) 0 else L4_ResolveIntegrateOnGrid.results.last._2.matches) matches += (if (L4_ResolveIntegrateOnGrid.results.isEmpty) 0 else L4_ResolveIntegrateOnGrid.results.last._2.matches)
L4_ResolveEvaluateOnGrid.apply() L4_ResolveEvaluateOnGrid.apply()
matches += (if (L4_ResolveEvaluateOnGrid.results.isEmpty) 0 else L4_ResolveEvaluateOnGrid.results.last._2.matches) matches += (if (L4_ResolveEvaluateOnGrid.results.isEmpty) 0 else L4_ResolveEvaluateOnGrid.results.last._2.matches)
} }
} while (matches > 0) } while (matches > 0)
if (ExaRootNode.l4_root.nodes.exists(_.isInstanceOf[L4_KnowledgeDecl])) { if (ExaRootNode.l4_root.nodes.exists(_.isInstanceOf[L4_KnowledgeDecl])) {
val filtered = ExaRootNode.l4_root.nodes.filter(_.isInstanceOf[L4_KnowledgeDecl]) val filtered = ExaRootNode.l4_root.nodes.filter(_.isInstanceOf[L4_KnowledgeDecl])
Logger.warn(s"L4 root has ${ filtered.length } unprocessed declaration nodes remaining:") Logger.warn(s"L4 root has ${ filtered.length } unprocessed declaration nodes remaining:")
filtered.foreach(Logger.warn(_)) filtered.foreach(Logger.warn(_))
} }
L4_ResolveVariableAccesses.apply() L4_ResolveVariableAccesses.apply()
L4_ResolveStencilFunctions.apply() L4_ResolveStencilFunctions.apply()
L4_ResolveLoopItAccesses.apply() L4_ResolveLoopItAccesses.apply()
L4_ResolveNativeFunctions.apply() L4_ResolveNativeFunctions.apply()
L4_ResolvePrintFunctions.apply() L4_ResolvePrintFunctions.apply()
L4_ResolveBuildStringFunctions.apply() L4_ResolveBuildStringFunctions.apply()
L4_ResolveKnowledgeParameterAccess.apply() L4_ResolveKnowledgeParameterAccess.apply()
L4_GeneralSimplify.doUntilDone() L4_GeneralSimplify.doUntilDone()
L4_ProcessKnowledgeDeclarations.apply() L4_ProcessKnowledgeDeclarations.apply()
if (Knowledge.l4_genSepLayoutsPerField) if (Knowledge.l4_genSepLayoutsPerField)
L4_DuplicateFieldLayoutsForFields.apply() L4_DuplicateFieldLayoutsForFields.apply()
// after L4_ResolveFieldAccesses // after L4_ResolveFieldAccesses
L4_ResolveReadFieldFunctions.apply() L4_ResolveReadFieldFunctions.apply()
L4_ResolvePrintFieldFunctions.apply() L4_ResolvePrintFieldFunctions.apply()
L4_ResolveWriteFieldFunctions.apply()
L4_ResolveBoundaryHandlingFunctions.apply()
L4_ResolveBoundaryHandlingFunctions.apply()
L4_ResolveStencilComponentAccesses.apply()
L4_ResolveStencilFieldComponentAccesses.apply() L4_ResolveStencilComponentAccesses.apply()
L4_ResolveStencilFieldComponentAccesses.apply()
//TODO Zeus: Complex Access
L4_ValidateComplexAccess.apply() //TODO Zeus: Complex Access
} L4_ValidateComplexAccess.apply()
}
if (Settings.timeStrategies) StrategyTimer.startTiming("Progressing from L4 to IR")
if (Settings.timeStrategies) StrategyTimer.startTiming("Progressing from L4 to IR")
// progress knowledge to IR
L4_KnowledgeContainer.progress() // progress knowledge to IR
L4_KnowledgeContainer.progress()
//L4_ProgressKnowledge.apply()
//L4_ProgressKnowledge.apply()
if (Knowledge.data_alignFieldPointers)
IR_AddPaddingToFieldLayouts.apply() if (Knowledge.data_alignFieldPointers)
IR_AddPaddingToFieldLayouts.apply()
ExaRootNode.progressToIR()
ExaRootNode.progressToIR()
if (Settings.timeStrategies) StrategyTimer.stopTiming("Progressing from L4 to IR")
} if (Settings.timeStrategies) StrategyTimer.stopTiming("Progressing from L4 to IR")
} }
}
package exastencils.applications.ns.ir
import scala.collection.mutable.ListBuffer
import exastencils.base.ir._
import exastencils.base.ir.IR_ImplicitConversion._
import exastencils.field.ir.IR_IV_ActiveSlot
import exastencils.io.ir.IR_DataBuffer
import exastencils.io.ir.IR_IV_FragmentInfo
import exastencils.visualization.ir.postprocessing.netCDF.IR_PrintExodus
/// IR_PrintExodusNNF
// 2D or 3D
// for a fixed number of fragments per block