From 06654d52ff4b96b6419f440bcb4ac0f4c6de1c27 Mon Sep 17 00:00:00 2001 From: "Documenter.jl" Date: Thu, 11 Apr 2024 05:31:51 +0000 Subject: [PATCH] build based on c675cf2 --- dev/.documenter-siteinfo.json | 2 +- dev/Cantera/index.html | 2 +- dev/Cantera/samples/index.html | 2 +- dev/DryFlowsheet/index.html | 2 +- dev/DryGranular/index.html | 8 ++++---- dev/DryGranular/kramers/index.html | 2 +- dev/DryMaterials/index.html | 2 +- dev/OpenFOAM/index.html | 4 ++-- dev/RadCalNet/index.html | 10 +++++----- dev/References/@Aissa2015a/index.html | 2 +- dev/References/@Antonelo2021a/index.html | 2 +- dev/References/@Arthurs2021a/index.html | 2 +- dev/References/@Balaji2014/index.html | 2 +- dev/References/@Cai2021a/index.html | 2 +- dev/References/@Cuomo2022a/index.html | 2 +- dev/References/@Fang2023a/index.html | 2 +- dev/References/@Garaniya2012a/index.html | 2 +- dev/References/@Garaniya2012b/index.html | 2 +- dev/References/@Gidaspow1994/index.html | 2 +- dev/References/@Guo2023a/index.html | 2 +- dev/References/@Guo2023b/index.html | 2 +- dev/References/@Guo2023c/index.html | 2 +- dev/References/@Guo2023d/index.html | 2 +- dev/References/@Guo2023e/index.html | 2 +- dev/References/@Guo2023f/index.html | 2 +- dev/References/@Guo2023g/index.html | 2 +- dev/References/@Guo2024a/index.html | 2 +- .../@Haghighat2021sciann/index.html | 2 +- dev/References/@Haider1989/index.html | 2 +- dev/References/@Haitsiukevich2022a/index.html | 2 +- dev/References/@Jeong1995a/index.html | 2 +- dev/References/@Karniadakis2021a/index.html | 2 +- dev/References/@Krishnapriyan2021a/index.html | 2 +- dev/References/@Lagaris1997a/index.html | 2 +- dev/References/@Launder1974/index.html | 2 +- dev/References/@Liu1993/index.html | 2 +- dev/References/@Lu2019a/index.html | 2 +- dev/References/@Lu2021a/index.html | 2 +- dev/References/@Nabian2021a/index.html | 2 +- dev/References/@Nowruzi2014/index.html | 2 +- dev/References/@ORourke2010/index.html | 2 +- dev/References/@Pena2001a/index.html | 2 +- dev/References/@Plessis1988/index.html | 2 +- dev/References/@Raissi2017/index.html | 2 +- dev/References/@Ranz1952/index.html | 2 +- dev/References/@Saario2005a/index.html | 2 +- dev/References/@Sanchez2023a/index.html | 2 +- dev/References/@Sanyal2022a/index.html | 2 +- dev/References/@Sweldens1998a/index.html | 2 +- .../@Tensorflow2015Whitepaper/index.html | 2 +- dev/References/@Wang2022a/index.html | 2 +- dev/References/@Wang2023a/index.html | 2 +- dev/References/@Wu2022a/index.html | 2 +- dev/References/@Wurth2023a/index.html | 2 +- dev/References/@Yu2022a/index.html | 2 +- dev/References/@Zuo2000a/index.html | 2 +- dev/References/index.html | 2 +- dev/Teaching/Ansys Fluent/UDF/index.html | 2 +- dev/Teaching/Basilisk/Basilisk/index.html | 2 +- .../Basilisk/Documentation/index.html | 2 +- dev/Teaching/Basilisk/Draft/index.html | 2 +- dev/Teaching/Basilisk/Tutorials/index.html | 2 +- .../Machine Learning/Data-Driven/index.html | 2 +- .../Machine Learning/PINNs/index.html | 2 +- dev/Teaching/Machine Learning/index.html | 2 +- .../Cases/aachenBombSteady/index.html | 2 +- .../OpenFOAM/Cases/horizontalMixer/index.html | 2 +- .../Cases/injectionChannel/index.html | 2 +- .../Cases/sedimentationBox/index.html | 2 +- .../OpenFOAM.org/Physical-Models/index.html | 2 +- .../OpenFOAM.org/Solver-Modules/index.html | 2 +- dev/Teaching/OpenFOAM/index.html | 2 +- .../index.html | 4 ++++ dev/Teaching/Transport Phenomena/index.html | 2 +- dev/Teaching/index.html | 2 +- dev/helpers/index.html | 18 +++++++++--------- dev/index.html | 2 +- dev/objects.inv | Bin 5155 -> 5204 bytes dev/search_index.js | 2 +- dev/toc/index.html | 2 +- 80 files changed, 98 insertions(+), 94 deletions(-) create mode 100644 dev/Teaching/Transport Phenomena/Analysis of Transport Phenomena/index.html diff --git a/dev/.documenter-siteinfo.json b/dev/.documenter-siteinfo.json index 31a05778c..3f6609b92 100644 --- a/dev/.documenter-siteinfo.json +++ b/dev/.documenter-siteinfo.json @@ -1 +1 @@ -{"documenter":{"julia_version":"1.10.2","generation_timestamp":"2024-04-07T13:42:15","documenter_version":"1.3.0"}} \ No newline at end of file +{"documenter":{"julia_version":"1.10.2","generation_timestamp":"2024-04-11T05:31:46","documenter_version":"1.3.0"}} \ No newline at end of file diff --git a/dev/Cantera/index.html b/dev/Cantera/index.html index 7b76dbf2e..9d4158791 100644 --- a/dev/Cantera/index.html +++ b/dev/Cantera/index.html @@ -1,2 +1,2 @@ -Cantera · WallyToolbox.jl

Cantera

This page documents the wrapper written around the C-API of Cantera. The status of development is documented here. Its goal is not to mimic the original API or provide an interface equivalent to the Python package, but something in line with the functioning of the parent toolbox.

Status of Cantera wrapper

This is an experimental interface to Cantera library based on its C-API version 3.0. This interface is at its early days and has developped for Julia >= 1.9.0 under Windows 10/11. When it is stable enough it will be published as a package and tested under other platforms.

API of ct.h

Documentation here.

StatusHeaderFunctionModule
Testedct.hct_appdeleteinlined
Structct.hsoln_newSolutionwrapped
ct.hsoln_newInterfacewaitlist
Testedct.hsoln_delinlined
Testedct.hsoln_nameinlined
Structct.hsoln_thermoinlined
Structct.hsoln_kineticsinlined
Structct.hsoln_transportinlined
Testedct.hsoln_setTransportModelwrapped
Testedct.hsoln_nAdjacentinlined
ct.hsoln_adjacentwaitlist
Testedct.hthermo_newFromFilewrapped
Testedct.hthermo_delinlined
Structct.hthermo_nElementsinlined
Structct.hthermo_nSpeciesinlined
Testedct.hthermo_temperatureinlined
Structct.hthermo_setTemperatureinlined
Testedct.hthermo_densityinlined
Testedct.hthermo_setDensityinlined
Testedct.hthermo_molarDensityinlined
Testedct.hthermo_setMolarDensityinlined
Testedct.hthermo_meanMolecularWeightinlined
Testedct.hthermo_moleFractioninlined
Testedct.hthermo_massFractioninlined
Structct.hthermo_getMoleFractionsinlined
Testedct.hthermo_getMassFractionsinlined
Structct.hthermo_setMoleFractionsinlined
Testedct.hthermo_setMassFractionsinlined
ct.hthermo_setMoleFractionsByName
ct.hthermo_setMassFractionsByName
ct.hthermo_getAtomicWeights
ct.hthermo_getMolecularWeights
ct.hthermo_getCharges
ct.hthermo_getElementName
ct.hthermo_getSpeciesName
ct.hthermo_getName
ct.hthermo_setName
ct.hthermo_elementIndex
ct.hthermo_speciesIndex
ct.hthermo_report
Testedct.hthermo_print
ct.hthermo_nAtoms
ct.hthermo_addElement
ct.hthermo_getEosType
To testct.hthermo_refPressureinlined
To testct.hthermo_minTempinlined
To testct.hthermo_maxTempinlined
To testct.hthermoenthalpymoleinlined
To testct.hthermointEnergymoleinlined
To testct.hthermoentropymoleinlined
To testct.hthermogibbsmoleinlined
To testct.hthermocpmoleinlined
To testct.hthermocvmoleinlined
To testct.hthermo_pressureinlined
Structct.hthermo_setPressureinlined
To testct.hthermoenthalpymassinlined
To testct.hthermointEnergymassinlined
To testct.hthermoentropymassinlined
To testct.hthermogibbsmassinlined
To testct.hthermocpmassinlined
To testct.hthermocvmassinlined
To testct.hthermo_electricPotentialinlined
To testct.hthermo_thermalExpansionCoeffinlined
To testct.hthermo_isothermalCompressibilityinlined
ct.hthermo_chemPotentials
ct.hthermogetEnthalpiesRT
ct.hthermogetEntropiesR
ct.hthermogetCpR
ct.hthermo_setElectricPotential
ct.hthermosetTP
ct.hthermosetTD
ct.hthermosetRP
ct.hthermosetDP
ct.hthermosetHP
ct.hthermosetUV
ct.hthermosetSV
ct.hthermosetSP
ct.hthermosetST
ct.hthermosetTV
ct.hthermosetPV
ct.hthermosetUP
ct.hthermosetVH
ct.hthermosetTH
ct.hthermosetSH
Testedct.hthermo_equilibrate
To testct.hthermo_critTemperatureinlined
To testct.hthermo_critPressureinlined
To testct.hthermo_critDensityinlined
To testct.hthermo_vaporFractioninlined
ct.hthermo_satTemperature
ct.hthermo_satPressure
ct.hthermosetStatePsat
ct.hthermosetStateTsat
ct.hkin_newFromFile
To testct.hkin_delinlined
To testct.hkin_nSpeciesinlined
To testct.hkin_nReactionsinlined
To testct.hkin_nPhasesinlined
ct.hkin_phaseIndex
To testct.hkin_reactionPhaseIndexinlined
ct.hkin_reactantStoichCoeff
ct.hkin_productStoichCoeff
ct.hkin_getReactionType
ct.hkin_getFwdRatesOfProgress
ct.hkin_getRevRatesOfProgress
ct.hkin_getNetRatesOfProgress
ct.hkin_getEquilibriumConstants
ct.hkin_getFwdRateConstants
ct.hkin_getRevRateConstants
ct.hkin_getDelta
ct.hkin_getCreationRates
ct.hkin_getDestructionRates
ct.hkin_getNetProductionRates
ct.hkin_getSourceTerms
To testct.hkin_multiplierinlined
ct.hkin_getReactionString
ct.hkin_setMultiplier
To testct.hkin_isReversibleinlined
ct.hkin_getType
To testct.hkin_startinlined
ct.hkin_speciesIndex
To testct.hkin_advanceCoveragesinlined
To testct.hkin_phaseinlined
To testct.htrans_newDefaultinlined
ct.htrans_new
To testct.htrans_delinlined
To testct.htrans_transportModelinlined
To testct.htrans_viscosityinlined
To testct.htrans_electricalConductivityinlined
ct.htrans_thermalConductivity
ct.htrans_getThermalDiffCoeffs
ct.htrans_getMixDiffCoeffs
ct.htrans_getBinDiffCoeffs
ct.htrans_getMultiDiffCoeffs
ct.htrans_setParameters
ct.htrans_getMolarFluxes
ct.htrans_getMassFluxes
ct.hct_getCanteraError
ct.hct_setLogWriter
ct.hct_setLogCallback
ct.hct_addCanteraDirectory
ct.hct_getDataDirectories
ct.hct_getCanteraVersion
ct.hct_getGitCommit
Testedct.hctsuppressthermo_warningsinlined
Testedct.hctuselegacyrateconstantsinlined
Testedct.hct_clearStorageinlined
Testedct.hct_resetStorageinlined

API of ctfunc.h

Documentation here.

StatusHeaderFunctionModule
ctfunc.hfunc_new
ctfunc.hfuncnewbasic
ctfunc.hfuncnewadvanced
ctfunc.hfuncnewcompound
ctfunc.hfuncnewmodified
To testctfunc.hfunc_delinlined
ctfunc.hfunc_type
To testctfunc.hfunc_valueinlined
To testctfunc.hfunc_derivativeinlined
To testctfunc.hfunc_duplicateinlined
ctfunc.hfunc_write
To testctfunc.hct_clearFuncinlined

API of ctmultiphase.h

Documentation here.

StatusHeaderFunctionModule
To testctmultiphase.hmix_newinlined
To testctmultiphase.hmix_delinlined
To testctmultiphase.hct_clearMixinlined
ctmultiphase.hmix_addPhase
To testctmultiphase.hmix_initinlined
To testctmultiphase.hmix_updatePhasesinlined
To testctmultiphase.hmix_nElementsinlined
ctmultiphase.hmix_elementIndex
ctmultiphase.hmix_speciesIndex
To testctmultiphase.hmix_nSpeciesinlined
To testctmultiphase.hmix_setTemperatureinlined
To testctmultiphase.hmix_temperatureinlined
To testctmultiphase.hmix_minTempinlined
To testctmultiphase.hmix_maxTempinlined
To testctmultiphase.hmix_chargeinlined
To testctmultiphase.hmix_phaseChargeinlined
To testctmultiphase.hmix_setPressureinlined
To testctmultiphase.hmix_pressureinlined
To testctmultiphase.hmix_nAtomsinlined
To testctmultiphase.hmix_nPhasesinlined
To testctmultiphase.hmix_phaseMolesinlined
ctmultiphase.hmix_setPhaseMoles
ctmultiphase.hmix_setMoles
ctmultiphase.hmix_setMolesByName
To testctmultiphase.hmix_speciesMolesinlined
To testctmultiphase.hmix_elementMolesinlined
ctmultiphase.hmix_equilibrate
ctmultiphase.hmix_getChemPotentials
To testctmultiphase.hmix_enthalpyinlined
To testctmultiphase.hmix_entropyinlined
To testctmultiphase.hmix_gibbsinlined
To testctmultiphase.hmix_cpinlined
To testctmultiphase.hmix_volumeinlined
To testctmultiphase.hmix_speciesPhaseIndexinlined
To testctmultiphase.hmix_moleFractioninlined

API of ctonedim.h

Documentation here.

StatusHeaderFunctionModule
To testctonedim.hct_clearOneDiminlined
ctonedim.hdomain_new
To testctonedim.hdomain_delinlined
To testctonedim.hdomain_typeinlined
ctonedim.hdomain_type3
To testctonedim.hdomain_indexinlined
To testctonedim.hdomain_nComponentsinlined
To testctonedim.hdomain_nPointsinlined
ctonedim.hdomain_componentName
ctonedim.hdomain_componentIndex
ctonedim.hdomain_setBounds
To testctonedim.hdomain_lowerBoundinlined
To testctonedim.hdomain_upperBoundinlined
ctonedim.hdomain_setSteadyTolerances
ctonedim.hdomain_setTransientTolerances
To testctonedim.hdomain_rtolinlined
To testctonedim.hdomain_atolinlined
ctonedim.hdomain_setupGrid
ctonedim.hdomain_setID
To testctonedim.hdomain_gridinlined
To testctonedim.hbdry_setMdotinlined
To testctonedim.hbdry_setTemperatureinlined
To testctonedim.hbdry_setSpreadRateinlined
ctonedim.hbdry_setMoleFractions
To testctonedim.hbdry_temperatureinlined
To testctonedim.hbdry_spreadRateinlined
To testctonedim.hbdry_massFractioninlined
To testctonedim.hbdry_mdotinlined
To testctonedim.hreactingsurf_setkineticsmgrinlined
To testctonedim.hreactingsurf_enableCoverageEqsinlined
To testctonedim.hinlet_newinlined
To testctonedim.houtlet_newinlined
To testctonedim.houtletres_newinlined
To testctonedim.hsymm_newinlined
To testctonedim.hsurf_newinlined
To testctonedim.hreactingsurf_newinlined
To testctonedim.hinlet_setSpreadRateinlined
ctonedim.hstflow_new
To testctonedim.hstflow_setTransportinlined
To testctonedim.hstflow_enableSoretinlined
To testctonedim.hstflow_setPressureinlined
To testctonedim.hstflow_pressureinlined
ctonedim.hstflow_setFixedTempProfile
To testctonedim.hstflow_solveEnergyEqninlined
ctonedim.hsim1D_new
To testctonedim.hsim1D_delinlined
ctonedim.hsim1D_setValue
ctonedim.hsim1D_setProfile
ctonedim.hsim1D_setFlatProfile
ctonedim.hsim1D_show
ctonedim.hsim1D_showSolution
ctonedim.hsim1D_setTimeStep
To testctonedim.hsim1D_getInitialSolninlined
ctonedim.hsim1D_solve
To testctonedim.hsim1D_refineinlined
ctonedim.hsim1D_setRefineCriteria
ctonedim.hsim1D_setGridMin
ctonedim.hsim1D_save
ctonedim.hsim1D_restore
To testctonedim.hsim1D_writeStatsinlined
ctonedim.hsim1D_domainIndex
ctonedim.hsim1D_value
ctonedim.hsim1D_workValue
To testctonedim.hsim1D_evalinlined
To testctonedim.hsim1D_setMaxJacAgeinlined
To testctonedim.hsim1D_setFixedTemperatureinlined

API of ctreactor.h

Documentation here.

StatusHeaderFunctionModule
ctreactor.hreactor_new
To testctreactor.hreactor_delinlined
To testctreactor.hreactor_setInitialVolumeinlined
To testctreactor.hreactor_setChemistryinlined
To testctreactor.hreactor_setEnergyinlined
To testctreactor.hreactor_setThermoMgrinlined
To testctreactor.hreactor_setKineticsMgrinlined
To testctreactor.hreactor_insertinlined
To testctreactor.hreactor_massinlined
To testctreactor.hreactor_volumeinlined
To testctreactor.hreactor_densityinlined
To testctreactor.hreactor_temperatureinlined
To testctreactor.hreactorenthalpymassinlined
To testctreactor.hreactorintEnergymassinlined
To testctreactor.hreactor_pressureinlined
To testctreactor.hreactor_massFractioninlined
To testctreactor.hreactor_nSensParamsinlined
To testctreactor.hreactor_addSensitivityReactioninlined
To testctreactor.hflowReactor_setMassFlowRateinlined
To testctreactor.hreactornet_newinlined
To testctreactor.hreactornet_delinlined
To testctreactor.hreactornet_setInitialTimeinlined
To testctreactor.hreactornet_setMaxTimeStepinlined
To testctreactor.hreactornet_setTolerancesinlined
To testctreactor.hreactornet_setSensitivityTolerancesinlined
To testctreactor.hreactornet_addreactorinlined
To testctreactor.hreactornet_advanceinlined
To testctreactor.hreactornet_stepinlined
To testctreactor.hreactornet_timeinlined
To testctreactor.hreactornet_rtolinlined
To testctreactor.hreactornet_atolinlined
ctreactor.hreactornet_sensitivity
ctreactor.hflowdev_new
To testctreactor.hflowdev_delinlined
To testctreactor.hflowdev_installinlined
To testctreactor.hflowdev_setMasterinlined
To testctreactor.hflowdev_setPrimaryinlined
To testctreactor.hflowdev_massFlowRateinlined
To testctreactor.hflowdev_setMassFlowCoeffinlined
To testctreactor.hflowdev_setValveCoeffinlined
To testctreactor.hflowdev_setPressureCoeffinlined
To testctreactor.hflowdev_setPressureFunctioninlined
To testctreactor.hflowdev_setTimeFunctioninlined
ctreactor.hwall_new
To testctreactor.hwall_delinlined
To testctreactor.hwall_installinlined
To testctreactor.hwall_vdotinlined
To testctreactor.hwall_expansionRateinlined
To testctreactor.hwall_Qinlined
To testctreactor.hwall_heatRateinlined
To testctreactor.hwall_areainlined
To testctreactor.hwall_setAreainlined
To testctreactor.hwall_setThermalResistanceinlined
To testctreactor.hwall_setHeatTransferCoeffinlined
To testctreactor.hwall_setHeatFluxinlined
To testctreactor.hwall_setExpansionRateCoeffinlined
To testctreactor.hwall_setVelocityinlined
To testctreactor.hwall_setEmissivityinlined
To testctreactor.hwall_readyinlined
To testctreactor.hreactorsurface_newinlined
To testctreactor.hreactorsurface_delinlined
To testctreactor.hreactorsurface_installinlined
To testctreactor.hreactorsurface_setkineticsinlined
To testctreactor.hreactorsurface_areainlined
To testctreactor.hreactorsurface_setAreainlined
To testctreactor.hreactorsurface_addSensitivityReactioninlined
To testctreactor.hct_clearReactorsinlined

API of ctrpath.h

Documentation here.

StatusHeaderFunctionModule
To testctrpath.hrdiag_newinlined
To testctrpath.hrdiag_delinlined
To testctrpath.hrdiag_detailedinlined
To testctrpath.hrdiag_briefinlined
To testctrpath.hrdiag_setThresholdinlined
ctrpath.hrdiag_setBoldColor
ctrpath.hrdiag_setNormalColor
ctrpath.hrdiag_setDashedColor
ctrpath.hrdiag_setDotOptions
To testctrpath.hrdiag_setBoldThresholdinlined
To testctrpath.hrdiag_setNormalThresholdinlined
To testctrpath.hrdiag_setLabelThresholdinlined
To testctrpath.hrdiag_setScaleinlined
To testctrpath.hrdiag_setFlowTypeinlined
To testctrpath.hrdiag_setArrowWidthinlined
ctrpath.hrdiag_setTitle
ctrpath.hrdiag_write
To testctrpath.hrdiag_addinlined
ctrpath.hrdiag_findMajor
ctrpath.hrdiag_setFont
To testctrpath.hrdiag_displayOnlyinlined
To testctrpath.hrbuild_newinlined
To testctrpath.hrbuild_delinlined
ctrpath.hrbuild_init
ctrpath.hrbuild_build
To testctrpath.hct_clearReactionPathinlined

API of ctsurf.h

Documentation here.

StatusHeaderFunctionModule
ctsurf.hsurf_setCoverages
ctsurf.hsurf_getCoverages
ctsurf.hsurf_setConcentrations
ctsurf.hsurf_getConcentrations
To testctsurf.hsurf_setSiteDensityinlined
To testctsurf.hsurf_siteDensityinlined
ctsurf.hsurf_setCoveragesByName
+Cantera · WallyToolbox.jl

Cantera

This page documents the wrapper written around the C-API of Cantera. The status of development is documented here. Its goal is not to mimic the original API or provide an interface equivalent to the Python package, but something in line with the functioning of the parent toolbox.

Status of Cantera wrapper

This is an experimental interface to Cantera library based on its C-API version 3.0. This interface is at its early days and has developped for Julia >= 1.9.0 under Windows 10/11. When it is stable enough it will be published as a package and tested under other platforms.

API of ct.h

Documentation here.

StatusHeaderFunctionModule
Testedct.hct_appdeleteinlined
Structct.hsoln_newSolutionwrapped
ct.hsoln_newInterfacewaitlist
Testedct.hsoln_delinlined
Testedct.hsoln_nameinlined
Structct.hsoln_thermoinlined
Structct.hsoln_kineticsinlined
Structct.hsoln_transportinlined
Testedct.hsoln_setTransportModelwrapped
Testedct.hsoln_nAdjacentinlined
ct.hsoln_adjacentwaitlist
Testedct.hthermo_newFromFilewrapped
Testedct.hthermo_delinlined
Structct.hthermo_nElementsinlined
Structct.hthermo_nSpeciesinlined
Testedct.hthermo_temperatureinlined
Structct.hthermo_setTemperatureinlined
Testedct.hthermo_densityinlined
Testedct.hthermo_setDensityinlined
Testedct.hthermo_molarDensityinlined
Testedct.hthermo_setMolarDensityinlined
Testedct.hthermo_meanMolecularWeightinlined
Testedct.hthermo_moleFractioninlined
Testedct.hthermo_massFractioninlined
Structct.hthermo_getMoleFractionsinlined
Testedct.hthermo_getMassFractionsinlined
Structct.hthermo_setMoleFractionsinlined
Testedct.hthermo_setMassFractionsinlined
ct.hthermo_setMoleFractionsByName
ct.hthermo_setMassFractionsByName
ct.hthermo_getAtomicWeights
ct.hthermo_getMolecularWeights
ct.hthermo_getCharges
ct.hthermo_getElementName
ct.hthermo_getSpeciesName
ct.hthermo_getName
ct.hthermo_setName
ct.hthermo_elementIndex
ct.hthermo_speciesIndex
ct.hthermo_report
Testedct.hthermo_print
ct.hthermo_nAtoms
ct.hthermo_addElement
ct.hthermo_getEosType
To testct.hthermo_refPressureinlined
To testct.hthermo_minTempinlined
To testct.hthermo_maxTempinlined
To testct.hthermoenthalpymoleinlined
To testct.hthermointEnergymoleinlined
To testct.hthermoentropymoleinlined
To testct.hthermogibbsmoleinlined
To testct.hthermocpmoleinlined
To testct.hthermocvmoleinlined
To testct.hthermo_pressureinlined
Structct.hthermo_setPressureinlined
To testct.hthermoenthalpymassinlined
To testct.hthermointEnergymassinlined
To testct.hthermoentropymassinlined
To testct.hthermogibbsmassinlined
To testct.hthermocpmassinlined
To testct.hthermocvmassinlined
To testct.hthermo_electricPotentialinlined
To testct.hthermo_thermalExpansionCoeffinlined
To testct.hthermo_isothermalCompressibilityinlined
ct.hthermo_chemPotentials
ct.hthermogetEnthalpiesRT
ct.hthermogetEntropiesR
ct.hthermogetCpR
ct.hthermo_setElectricPotential
ct.hthermosetTP
ct.hthermosetTD
ct.hthermosetRP
ct.hthermosetDP
ct.hthermosetHP
ct.hthermosetUV
ct.hthermosetSV
ct.hthermosetSP
ct.hthermosetST
ct.hthermosetTV
ct.hthermosetPV
ct.hthermosetUP
ct.hthermosetVH
ct.hthermosetTH
ct.hthermosetSH
Testedct.hthermo_equilibrate
To testct.hthermo_critTemperatureinlined
To testct.hthermo_critPressureinlined
To testct.hthermo_critDensityinlined
To testct.hthermo_vaporFractioninlined
ct.hthermo_satTemperature
ct.hthermo_satPressure
ct.hthermosetStatePsat
ct.hthermosetStateTsat
ct.hkin_newFromFile
To testct.hkin_delinlined
To testct.hkin_nSpeciesinlined
To testct.hkin_nReactionsinlined
To testct.hkin_nPhasesinlined
ct.hkin_phaseIndex
To testct.hkin_reactionPhaseIndexinlined
ct.hkin_reactantStoichCoeff
ct.hkin_productStoichCoeff
ct.hkin_getReactionType
ct.hkin_getFwdRatesOfProgress
ct.hkin_getRevRatesOfProgress
ct.hkin_getNetRatesOfProgress
ct.hkin_getEquilibriumConstants
ct.hkin_getFwdRateConstants
ct.hkin_getRevRateConstants
ct.hkin_getDelta
ct.hkin_getCreationRates
ct.hkin_getDestructionRates
ct.hkin_getNetProductionRates
ct.hkin_getSourceTerms
To testct.hkin_multiplierinlined
ct.hkin_getReactionString
ct.hkin_setMultiplier
To testct.hkin_isReversibleinlined
ct.hkin_getType
To testct.hkin_startinlined
ct.hkin_speciesIndex
To testct.hkin_advanceCoveragesinlined
To testct.hkin_phaseinlined
To testct.htrans_newDefaultinlined
ct.htrans_new
To testct.htrans_delinlined
To testct.htrans_transportModelinlined
To testct.htrans_viscosityinlined
To testct.htrans_electricalConductivityinlined
ct.htrans_thermalConductivity
ct.htrans_getThermalDiffCoeffs
ct.htrans_getMixDiffCoeffs
ct.htrans_getBinDiffCoeffs
ct.htrans_getMultiDiffCoeffs
ct.htrans_setParameters
ct.htrans_getMolarFluxes
ct.htrans_getMassFluxes
ct.hct_getCanteraError
ct.hct_setLogWriter
ct.hct_setLogCallback
ct.hct_addCanteraDirectory
ct.hct_getDataDirectories
ct.hct_getCanteraVersion
ct.hct_getGitCommit
Testedct.hctsuppressthermo_warningsinlined
Testedct.hctuselegacyrateconstantsinlined
Testedct.hct_clearStorageinlined
Testedct.hct_resetStorageinlined

API of ctfunc.h

Documentation here.

StatusHeaderFunctionModule
ctfunc.hfunc_new
ctfunc.hfuncnewbasic
ctfunc.hfuncnewadvanced
ctfunc.hfuncnewcompound
ctfunc.hfuncnewmodified
To testctfunc.hfunc_delinlined
ctfunc.hfunc_type
To testctfunc.hfunc_valueinlined
To testctfunc.hfunc_derivativeinlined
To testctfunc.hfunc_duplicateinlined
ctfunc.hfunc_write
To testctfunc.hct_clearFuncinlined

API of ctmultiphase.h

Documentation here.

StatusHeaderFunctionModule
To testctmultiphase.hmix_newinlined
To testctmultiphase.hmix_delinlined
To testctmultiphase.hct_clearMixinlined
ctmultiphase.hmix_addPhase
To testctmultiphase.hmix_initinlined
To testctmultiphase.hmix_updatePhasesinlined
To testctmultiphase.hmix_nElementsinlined
ctmultiphase.hmix_elementIndex
ctmultiphase.hmix_speciesIndex
To testctmultiphase.hmix_nSpeciesinlined
To testctmultiphase.hmix_setTemperatureinlined
To testctmultiphase.hmix_temperatureinlined
To testctmultiphase.hmix_minTempinlined
To testctmultiphase.hmix_maxTempinlined
To testctmultiphase.hmix_chargeinlined
To testctmultiphase.hmix_phaseChargeinlined
To testctmultiphase.hmix_setPressureinlined
To testctmultiphase.hmix_pressureinlined
To testctmultiphase.hmix_nAtomsinlined
To testctmultiphase.hmix_nPhasesinlined
To testctmultiphase.hmix_phaseMolesinlined
ctmultiphase.hmix_setPhaseMoles
ctmultiphase.hmix_setMoles
ctmultiphase.hmix_setMolesByName
To testctmultiphase.hmix_speciesMolesinlined
To testctmultiphase.hmix_elementMolesinlined
ctmultiphase.hmix_equilibrate
ctmultiphase.hmix_getChemPotentials
To testctmultiphase.hmix_enthalpyinlined
To testctmultiphase.hmix_entropyinlined
To testctmultiphase.hmix_gibbsinlined
To testctmultiphase.hmix_cpinlined
To testctmultiphase.hmix_volumeinlined
To testctmultiphase.hmix_speciesPhaseIndexinlined
To testctmultiphase.hmix_moleFractioninlined

API of ctonedim.h

Documentation here.

StatusHeaderFunctionModule
To testctonedim.hct_clearOneDiminlined
ctonedim.hdomain_new
To testctonedim.hdomain_delinlined
To testctonedim.hdomain_typeinlined
ctonedim.hdomain_type3
To testctonedim.hdomain_indexinlined
To testctonedim.hdomain_nComponentsinlined
To testctonedim.hdomain_nPointsinlined
ctonedim.hdomain_componentName
ctonedim.hdomain_componentIndex
ctonedim.hdomain_setBounds
To testctonedim.hdomain_lowerBoundinlined
To testctonedim.hdomain_upperBoundinlined
ctonedim.hdomain_setSteadyTolerances
ctonedim.hdomain_setTransientTolerances
To testctonedim.hdomain_rtolinlined
To testctonedim.hdomain_atolinlined
ctonedim.hdomain_setupGrid
ctonedim.hdomain_setID
To testctonedim.hdomain_gridinlined
To testctonedim.hbdry_setMdotinlined
To testctonedim.hbdry_setTemperatureinlined
To testctonedim.hbdry_setSpreadRateinlined
ctonedim.hbdry_setMoleFractions
To testctonedim.hbdry_temperatureinlined
To testctonedim.hbdry_spreadRateinlined
To testctonedim.hbdry_massFractioninlined
To testctonedim.hbdry_mdotinlined
To testctonedim.hreactingsurf_setkineticsmgrinlined
To testctonedim.hreactingsurf_enableCoverageEqsinlined
To testctonedim.hinlet_newinlined
To testctonedim.houtlet_newinlined
To testctonedim.houtletres_newinlined
To testctonedim.hsymm_newinlined
To testctonedim.hsurf_newinlined
To testctonedim.hreactingsurf_newinlined
To testctonedim.hinlet_setSpreadRateinlined
ctonedim.hstflow_new
To testctonedim.hstflow_setTransportinlined
To testctonedim.hstflow_enableSoretinlined
To testctonedim.hstflow_setPressureinlined
To testctonedim.hstflow_pressureinlined
ctonedim.hstflow_setFixedTempProfile
To testctonedim.hstflow_solveEnergyEqninlined
ctonedim.hsim1D_new
To testctonedim.hsim1D_delinlined
ctonedim.hsim1D_setValue
ctonedim.hsim1D_setProfile
ctonedim.hsim1D_setFlatProfile
ctonedim.hsim1D_show
ctonedim.hsim1D_showSolution
ctonedim.hsim1D_setTimeStep
To testctonedim.hsim1D_getInitialSolninlined
ctonedim.hsim1D_solve
To testctonedim.hsim1D_refineinlined
ctonedim.hsim1D_setRefineCriteria
ctonedim.hsim1D_setGridMin
ctonedim.hsim1D_save
ctonedim.hsim1D_restore
To testctonedim.hsim1D_writeStatsinlined
ctonedim.hsim1D_domainIndex
ctonedim.hsim1D_value
ctonedim.hsim1D_workValue
To testctonedim.hsim1D_evalinlined
To testctonedim.hsim1D_setMaxJacAgeinlined
To testctonedim.hsim1D_setFixedTemperatureinlined

API of ctreactor.h

Documentation here.

StatusHeaderFunctionModule
ctreactor.hreactor_new
To testctreactor.hreactor_delinlined
To testctreactor.hreactor_setInitialVolumeinlined
To testctreactor.hreactor_setChemistryinlined
To testctreactor.hreactor_setEnergyinlined
To testctreactor.hreactor_setThermoMgrinlined
To testctreactor.hreactor_setKineticsMgrinlined
To testctreactor.hreactor_insertinlined
To testctreactor.hreactor_massinlined
To testctreactor.hreactor_volumeinlined
To testctreactor.hreactor_densityinlined
To testctreactor.hreactor_temperatureinlined
To testctreactor.hreactorenthalpymassinlined
To testctreactor.hreactorintEnergymassinlined
To testctreactor.hreactor_pressureinlined
To testctreactor.hreactor_massFractioninlined
To testctreactor.hreactor_nSensParamsinlined
To testctreactor.hreactor_addSensitivityReactioninlined
To testctreactor.hflowReactor_setMassFlowRateinlined
To testctreactor.hreactornet_newinlined
To testctreactor.hreactornet_delinlined
To testctreactor.hreactornet_setInitialTimeinlined
To testctreactor.hreactornet_setMaxTimeStepinlined
To testctreactor.hreactornet_setTolerancesinlined
To testctreactor.hreactornet_setSensitivityTolerancesinlined
To testctreactor.hreactornet_addreactorinlined
To testctreactor.hreactornet_advanceinlined
To testctreactor.hreactornet_stepinlined
To testctreactor.hreactornet_timeinlined
To testctreactor.hreactornet_rtolinlined
To testctreactor.hreactornet_atolinlined
ctreactor.hreactornet_sensitivity
ctreactor.hflowdev_new
To testctreactor.hflowdev_delinlined
To testctreactor.hflowdev_installinlined
To testctreactor.hflowdev_setMasterinlined
To testctreactor.hflowdev_setPrimaryinlined
To testctreactor.hflowdev_massFlowRateinlined
To testctreactor.hflowdev_setMassFlowCoeffinlined
To testctreactor.hflowdev_setValveCoeffinlined
To testctreactor.hflowdev_setPressureCoeffinlined
To testctreactor.hflowdev_setPressureFunctioninlined
To testctreactor.hflowdev_setTimeFunctioninlined
ctreactor.hwall_new
To testctreactor.hwall_delinlined
To testctreactor.hwall_installinlined
To testctreactor.hwall_vdotinlined
To testctreactor.hwall_expansionRateinlined
To testctreactor.hwall_Qinlined
To testctreactor.hwall_heatRateinlined
To testctreactor.hwall_areainlined
To testctreactor.hwall_setAreainlined
To testctreactor.hwall_setThermalResistanceinlined
To testctreactor.hwall_setHeatTransferCoeffinlined
To testctreactor.hwall_setHeatFluxinlined
To testctreactor.hwall_setExpansionRateCoeffinlined
To testctreactor.hwall_setVelocityinlined
To testctreactor.hwall_setEmissivityinlined
To testctreactor.hwall_readyinlined
To testctreactor.hreactorsurface_newinlined
To testctreactor.hreactorsurface_delinlined
To testctreactor.hreactorsurface_installinlined
To testctreactor.hreactorsurface_setkineticsinlined
To testctreactor.hreactorsurface_areainlined
To testctreactor.hreactorsurface_setAreainlined
To testctreactor.hreactorsurface_addSensitivityReactioninlined
To testctreactor.hct_clearReactorsinlined

API of ctrpath.h

Documentation here.

StatusHeaderFunctionModule
To testctrpath.hrdiag_newinlined
To testctrpath.hrdiag_delinlined
To testctrpath.hrdiag_detailedinlined
To testctrpath.hrdiag_briefinlined
To testctrpath.hrdiag_setThresholdinlined
ctrpath.hrdiag_setBoldColor
ctrpath.hrdiag_setNormalColor
ctrpath.hrdiag_setDashedColor
ctrpath.hrdiag_setDotOptions
To testctrpath.hrdiag_setBoldThresholdinlined
To testctrpath.hrdiag_setNormalThresholdinlined
To testctrpath.hrdiag_setLabelThresholdinlined
To testctrpath.hrdiag_setScaleinlined
To testctrpath.hrdiag_setFlowTypeinlined
To testctrpath.hrdiag_setArrowWidthinlined
ctrpath.hrdiag_setTitle
ctrpath.hrdiag_write
To testctrpath.hrdiag_addinlined
ctrpath.hrdiag_findMajor
ctrpath.hrdiag_setFont
To testctrpath.hrdiag_displayOnlyinlined
To testctrpath.hrbuild_newinlined
To testctrpath.hrbuild_delinlined
ctrpath.hrbuild_init
ctrpath.hrbuild_build
To testctrpath.hct_clearReactionPathinlined

API of ctsurf.h

Documentation here.

StatusHeaderFunctionModule
ctsurf.hsurf_setCoverages
ctsurf.hsurf_getCoverages
ctsurf.hsurf_setConcentrations
ctsurf.hsurf_getConcentrations
To testctsurf.hsurf_setSiteDensityinlined
To testctsurf.hsurf_siteDensityinlined
ctsurf.hsurf_setCoveragesByName
diff --git a/dev/Cantera/samples/index.html b/dev/Cantera/samples/index.html index 7202066de..51a0744df 100644 --- a/dev/Cantera/samples/index.html +++ b/dev/Cantera/samples/index.html @@ -1,2 +1,2 @@ -Cantera samples · WallyToolbox.jl
+Cantera samples · WallyToolbox.jl
diff --git a/dev/DryFlowsheet/index.html b/dev/DryFlowsheet/index.html index e488ecb72..360c14a64 100644 --- a/dev/DryFlowsheet/index.html +++ b/dev/DryFlowsheet/index.html @@ -1,2 +1,2 @@ -DryFlowsheet · WallyToolbox.jl

DryFlowsheet

DryFlowsheet.CooledCrushingMillType

Represents a crushing device with cooling system.

Models

  1. :TARGET_COOLANT_TEMP evaluates the heat transfer lost to coolant provided a target final stream temperature given by keyword argument temp_out. Product temperature is updated through an EnergyStream built with energy exchange computed through exchanged_heat, so that numerical value can be slightly different from target value.
  2. :USING_GLOBAL_HTC makes use of a global heat transfer coefficient to evaluate heat flux across the cooling stream.

Attributes

  • rawmeal: The input meal applied to crushing process.

  • product: The output material stream at the end of product pipeline.

  • coolant: The output material stream at the end of cooling pipeline.

  • power: The power applied to the crushing process [W]

  • loss: The heat exchanged in between product and cooling pipelines [W].

  • globalhtc: Global heat transfer coefficient [W/K].

source
DryFlowsheet.MaterialStreamType

Represents a material stream.

Attributes

  • : Material mass flow rate [kg/s].

  • T: Stream temperature [K].

  • P: Stream pressure [Pa].

  • Y: Components mass fractions [-].

  • pipeline: Materials pipeline associated to Y.

source
DryFlowsheet.SolidsSeparatorType

Represents a solids separator with efficiency η.

To-do's

  • Add inverse model to automatically tune efficiency η.

Attributes

  • η: Solids separation efficiency [-].

  • source: The stream to be separated into solids and others.

  • solids: The output solids stream.

  • others: The output remaining stream.

source
DryFlowsheet.TransportPipelineType

Represents a pipeline with heat transfer.

Models

  1. :TARGET_EXIT_TEMP evaluates the heat transfer lost to environment provided a target final stream temperature given by keyword argument temp_out. Product temperature is updated through an EnergyStream built with energy exchange computed through exchanged_heat, so that numerical value can be slightly different from target value.
  2. :USING_GLOBAL_HTC makes use of a global heat transfer coefficient to evaluate heat flux across the pipe.

To-do's

  • Implement heat transfer losses through a convective heat transfer coefficient (HTC) computed from a suitable Nusselt number, for use of pipeline in simulation mode.

Attributes

  • product: The output material stream at the end of pipeline.

  • power: The heat exchanged in pipeline [W].

source
+DryFlowsheet · WallyToolbox.jl

DryFlowsheet

DryFlowsheet.CooledCrushingMillType

Represents a crushing device with cooling system.

Models

  1. :TARGET_COOLANT_TEMP evaluates the heat transfer lost to coolant provided a target final stream temperature given by keyword argument temp_out. Product temperature is updated through an EnergyStream built with energy exchange computed through exchanged_heat, so that numerical value can be slightly different from target value.
  2. :USING_GLOBAL_HTC makes use of a global heat transfer coefficient to evaluate heat flux across the cooling stream.

Attributes

  • rawmeal: The input meal applied to crushing process.

  • product: The output material stream at the end of product pipeline.

  • coolant: The output material stream at the end of cooling pipeline.

  • power: The power applied to the crushing process [W]

  • loss: The heat exchanged in between product and cooling pipelines [W].

  • globalhtc: Global heat transfer coefficient [W/K].

source
DryFlowsheet.MaterialStreamType

Represents a material stream.

Attributes

  • : Material mass flow rate [kg/s].

  • T: Stream temperature [K].

  • P: Stream pressure [Pa].

  • Y: Components mass fractions [-].

  • pipeline: Materials pipeline associated to Y.

source
DryFlowsheet.SolidsSeparatorType

Represents a solids separator with efficiency η.

To-do's

  • Add inverse model to automatically tune efficiency η.

Attributes

  • η: Solids separation efficiency [-].

  • source: The stream to be separated into solids and others.

  • solids: The output solids stream.

  • others: The output remaining stream.

source
DryFlowsheet.TransportPipelineType

Represents a pipeline with heat transfer.

Models

  1. :TARGET_EXIT_TEMP evaluates the heat transfer lost to environment provided a target final stream temperature given by keyword argument temp_out. Product temperature is updated through an EnergyStream built with energy exchange computed through exchanged_heat, so that numerical value can be slightly different from target value.
  2. :USING_GLOBAL_HTC makes use of a global heat transfer coefficient to evaluate heat flux across the pipe.

To-do's

  • Implement heat transfer losses through a convective heat transfer coefficient (HTC) computed from a suitable Nusselt number, for use of pipeline in simulation mode.

Attributes

  • product: The output material stream at the end of pipeline.

  • power: The heat exchanged in pipeline [W].

source
diff --git a/dev/DryGranular/index.html b/dev/DryGranular/index.html index 75ef9255b..b72e14f40 100644 --- a/dev/DryGranular/index.html +++ b/dev/DryGranular/index.html @@ -1,5 +1,5 @@ -DryGranular · WallyToolbox.jl

DryGranular

General porous media

Modeling of geometrical characteristics of porous beds is required for including both their thermal effect or role over chemistry in chemical reactors. A classical approach used in several commercial and open source tools is that of Gunn [1]. In what follows we develop the ideas that lead to an analogous model which is implemented by this structure.

To build the model we will assume a reactor of constant rectangular cross-section ${A}_{r}={b}{w}$ and volume ${V}_{R}={b}{w}{h}$. Its cross-section perimeter is then ${P}_{R}=2({b}+{w})$. Inside this reactor we randomly pack cubic particles $\beta$ of surface area ${A}_{\beta}=6{l}_{\beta}^2$ and volume ${V}_{\beta}={l}_{\beta}^3$ at a porosity level ${\phi}$. Thus the total volume of solids inside the reactor is ${V}_{S}=(1-{\phi}){V}_{R}$ and the approximate number of particles ${N}=\frac{{V}_{S}}{{V}_{\beta}}$. Following a similar reasoning the total surface area of particles is ${A}_{S}={N}{A}_{\beta}$. Performing all the substitutions so far one finds the following expression

\[{A}_{S}=\frac{6(1-{\phi}){b}{w}{h}}{{l}_{\beta}}\]

Since the differential $d{A}={P}d{l}$ holds for the surface of a body over its length ${l}$, one can divide the above expression by the reactor length to get the perimeter of particles in a cross-section. We can further divide by the cross-section area itself and find the perimeter density which is a more general result, and find the expression proposed by Gunn [1]. This result is summarized in the next equation where the subscript of particle size was dropped for generality.

\[{P} = \frac{6(1-{\phi})}{{l}}\]

An estimator of the number of channels per unit cross-section of reactor ${N}$ can be related to the porosity through ${N}\pi{R}^2={\phi}$. Because the above perimeter is shared between the fluid volume and solids, it holds that ${N}2\pi{R}=P$. Using these expressions one can solve for the porosity channels characteristic radius ${R}$ as given below, which is also a result reported by Gunn [1].

\[{R}=\frac{{\phi}{l}}{3(1-{\phi})}\]

This model is probided in PackedBedPorosityDescriptor.

DryGranular.PackedBedPorosityDescriptorType

Provides description of porosity parameters with stochastic behavior.

  • ϕ::Union{Float64, Vector{Float64}}: Porosity volume fraction in medium [-].

  • l::Union{Float64, Vector{Float64}}: Characteristic particle size in medium [m].

  • σϕ::Union{Nothing, Float64}: Optional standard deviation of porosity volume fraction [-].

  • σl::Union{Nothing, Float64}: Optional standard deviation of characteristic particle size [m].

  • P::Union{Float64, Vector{Float64}}: Perimeter in reactor cross-section [m].

  • D::Union{Float64, Vector{Float64}}: Characteristic diameter of porosity channels [m].

  • A::Float64: Reactor area used for scaling perimeter [m²].

source

PackedBedPorosityDescriptor can be used to describe the geometry of exchange section of a packed bed for a single set of arguments.

julia> PackedBedPorosityDescriptor(; ϕ = 0.65, l = 0.10, area = 1.0)
+DryGranular · WallyToolbox.jl

DryGranular

General porous media

Modeling of geometrical characteristics of porous beds is required for including both their thermal effect or role over chemistry in chemical reactors. A classical approach used in several commercial and open source tools is that of Gunn [1]. In what follows we develop the ideas that lead to an analogous model which is implemented by this structure.

To build the model we will assume a reactor of constant rectangular cross-section ${A}_{r}={b}{w}$ and volume ${V}_{R}={b}{w}{h}$. Its cross-section perimeter is then ${P}_{R}=2({b}+{w})$. Inside this reactor we randomly pack cubic particles $\beta$ of surface area ${A}_{\beta}=6{l}_{\beta}^2$ and volume ${V}_{\beta}={l}_{\beta}^3$ at a porosity level ${\phi}$. Thus the total volume of solids inside the reactor is ${V}_{S}=(1-{\phi}){V}_{R}$ and the approximate number of particles ${N}=\frac{{V}_{S}}{{V}_{\beta}}$. Following a similar reasoning the total surface area of particles is ${A}_{S}={N}{A}_{\beta}$. Performing all the substitutions so far one finds the following expression

\[{A}_{S}=\frac{6(1-{\phi}){b}{w}{h}}{{l}_{\beta}}\]

Since the differential $d{A}={P}d{l}$ holds for the surface of a body over its length ${l}$, one can divide the above expression by the reactor length to get the perimeter of particles in a cross-section. We can further divide by the cross-section area itself and find the perimeter density which is a more general result, and find the expression proposed by Gunn [1]. This result is summarized in the next equation where the subscript of particle size was dropped for generality.

\[{P} = \frac{6(1-{\phi})}{{l}}\]

An estimator of the number of channels per unit cross-section of reactor ${N}$ can be related to the porosity through ${N}\pi{R}^2={\phi}$. Because the above perimeter is shared between the fluid volume and solids, it holds that ${N}2\pi{R}=P$. Using these expressions one can solve for the porosity channels characteristic radius ${R}$ as given below, which is also a result reported by Gunn [1].

\[{R}=\frac{{\phi}{l}}{3(1-{\phi})}\]

This model is probided in PackedBedPorosityDescriptor.

DryGranular.PackedBedPorosityDescriptorType

Provides description of porosity parameters with stochastic behavior.

  • ϕ::Union{Float64, Vector{Float64}}: Porosity volume fraction in medium [-].

  • l::Union{Float64, Vector{Float64}}: Characteristic particle size in medium [m].

  • σϕ::Union{Nothing, Float64}: Optional standard deviation of porosity volume fraction [-].

  • σl::Union{Nothing, Float64}: Optional standard deviation of characteristic particle size [m].

  • P::Union{Float64, Vector{Float64}}: Perimeter in reactor cross-section [m].

  • D::Union{Float64, Vector{Float64}}: Characteristic diameter of porosity channels [m].

  • A::Float64: Reactor area used for scaling perimeter [m²].

source

PackedBedPorosityDescriptor can be used to describe the geometry of exchange section of a packed bed for a single set of arguments.

julia> PackedBedPorosityDescriptor(; ϕ = 0.65, l = 0.10, area = 1.0)
 PackedBedPorosityDescriptor(P = 21.000000 m, D = 0.123810 m)

It can also be used to describe randomly varying reactors, what is a more realistic thing to do when using this structure to simulate real world systems.

julia> PackedBedPorosityDescriptor(;
             ϕ  = 0.65, l  = 0.10,
             σϕ = 0.03, σl = 0.01,
@@ -16,11 +16,11 @@
 \dfrac{dh}{dz} &= C₁ \left[\frac{h}{R}\left(2 - \frac{h}{R}\right)\right]^{-\frac{3}{2}} - C₂\\[6pt]
 C₁             &= \frac{3}{4}\dfrac{Φ\tan{γ}}{π R^3 ω}\\[6pt]
 C₂             &= \dfrac{\tan{β}}{\cos{γ}}
-\end{aligned}\]

The structure SymbolicLinearKramersModel implements the Kramers' ordinary differential equation for prediction of bed height profile in a rotary kiln. This equation is implemented under the formalism of ModelingToolkit.

DryGranular.SymbolicLinearKramersModelType

Creates a reusable linear Kramers model for rotary kiln simulation.

  • R::Symbolics.Num: Symbolic kiln internal radius

  • Φ::Symbolics.Num: Symbolic kiln feed rate

  • ω::Symbolics.Num: Symbolic kiln rotation rate

  • β::Symbolics.Num: Symbolic kiln slope

  • γ::Symbolics.Num: Symbolic solids repose angle

  • z::Symbolics.Num: Symbolic kiln axial coordinates

  • h::Symbolics.Num: Symbolic bed height profile

  • sys::ModelingToolkit.ODESystem: Problem ordinary differential equation

source

For integration of this model we implement RotaryKilnBedSolution. It provides the solved description of a rotary kiln bed geometry computed from the solution of bed height along the kiln length. The main goal of the quantities computed here is their use with heat and mass transfer models for the simulation of rotary kiln process. A simple post-processing utilitiy plotlinearkramersmodel is also provided.

DryGranular.RotaryKilnBedSolutionType

General geometric description of a bed from Kramers equation solution.

  • z::Vector{Float64}: Solution coordinates [m]

  • h::Vector{Float64}: Solution bed height [m]

  • θ::Vector{Float64}: View angle from kiln center [rad]

  • l::Vector{Float64}: Bed-freeboard cord length [m]

  • A::Vector{Float64}: Local bed cross section area [m²]

  • η::Vector{Float64}: Local loading based on height [-]

  • ηₘ::Float64: Mean loading of kiln [%]

  • V::Float64: Bed integral volume [m³]

  • τ::Float64: Residence time of particles

  • β::Float64: Kiln slope [rad]

Arguments

Internal elements are initialized through the following constructor:

RotaryKilnBedSolution(z, h, β, R, Φ)

Where parameters are given as:

  • z: solution coordinates over length, [m].
  • h: bed profile solution over length, [m].
  • R: kiln internal radius, [m].
  • Φ: kiln feed rate, [m³/s].

An outer constructor is also provided for managing the integration of an instance of SymbolicLinearKramersModel. This is the recommended usage that is illustrated below.

Important: inputs must be provided in international system (SI) units as a better physical practice. The only exception is the rotation rate ω provided in revolution multiples. If the discharge end is held by a dam, its height must be provided instead of the particle size, as it is used as the ODE initial condition.

  • model: a symbolic kiln model.
  • L: kiln length, [m].
  • R: kiln internal radius, [m].
  • Φ: kiln feed rate, [m³/s].
  • ω: kiln rotation rate, [rev/s].
  • β: kiln slope, [rad].
  • γ: solids repose angle, [rad].
  • d: particle size or dam height, [m].
  • solver: Solver for DifferentialEquations. Defaults to Tsit5.
  • rtol: Relative integration tolerance. Defaults to 1.0e-08.
  • atol: Absolute integration tolerance. Defaults to 1.0e-08.
source
DryGranular.plotlinearkramersmodelFunction
plotlinearkramersmodel(
+\end{aligned}\]

The structure SymbolicLinearKramersModel implements the Kramers' ordinary differential equation for prediction of bed height profile in a rotary kiln. This equation is implemented under the formalism of ModelingToolkit.

DryGranular.SymbolicLinearKramersModelType

Creates a reusable linear Kramers model for rotary kiln simulation.

  • R::Symbolics.Num: Symbolic kiln internal radius

  • Φ::Symbolics.Num: Symbolic kiln feed rate

  • ω::Symbolics.Num: Symbolic kiln rotation rate

  • β::Symbolics.Num: Symbolic kiln slope

  • γ::Symbolics.Num: Symbolic solids repose angle

  • z::Symbolics.Num: Symbolic kiln axial coordinates

  • h::Symbolics.Num: Symbolic bed height profile

  • sys::ModelingToolkit.ODESystem: Problem ordinary differential equation

source

For integration of this model we implement RotaryKilnBedSolution. It provides the solved description of a rotary kiln bed geometry computed from the solution of bed height along the kiln length. The main goal of the quantities computed here is their use with heat and mass transfer models for the simulation of rotary kiln process. A simple post-processing utilitiy plotlinearkramersmodel is also provided.

DryGranular.RotaryKilnBedSolutionType

General geometric description of a bed from Kramers equation solution.

  • z::Vector{Float64}: Solution coordinates [m]

  • h::Vector{Float64}: Solution bed height [m]

  • θ::Vector{Float64}: View angle from kiln center [rad]

  • l::Vector{Float64}: Bed-freeboard cord length [m]

  • A::Vector{Float64}: Local bed cross section area [m²]

  • η::Vector{Float64}: Local loading based on height [-]

  • ηₘ::Float64: Mean loading of kiln [%]

  • V::Float64: Bed integral volume [m³]

  • τ::Float64: Residence time of particles

  • β::Float64: Kiln slope [rad]

Arguments

Internal elements are initialized through the following constructor:

RotaryKilnBedSolution(z, h, β, R, Φ)

Where parameters are given as:

  • z: solution coordinates over length, [m].
  • h: bed profile solution over length, [m].
  • R: kiln internal radius, [m].
  • Φ: kiln feed rate, [m³/s].

An outer constructor is also provided for managing the integration of an instance of SymbolicLinearKramersModel. This is the recommended usage that is illustrated below.

Important: inputs must be provided in international system (SI) units as a better physical practice. The only exception is the rotation rate ω provided in revolution multiples. If the discharge end is held by a dam, its height must be provided instead of the particle size, as it is used as the ODE initial condition.

  • model: a symbolic kiln model.
  • L: kiln length, [m].
  • R: kiln internal radius, [m].
  • Φ: kiln feed rate, [m³/s].
  • ω: kiln rotation rate, [rev/s].
  • β: kiln slope, [rad].
  • γ: solids repose angle, [rad].
  • d: particle size or dam height, [m].
  • solver: Solver for DifferentialEquations. Defaults to Tsit5.
  • rtol: Relative integration tolerance. Defaults to 1.0e-08.
  • atol: Absolute integration tolerance. Defaults to 1.0e-08.
source
DryGranular.plotlinearkramersmodelFunction
plotlinearkramersmodel(
     model::RotaryKilnBedSolution;
     normz::Bool = false,
     normh::Bool = false
-)::Figure

Standardized plotting of RotaryKilnBedSolution bed profile. It supports normalization of axes throught keywords normz for axial coordinate and normh for bed depth.

source

Data in next example is an SI conversion of an example from Kramers and Croockewite (1952) [2].

julia> L = 13.715999999999998;  # Kiln length [m]
+)::Figure

Standardized plotting of RotaryKilnBedSolution bed profile. It supports normalization of axes throught keywords normz for axial coordinate and normh for bed depth.

source

Data in next example is an SI conversion of an example from Kramers and Croockewite (1952) [2].

julia> L = 13.715999999999998;  # Kiln length [m]
 
 julia> D = 1.8897599999999999;  # Kiln diameter [m]
 
@@ -81,4 +81,4 @@
 true
 
 julia> bed.τ ≈ Vₐ / Φ
-true

Validation of Kramers' model is provided here.

Finally a set of basic equations provided for process analysis.

+true

Validation of Kramers' model is provided here.

Finally a set of basic equations provided for process analysis.

diff --git a/dev/DryGranular/kramers/index.html b/dev/DryGranular/kramers/index.html index 91c03f475..e32a2e885 100644 --- a/dev/DryGranular/kramers/index.html +++ b/dev/DryGranular/kramers/index.html @@ -2,4 +2,4 @@ Kramers' model · WallyToolbox.jl

Kramers' model

Sample reference case

Here we make use of the current implementation to check if it correctly approximates the last example provided in reference paper from [2]. To minimize rounding errors causes by unit conversions, we provide the required functions to convert from imperial to international system in the solution process.

The next table summarizes the results. It is seen that the dimensionless numbers are well approximated. It must be emphasized that the reference estimates η̄ᵣ by a graphical method – it was 1952 – and the current value is considered a good enough approximation. Additionally, the equation was not integrated numerically as done here, but engineering relationships were used in the approximation. That said, the proper loading to be considered in our days is η̄ᵢ.

QuantityReferenceComputed
1.151.15
Nₖ1.171.17
η̄ᵣ5.655.46
η̄ᵢ4.995.91

Note: the last value in column Reference above is not provided in Kramers' paper but computed from the approximate analytical solution provided by the authors. As we see here, it may get >20% error under some circumstances.

Verification of Table 3

In the next cell we provide the kiln dimensions used by Kramers (1952) to experimentally validate the model. Some data from their Tab. 3 is then loaded and all rows are simulated with current model. Fractional hold-up seems to be well correlated at least to a few percent of the reference value.

tan(β)nη̄ᵣη̄ᵢ
0.00940.0590.0051511.110.8
0.00940.090.002685.44.7
0.00940.1950.01328.7999999999999998.9
0.00940.2320.007244.34.8
0.010.040.0063816.90000000000000216.8
0.010.040.00514.39999999999999913.9
0.010.0690.009215.014.6
0.010.0690.0065311.311.3
0.010.1060.01516.215.3
0.010.1590.0129.29.5
0.010.2380.01558.38.4
0.010.2380.01196.8000000000000016.9

Dimensionless profiles

Next step in validation is to check profiles in dimensionless format, as done by Kramers in their Fig. 3. Notice that here we used the numerical integration curves instead of the analytical approximation of profiles, so reproduction and consequences of results are not exactly the same.

Example block output

Comparison with analytical

The final step in model validation is to compare the approximate analytical solution proposed by Kramers and the results of numerical integration. It is worth mentioning that numerical integration remains the recommended method because one does not need to verify the ranges of validity of analytical approximation for every use case.

Example block output

Industrial cases

The following illustrates a practical use case of the model. Next we scan a parameter space to confirm once again the model suitability as an alternative to analytical engineering estimations as per Peray's notebook.

Example block output

The following table confirms the expected values as per Peray.

ωη̄τᵢτₚ
33.60.8510.0203.0203.0
33.61.27.0141.0144.0
43.20.8513.0207.0203.0
43.21.29.0143.0144.0
-
+ diff --git a/dev/DryMaterials/index.html b/dev/DryMaterials/index.html index 5bb70ce41..1f2b2f8c5 100644 --- a/dev/DryMaterials/index.html +++ b/dev/DryMaterials/index.html @@ -1,2 +1,2 @@ -DryMaterials · WallyToolbox.jl

DryMaterials

DryMaterials.SolidMineralPhaseType

Represents a solid mineral phase for thermodynamic calculations.

  • name: Name of phase.

  • ρ: Specific mass of phase [kg/m³].

  • M: Molecular mass of phase [kg/mol].

  • p: Polynomial properties of phase.

source
DryMaterials.SolidPolynomialPropertiesType

Arbitrary Laurent polynomial specific heat and enthalpy of materials.

  • c: Polynomial representation of specific heat [J/(kg.K)].

  • h: Polynomial representation of enthalpy [J/kg].

  • hₒ: Reference state enthalpy [J/kg].

source
DryMaterials.getspinelMethod

Representation of spinel $Al_4Si_3O_{12}$.

TODO recover missing defaults (somewhere else, not in Schieltz (1964)).

source
+DryMaterials · WallyToolbox.jl

DryMaterials

DryMaterials.SolidMineralPhaseType

Represents a solid mineral phase for thermodynamic calculations.

  • name: Name of phase.

  • ρ: Specific mass of phase [kg/m³].

  • M: Molecular mass of phase [kg/mol].

  • p: Polynomial properties of phase.

source
DryMaterials.SolidPolynomialPropertiesType

Arbitrary Laurent polynomial specific heat and enthalpy of materials.

  • c: Polynomial representation of specific heat [J/(kg.K)].

  • h: Polynomial representation of enthalpy [J/kg].

  • hₒ: Reference state enthalpy [J/kg].

source
DryMaterials.getspinelMethod

Representation of spinel $Al_4Si_3O_{12}$.

TODO recover missing defaults (somewhere else, not in Schieltz (1964)).

source
diff --git a/dev/OpenFOAM/index.html b/dev/OpenFOAM/index.html index 456c68563..36ef728a9 100644 --- a/dev/OpenFOAM/index.html +++ b/dev/OpenFOAM/index.html @@ -1,7 +1,7 @@ -OpenFOAM · WallyToolbox.jl

OpenFOAM

OpenFOAM.InjectionModelType

Represents a generic particle injection model.

Constraints imposed by OpenFOAM:

  • nParticle makes massFlowRate and massTotal to be ignored.

  • massTotal cannot be used in steady state simulations.

  • if flowRateProfile is not found a constant massFlowRate profile is computed from the ratio of massTotal and duration.

To-do:

  • Check if parcelBasisType from is applicable to derived types.
  • massFlowRate::Number: Particles mass flow rate if nParticle is not provided.

  • massTotal::Number: Total mass to be injected if nParticle is not provided.

  • SOI::Number: Start of injection in seconds (base).

  • duration::Number: Duration of injection in seconds (base).

  • nParticle::Number: Number of particles per parcel.

  • uniformParcelSize::UniformParcelSize: Quantity that is constant in parcels (base).

  • flowRateProfile::OpenFOAM.AbstractFlowRateProfile: Type of flow rate profile to apply.

source
OpenFOAM.PatchInjectionType

Represents a patch injection model.

  • name::String: Name to use in injection models list.

  • patchName::String: Patch where injection is applied.

  • injectionModel::InjectionModel: Object pointing to general injection model.

  • U0::Velocity: Particles injection velocity vector.

  • parcelsPerSecond::Number: Number of parcels injected per second.

  • sizeDistribution::OpenFOAM.AbstractSizeDistribution: Particle size distribution.

source
OpenFOAM.parcels_per_secondMethod
parcelstoinject2d(;
+OpenFOAM · WallyToolbox.jl

OpenFOAM

OpenFOAM.InjectionModelType

Represents a generic particle injection model.

Constraints imposed by OpenFOAM:

  • nParticle makes massFlowRate and massTotal to be ignored.

  • massTotal cannot be used in steady state simulations.

  • if flowRateProfile is not found a constant massFlowRate profile is computed from the ratio of massTotal and duration.

To-do:

  • Check if parcelBasisType from is applicable to derived types.
  • massFlowRate::Number: Particles mass flow rate if nParticle is not provided.

  • massTotal::Number: Total mass to be injected if nParticle is not provided.

  • SOI::Number: Start of injection in seconds (base).

  • duration::Number: Duration of injection in seconds (base).

  • nParticle::Number: Number of particles per parcel.

  • uniformParcelSize::UniformParcelSize: Quantity that is constant in parcels (base).

  • flowRateProfile::OpenFOAM.AbstractFlowRateProfile: Type of flow rate profile to apply.

source
OpenFOAM.PatchInjectionType

Represents a patch injection model.

  • name::String: Name to use in injection models list.

  • patchName::String: Patch where injection is applied.

  • injectionModel::InjectionModel: Object pointing to general injection model.

  • U0::Velocity: Particles injection velocity vector.

  • parcelsPerSecond::Number: Number of parcels injected per second.

  • sizeDistribution::OpenFOAM.AbstractSizeDistribution: Particle size distribution.

source
OpenFOAM.parcels_per_secondMethod
parcelstoinject2d(;
     mdot::Float64,
     rhop::Float64,
     diam::Float64,
     nParticle::Int64 = 1
-)

Computes the flow rate of parcels for a given mean particle size and number of particles per parcels. This is inteded as a helper to create a patchInjection element in the injectionModels of cloudProperties file.

source
+)

Computes the flow rate of parcels for a given mean particle size and number of particles per parcels. This is inteded as a helper to create a patchInjection element in the injectionModels of cloudProperties file.

source
diff --git a/dev/RadCalNet/index.html b/dev/RadCalNet/index.html index 842e0d7a5..2834fcff8 100644 --- a/dev/RadCalNet/index.html +++ b/dev/RadCalNet/index.html @@ -83,7 +83,7 @@ 0.68 0.00210072 0.00470752 0.0997078 71325.7 0.79875 0.67 0.000770321 0.0101432 0.0812446 3.0696f5 0.815462 0.7 0.00154008 0.0215186 0.253691 24945.7 0.478712 - 0.53 0.00133843 0.0180676 0.234852 21784.6 0.7443

To-do's

Literature discussion

Verification agains Gorog's paper

Below we compare computed values with those by Gorog et al. [4]. Reference paper is found here.

Emissivity

Absorptivity

At least qualitative agreement is found and orders of magnitude are right. On the other hand, using directly the model parameters from Tam [5] do not produce the expected results (not displayed, work in progress in this draft). It is not clear how the data is pre- and post-processed for use with their network.

All interfaces

RadCalNet.ModelDataType
ModelData(fpath::String; f_train::Float64 = 0.7)

Load HDF5 database stored under fpath and performs standardized workflow of data preparation for model training. The data is split under training and testing datasets with a fraction of training data of f_train.

  • scaler::StatsBase.ZScoreTransform{Float32, Vector{Float32}}: Scaler used for data transformation.

  • X_train::Matrix{Float32}: Matrix of training input data.

  • Y_train::Matrix{Float32}: Matrix of training output data.

  • X_tests::Matrix{Float32}: Matrix of testing input data.

  • Y_tests::Matrix{Float32}: Matrix of testing output data.

  • n_inputs::Int64: Number of model inputs.

  • n_outputs::Int64: Number of model outputs.

source
RadCalNet.ModelTrainerType
ModelTrainer(
+ 0.53  0.00133843   0.0180676   0.234852   21784.6        0.7443

To-do's

  • Broaden sample space over the whole RadCal composition spectrum.
  • Define data loading on GPU/CPU though a flag when recovering model.
  • Create database for testing outside of sampling points.
  • Improve model reload and organize a notebook for training.

Literature discussion

Verification agains Gorog's paper

Below we compare computed values with those by Gorog et al. [4]. Reference paper is found here.

Emissivity

Absorptivity

At least qualitative agreement is found and orders of magnitude are right. On the other hand, using directly the model parameters from Tam [5] do not produce the expected results (not displayed, work in progress in this draft). It is not clear how the data is pre- and post-processed for use with their network.

All interfaces

RadCalNet.ModelDataType
ModelData(fpath::String; f_train::Float64 = 0.7)

Load HDF5 database stored under fpath and performs standardized workflow of data preparation for model training. The data is split under training and testing datasets with a fraction of training data of f_train.

  • scaler::StatsBase.ZScoreTransform{Float32, Vector{Float32}}: Scaler used for data transformation.

  • X_train::Matrix{Float32}: Matrix of training input data.

  • Y_train::Matrix{Float32}: Matrix of training output data.

  • X_tests::Matrix{Float32}: Matrix of testing input data.

  • Y_tests::Matrix{Float32}: Matrix of testing output data.

  • n_inputs::Int64: Number of model inputs.

  • n_outputs::Int64: Number of model outputs.

source
RadCalNet.ModelTrainerType
ModelTrainer(
     data::ModelData,
     model::Chain;
     batch::Int64=64,
@@ -91,7 +91,7 @@
     η::Float64=0.001,
     β::Tuple{Float64,Float64}=(0.9, 0.999),
     ϵ::Float64=1.0e-08
-)

Holds standardized model training parameters and data.

  • batch::Int64: Batch size in training loop.

  • epochs::Int64: Number of epochs to train each time.

  • data::RadCalNet.ModelData: Database structure used for training/testing.

  • model::Flux.Chain: Multi-layer perceptron used for modeling.

  • optim::NamedTuple: Internal Adam optimizer.

  • losses::Vector{Float32}: History of losses.

source
RadCalNet.createcustomdatabaseMethod
createcustomdatabase(;
+)

Holds standardized model training parameters and data.

  • batch::Int64: Batch size in training loop.

  • epochs::Int64: Number of epochs to train each time.

  • data::RadCalNet.ModelData: Database structure used for training/testing.

  • model::Flux.Chain: Multi-layer perceptron used for modeling.

  • optim::NamedTuple: Internal Adam optimizer.

  • losses::Vector{Float32}: History of losses.

source
RadCalNet.createcustomdatabaseMethod
createcustomdatabase(;
     sampler!::Function,
     repeats::Int64 = 100,
     samplesize::Int64 = 50_000,
@@ -100,11 +100,11 @@
     OMMIN::Float64 = 50.0,
     OMMAX::Float64 = 10000.0,
     override::Bool = false
-)

Creates a custom database by generating a number repeats of samples of samplesize rows. Inputs for runradcalinput are to be generated by a sampler! user-defined function which modifies in place an array of compositions, and returns T, L, P, FV, TWALL for setting up a simulation. Files are temporarilly stored under data/ with a sequential numbered naming during database creation and aggregated in a HDF5 file named after saveas. The choice to aggregate files after an initial dump is because generation can be interrupted and manually recovered in an easier way and avoiding any risk of data losses - database creation can take a very long time. If cleanup is true, all intermediate files are removed.

source
RadCalNet.datasampler!Method
datasampler!(X::Vector{Float64})::Tuple

Custom sample space to generate entries with createcustomdatabase. This function contains the parameter space used for model training.

source
RadCalNet.dumpscalerMethod
dumpscaler(scaler::ZScoreTransform{Float32,V32}, saveas::String)

Write z-score scaler mean and scale to provided saveas YAML file.

source
RadCalNet.getradcalnetMethod
getradcalnet(;
+)

Creates a custom database by generating a number repeats of samples of samplesize rows. Inputs for runradcalinput are to be generated by a sampler! user-defined function which modifies in place an array of compositions, and returns T, L, P, FV, TWALL for setting up a simulation. Files are temporarilly stored under data/ with a sequential numbered naming during database creation and aggregated in a HDF5 file named after saveas. The choice to aggregate files after an initial dump is because generation can be interrupted and manually recovered in an easier way and avoiding any risk of data losses - database creation can take a very long time. If cleanup is true, all intermediate files are removed.

source
RadCalNet.datasampler!Method
datasampler!(X::Vector{Float64})::Tuple

Custom sample space to generate entries with createcustomdatabase. This function contains the parameter space used for model training.

source
RadCalNet.dumpscalerMethod
dumpscaler(scaler::ZScoreTransform{Float32,V32}, saveas::String)

Write z-score scaler mean and scale to provided saveas YAML file.

source
RadCalNet.getradcalnetMethod
getradcalnet(;
     scale = true,
     fscaler = nothing,
     fmstate = nothing
-)

Load trained model and scaler to compose RadCalNet. If testing new models, it might be useful to use fscaler and fmstate to point to specific versions of scaler and model state files.

source
RadCalNet.makemodelMethod
makemodel(layers::Vector{Tuple{Int64, Any}}; bn = false)::Chain

Create a multi-layer perceptron for learning radiative properties with the provided layers. If bn is true, then batch normalization after each layer. The final layer has by default a sigmoid function to ensure physical outputs in range [0, 1].

source
RadCalNet.modelFunction
model(x::Vector{Float32})::Vector{Float32}

Main model interface for emissivity and transmissivity.

source
RadCalNet.plottestsMethod
plottests(trainer::ModelTrainer; num::Int64)

Evaluate model over num data points and compare the data to the expected values as computed from RadCal. Makes use of test data only - never seem by the model during training.

source
RadCalNet.runradcalinputMethod
runradcalinput(;
+)

Load trained model and scaler to compose RadCalNet. If testing new models, it might be useful to use fscaler and fmstate to point to specific versions of scaler and model state files.

source
RadCalNet.makemodelMethod
makemodel(layers::Vector{Tuple{Int64, Any}}; bn = false)::Chain

Create a multi-layer perceptron for learning radiative properties with the provided layers. If bn is true, then batch normalization after each layer. The final layer has by default a sigmoid function to ensure physical outputs in range [0, 1].

source
RadCalNet.modelFunction
model(x::Vector{Float32})::Vector{Float32}

Main model interface for emissivity and transmissivity.

source
RadCalNet.plottestsMethod
plottests(trainer::ModelTrainer; num::Int64)

Evaluate model over num data points and compare the data to the expected values as computed from RadCal. Makes use of test data only - never seem by the model during training.

source
RadCalNet.runradcalinputMethod
runradcalinput(;
     X::Dict{String, Float64} = Dict{String, Float64}(),
     T::Float64 = 300.0,
     L::Float64 = 1.0,
@@ -114,4 +114,4 @@
     OMMAX::Float64 = 10000.0,
     TWALL::Float64 = 500.0,
     radcalexe::String = "radcal_win_64.exe"
-)::Vector{Float64}

Create RADCAL.IN from template file and dump to disk.

NOTE: the user is responsible to provide a vector X of mole fractions of species that sums up to one. If this is not respected RADCAL fails. The Following list provides the indexes of available species in vector X.

IndexSpeciesIndexSpeciesIndexSpecies
1CO26C2H611CH3OH
2H2O7C3H612MMA
3CO8C3H813O2
4CH49C7H814N2
5C2H410C7H16
source
RadCalNet.trainonce!Method
trainonce!(trainer::ModelTrainer; num = 1_000)

Train model and keep track of loss for the number of epochs in trainer using its internal data and parameters. Use num data points.

source
+)::Vector{Float64}

Create RADCAL.IN from template file and dump to disk.

NOTE: the user is responsible to provide a vector X of mole fractions of species that sums up to one. If this is not respected RADCAL fails. The Following list provides the indexes of available species in vector X.

IndexSpeciesIndexSpeciesIndexSpecies
1CO26C2H611CH3OH
2H2O7C3H612MMA
3CO8C3H813O2
4CH49C7H814N2
5C2H410C7H16
source
RadCalNet.samplecolsMethod

Get sample of indexes for data retrieval.

source
RadCalNet.testsMethod

Get testing data for data loader construction.

source
RadCalNet.trainMethod

Get training data for data loader construction.

source
RadCalNet.trainonce!Method
trainonce!(trainer::ModelTrainer; num = 1_000)

Train model and keep track of loss for the number of epochs in trainer using its internal data and parameters. Use num data points.

source
diff --git a/dev/References/@Aissa2015a/index.html b/dev/References/@Aissa2015a/index.html index c8a09d6cb..9cf150944 100644 --- a/dev/References/@Aissa2015a/index.html +++ b/dev/References/@Aissa2015a/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

title: Ranz and Marshall correlations limits on heat flow between a sphere and its surrounding gas at high temperature authors: Abderrahmane Aissa, Mohamed Abdelouahab, Abdelkader Noureddine, Mohammed Elganaoui, Bernard Pateyron year: 2015 –-

+- · WallyToolbox.jl

title: Ranz and Marshall correlations limits on heat flow between a sphere and its surrounding gas at high temperature authors: Abderrahmane Aissa, Mohamed Abdelouahab, Abdelkader Noureddine, Mohammed Elganaoui, Bernard Pateyron year: 2015 –-

diff --git a/dev/References/@Antonelo2021a/index.html b/dev/References/@Antonelo2021a/index.html index 9041faf15..561e1a55f 100644 --- a/dev/References/@Antonelo2021a/index.html +++ b/dev/References/@Antonelo2021a/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

title: Physics-informed neural nets for control of dynamical systems authors: Eric Aislan Antonelo, Eduardo Camponogara, Laio Oriel Seman, Eduardo Rehbein de Souza, Jean P. Jordanou, Jomi F. Hubner year: 2021 URL: https://doi.org/10.48550/arXiv.2104.02556 –-

+- · WallyToolbox.jl

title: Physics-informed neural nets for control of dynamical systems authors: Eric Aislan Antonelo, Eduardo Camponogara, Laio Oriel Seman, Eduardo Rehbein de Souza, Jean P. Jordanou, Jomi F. Hubner year: 2021 URL: https://doi.org/10.48550/arXiv.2104.02556 –-

diff --git a/dev/References/@Arthurs2021a/index.html b/dev/References/@Arthurs2021a/index.html index c055a8606..79a00e18e 100644 --- a/dev/References/@Arthurs2021a/index.html +++ b/dev/References/@Arthurs2021a/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

title: Active training of physics-informed neural networks to aggregate and interpolate parametric solutions to the Navier-Stokes equations authors: Christopher J. Arthurs, Andrew P. King year: 2021 URL: https://doi.org/10.1016/j.jcp.2021.110364 Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZla8i8cvFX_ZGzT6Z9A?e=MJdHtJ –-

+- · WallyToolbox.jl

title: Active training of physics-informed neural networks to aggregate and interpolate parametric solutions to the Navier-Stokes equations authors: Christopher J. Arthurs, Andrew P. King year: 2021 URL: https://doi.org/10.1016/j.jcp.2021.110364 Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZla8i8cvFX_ZGzT6Z9A?e=MJdHtJ –-

diff --git a/dev/References/@Balaji2014/index.html b/dev/References/@Balaji2014/index.html index 047643eaa..5060d98c2 100644 --- a/dev/References/@Balaji2014/index.html +++ b/dev/References/@Balaji2014/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

title: Essentials of radiation heat transfer authors: C. Balaji year: 2014 Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZoCdJkJqcjDRZVs9J?e=mbefIU –-

+- · WallyToolbox.jl

title: Essentials of radiation heat transfer authors: C. Balaji year: 2014 Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZoCdJkJqcjDRZVs9J?e=mbefIU –-

diff --git a/dev/References/@Cai2021a/index.html b/dev/References/@Cai2021a/index.html index 00be63028..5d4eb84e7 100644 --- a/dev/References/@Cai2021a/index.html +++ b/dev/References/@Cai2021a/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

title: Physics-informed neural networks for heat transfer problems authors: Shengze Cai, Zhicheng Wang, Sifan Wang, Paris Perdikaris, George Em Karniadakis year: 2021 URL: https://doi.org/10.1115/1.4050542 –-

+- · WallyToolbox.jl

title: Physics-informed neural networks for heat transfer problems authors: Shengze Cai, Zhicheng Wang, Sifan Wang, Paris Perdikaris, George Em Karniadakis year: 2021 URL: https://doi.org/10.1115/1.4050542 –-

diff --git a/dev/References/@Cuomo2022a/index.html b/dev/References/@Cuomo2022a/index.html index 8057ee43b..35c2da68a 100644 --- a/dev/References/@Cuomo2022a/index.html +++ b/dev/References/@Cuomo2022a/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

title: "Scientific machine learning through physics-informed neural networks: Where we are and what's next" authors: Salvatore Cuomo, Vincenzo Schiano di Cola, Fabio Giampaolo, Gianluigi Rozza, Maziar Raissi, Francesco Piccialli year: 2022 DOI: https://doi.org/10.48550/arXiv.2201.05624 –-

+- · WallyToolbox.jl

title: "Scientific machine learning through physics-informed neural networks: Where we are and what's next" authors: Salvatore Cuomo, Vincenzo Schiano di Cola, Fabio Giampaolo, Gianluigi Rozza, Maziar Raissi, Francesco Piccialli year: 2022 DOI: https://doi.org/10.48550/arXiv.2201.05624 –-

diff --git a/dev/References/@Fang2023a/index.html b/dev/References/@Fang2023a/index.html index 3c59cd57a..77cb6818d 100644 --- a/dev/References/@Fang2023a/index.html +++ b/dev/References/@Fang2023a/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

title: "Ensemble learning for physics informed neural networks: a gradient boosting approach" authors: Zhiwei Fang, Sifan Wang, Paris Perdikaris year: 2023 DOI: https://doi.org/10.48550/arXiv.2302.13143 –-

Discussed in [[@Guo2023c]].

+- · WallyToolbox.jl

title: "Ensemble learning for physics informed neural networks: a gradient boosting approach" authors: Zhiwei Fang, Sifan Wang, Paris Perdikaris year: 2023 DOI: https://doi.org/10.48550/arXiv.2302.13143 –-

Discussed in [[@Guo2023c]].

diff --git a/dev/References/@Garaniya2012a/index.html b/dev/References/@Garaniya2012a/index.html index bf895e639..52583baa1 100644 --- a/dev/References/@Garaniya2012a/index.html +++ b/dev/References/@Garaniya2012a/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

title: CFD modelling of heavy fuel oil spray combustion authors: V. Garaniya, L. Goldsworthy year: 2012 URL: https://flair.monash.edu/intranet/proceedings/18afmc/Documents/400%20-%20Garaniya.pdf Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZlbEh7jKBqcgTdikWRQ?e=Zima6B –-

+- · WallyToolbox.jl

title: CFD modelling of heavy fuel oil spray combustion authors: V. Garaniya, L. Goldsworthy year: 2012 URL: https://flair.monash.edu/intranet/proceedings/18afmc/Documents/400%20-%20Garaniya.pdf Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZlbEh7jKBqcgTdikWRQ?e=Zima6B –-

diff --git a/dev/References/@Garaniya2012b/index.html b/dev/References/@Garaniya2012b/index.html index aeeeb8995..2f865f964 100644 --- a/dev/References/@Garaniya2012b/index.html +++ b/dev/References/@Garaniya2012b/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

title: Heavy fuel oil combustion modelling using continuous thermodynamics authors: Vikram Garaniya, Laurie Goldsworthy year: 2012 DOI: https://doi.org/10.5988/jime.47.871 Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZlbEigrD3idko7FKcyQ?e=lNld2R –-

+- · WallyToolbox.jl

title: Heavy fuel oil combustion modelling using continuous thermodynamics authors: Vikram Garaniya, Laurie Goldsworthy year: 2012 DOI: https://doi.org/10.5988/jime.47.871 Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZlbEigrD3idko7FKcyQ?e=lNld2R –-

diff --git a/dev/References/@Gidaspow1994/index.html b/dev/References/@Gidaspow1994/index.html index 03857efcf..e193544d4 100644 --- a/dev/References/@Gidaspow1994/index.html +++ b/dev/References/@Gidaspow1994/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

title: "Multiphase flow and fluidization: continuum and kinetic theory descriptions with applications" authors: Dimitri Gidaspow year: 1994 URL: TODO –-

+- · WallyToolbox.jl

title: "Multiphase flow and fluidization: continuum and kinetic theory descriptions with applications" authors: Dimitri Gidaspow year: 1994 URL: TODO –-

diff --git a/dev/References/@Guo2023a/index.html b/dev/References/@Guo2023a/index.html index 2c5092719..f54807d75 100644 --- a/dev/References/@Guo2023a/index.html +++ b/dev/References/@Guo2023a/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

title: "Unraveling the design pattern of physics-informed neural networks: Series 01" authors: Shuai Guo year: 2023 URL: https://towardsdatascience.com/unraveling-the-design-pattern-of-physics-informed-neural-networks-series-01-8190df459527 –-

In this post, the author discusses the work by [[@Wu2022a]] in what concerns the adaptive (resampling and refinement) residual point distribution to boost training and accuracy.

Approaches:

  • RAD: residual-based adaptive distribution (more expensive)
  • RAR-D: residual-based adaptive refinement with distribution (robust)
  • Both are less useful under smooth solutions (activate when required)

Key idea: resample with a probability proportional to residual

$

p(x) \propto \frac{\varepsilon^k(x)}{𝔼[\varepsilon^k(x)]}+C $

Other references of interest are:

  • [[@Lu2019a]]: residual-based adaptive refinement (RAR-D with high $k$)
  • [[@Nabian2021a]]: importance sampling (RAD with $k=1$ and $c=0$)
+- · WallyToolbox.jl

title: "Unraveling the design pattern of physics-informed neural networks: Series 01" authors: Shuai Guo year: 2023 URL: https://towardsdatascience.com/unraveling-the-design-pattern-of-physics-informed-neural-networks-series-01-8190df459527 –-

In this post, the author discusses the work by [[@Wu2022a]] in what concerns the adaptive (resampling and refinement) residual point distribution to boost training and accuracy.

Approaches:

  • RAD: residual-based adaptive distribution (more expensive)
  • RAR-D: residual-based adaptive refinement with distribution (robust)
  • Both are less useful under smooth solutions (activate when required)

Key idea: resample with a probability proportional to residual

$

p(x) \propto \frac{\varepsilon^k(x)}{𝔼[\varepsilon^k(x)]}+C $

Other references of interest are:

  • [[@Lu2019a]]: residual-based adaptive refinement (RAR-D with high $k$)
  • [[@Nabian2021a]]: importance sampling (RAD with $k=1$ and $c=0$)
diff --git a/dev/References/@Guo2023b/index.html b/dev/References/@Guo2023b/index.html index 5334b5be7..d7102b7ff 100644 --- a/dev/References/@Guo2023b/index.html +++ b/dev/References/@Guo2023b/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

title: "Unraveling the design pattern of physics-informed neural networks: Series 02" authors: Shuai Guo year: 2023 URL: TODO –-

+- · WallyToolbox.jl

title: "Unraveling the design pattern of physics-informed neural networks: Series 02" authors: Shuai Guo year: 2023 URL: TODO –-

diff --git a/dev/References/@Guo2023c/index.html b/dev/References/@Guo2023c/index.html index dd47b937d..711a04623 100644 --- a/dev/References/@Guo2023c/index.html +++ b/dev/References/@Guo2023c/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

title: "Unraveling the design pattern of physics-informed neural networks: Series 03" authors: Shuai Guo year: 2023 URL: https://towardsdatascience.com/unraveling-the-design-pattern-of-physics-informed-neural-networks-part-03-fe365ef480d9 –- Discussed [[@Krishnapriyan2021a]]

+- · WallyToolbox.jl

title: "Unraveling the design pattern of physics-informed neural networks: Series 03" authors: Shuai Guo year: 2023 URL: https://towardsdatascience.com/unraveling-the-design-pattern-of-physics-informed-neural-networks-part-03-fe365ef480d9 –- Discussed [[@Krishnapriyan2021a]]

diff --git a/dev/References/@Guo2023d/index.html b/dev/References/@Guo2023d/index.html index ec1cdbb12..6ba355391 100644 --- a/dev/References/@Guo2023d/index.html +++ b/dev/References/@Guo2023d/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

title: "Unraveling the design pattern of physics-informed neural networks: Series 04" authors: Shuai Guo year: 2023 URL: https://towardsdatascience.com/unraveling-the-design-pattern-of-physics-informed-neural-networks-part-04-c778f4829dde –- Discussed [[@Yu2022a]].

+- · WallyToolbox.jl

title: "Unraveling the design pattern of physics-informed neural networks: Series 04" authors: Shuai Guo year: 2023 URL: https://towardsdatascience.com/unraveling-the-design-pattern-of-physics-informed-neural-networks-part-04-c778f4829dde –- Discussed [[@Yu2022a]].

diff --git a/dev/References/@Guo2023e/index.html b/dev/References/@Guo2023e/index.html index 0e8295b74..935de30ee 100644 --- a/dev/References/@Guo2023e/index.html +++ b/dev/References/@Guo2023e/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

title: "Unraveling the design pattern of physics-informed neural networks: Series 05" authors: Shuai Guo year: 2023 URL: https://towardsdatascience.com/unraveling-the-design-pattern-of-physics-informed-neural-networks-part-05-67a35a984b23 –-

+- · WallyToolbox.jl

title: "Unraveling the design pattern of physics-informed neural networks: Series 05" authors: Shuai Guo year: 2023 URL: https://towardsdatascience.com/unraveling-the-design-pattern-of-physics-informed-neural-networks-part-05-67a35a984b23 –-

diff --git a/dev/References/@Guo2023f/index.html b/dev/References/@Guo2023f/index.html index 77b4e0412..a4434ec51 100644 --- a/dev/References/@Guo2023f/index.html +++ b/dev/References/@Guo2023f/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

title: "Unraveling the design pattern of physics-informed neural networks: Series 06" authors: Shuai Guo year: 2023 URL: https://towardsdatascience.com/unraveling-the-design-pattern-of-physics-informed-neural-networks-part-06-bcb3557199e2 –-

+- · WallyToolbox.jl

title: "Unraveling the design pattern of physics-informed neural networks: Series 06" authors: Shuai Guo year: 2023 URL: https://towardsdatascience.com/unraveling-the-design-pattern-of-physics-informed-neural-networks-part-06-bcb3557199e2 –-

diff --git a/dev/References/@Guo2023g/index.html b/dev/References/@Guo2023g/index.html index 27a6f0af8..7b3414957 100644 --- a/dev/References/@Guo2023g/index.html +++ b/dev/References/@Guo2023g/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

title: "Unraveling the design pattern of physics-informed neural networks: Series 07" authors: Shuai Guo year: 2023 URL: https://towardsdatascience.com/unraveling-the-design-pattern-of-physics-informed-neural-networks-part-07-4ecb543b616a –-

+- · WallyToolbox.jl

title: "Unraveling the design pattern of physics-informed neural networks: Series 07" authors: Shuai Guo year: 2023 URL: https://towardsdatascience.com/unraveling-the-design-pattern-of-physics-informed-neural-networks-part-07-4ecb543b616a –-

diff --git a/dev/References/@Guo2024a/index.html b/dev/References/@Guo2024a/index.html index 6c9c54177..664c237e0 100644 --- a/dev/References/@Guo2024a/index.html +++ b/dev/References/@Guo2024a/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

title: "Physics-informed neural networks: An application-centric guide" authors: Shuai Guo year: 2024 URL: https://towardsdatascience.com/physics-informed-neural-networks-an-application-centric-guide-dc1013526b02 –-

+- · WallyToolbox.jl

title: "Physics-informed neural networks: An application-centric guide" authors: Shuai Guo year: 2024 URL: https://towardsdatascience.com/physics-informed-neural-networks-an-application-centric-guide-dc1013526b02 –-

diff --git a/dev/References/@Haghighat2021sciann/index.html b/dev/References/@Haghighat2021sciann/index.html index a9916b9b9..d32e5e1cb 100644 --- a/dev/References/@Haghighat2021sciann/index.html +++ b/dev/References/@Haghighat2021sciann/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

title: "SciANN: A Keras/TensorFlow wrapper for scientific computations and physics-informed deep learning using artificial neural networks" authors: Ehsan Haghighat, Ruben Juanes year: 2021 DOI: https://doi.org/10.48550/arXiv.2005.08803 –-

+- · WallyToolbox.jl

title: "SciANN: A Keras/TensorFlow wrapper for scientific computations and physics-informed deep learning using artificial neural networks" authors: Ehsan Haghighat, Ruben Juanes year: 2021 DOI: https://doi.org/10.48550/arXiv.2005.08803 –-

diff --git a/dev/References/@Haider1989/index.html b/dev/References/@Haider1989/index.html index c3b3e072f..cb41f2170 100644 --- a/dev/References/@Haider1989/index.html +++ b/dev/References/@Haider1989/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

title: Drag coefficient and terminal velocity of spherical and nonspherical particles authors: A. Haider, O. Levenspiel year: 1989 URL: TODO –-

+- · WallyToolbox.jl

title: Drag coefficient and terminal velocity of spherical and nonspherical particles authors: A. Haider, O. Levenspiel year: 1989 URL: TODO –-

diff --git a/dev/References/@Haitsiukevich2022a/index.html b/dev/References/@Haitsiukevich2022a/index.html index d887f9e6c..eab17d1b4 100644 --- a/dev/References/@Haitsiukevich2022a/index.html +++ b/dev/References/@Haitsiukevich2022a/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

title: Improved training of physics-informed neural networks with model ensembles authors: Katsiaryna Haitsiukevich, Alexander Ilin year: 2022 URL: https://doi.org/10.48550/arXiv.2204.05108 –-

+- · WallyToolbox.jl

title: Improved training of physics-informed neural networks with model ensembles authors: Katsiaryna Haitsiukevich, Alexander Ilin year: 2022 URL: https://doi.org/10.48550/arXiv.2204.05108 –-

diff --git a/dev/References/@Jeong1995a/index.html b/dev/References/@Jeong1995a/index.html index 89fb2383f..796cab8e2 100644 --- a/dev/References/@Jeong1995a/index.html +++ b/dev/References/@Jeong1995a/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

title: On the identification of a vortex authors: Jinhee Jeong, Fazle Hussain year: 1995 URL: https://doi.org/10.1017/S0022112095000462 Drive: –-

+- · WallyToolbox.jl

title: On the identification of a vortex authors: Jinhee Jeong, Fazle Hussain year: 1995 URL: https://doi.org/10.1017/S0022112095000462 Drive: –-

diff --git a/dev/References/@Karniadakis2021a/index.html b/dev/References/@Karniadakis2021a/index.html index e9e32ca08..dba27c2ab 100644 --- a/dev/References/@Karniadakis2021a/index.html +++ b/dev/References/@Karniadakis2021a/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

title: Physics-informed machine learning authors: George Em Karniadakis, Ioannis G. Kevrekidis, Lu Lu, Paris Perdikaris, Sifan Wang, Liu Yang year: 2021 –-

+- · WallyToolbox.jl

title: Physics-informed machine learning authors: George Em Karniadakis, Ioannis G. Kevrekidis, Lu Lu, Paris Perdikaris, Sifan Wang, Liu Yang year: 2021 –-

diff --git a/dev/References/@Krishnapriyan2021a/index.html b/dev/References/@Krishnapriyan2021a/index.html index eb141bf11..8cc0e06fc 100644 --- a/dev/References/@Krishnapriyan2021a/index.html +++ b/dev/References/@Krishnapriyan2021a/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

title: Characterizing possible failure modes in physics-informed neural networks authors: Aditi S. Krishnapriyan, Amir Gholami, Shandian Zhe, Robert M. Kirby, Michael W. Mahoney year: 2021 DOI: https://doi.org/10.48550/arXiv.2109.01050 Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZla8bwpowG74YkMl_tA?e=DmUIjw –-

+- · WallyToolbox.jl

title: Characterizing possible failure modes in physics-informed neural networks authors: Aditi S. Krishnapriyan, Amir Gholami, Shandian Zhe, Robert M. Kirby, Michael W. Mahoney year: 2021 DOI: https://doi.org/10.48550/arXiv.2109.01050 Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZla8bwpowG74YkMl_tA?e=DmUIjw –-

diff --git a/dev/References/@Lagaris1997a/index.html b/dev/References/@Lagaris1997a/index.html index 43db94614..dba91c0e4 100644 --- a/dev/References/@Lagaris1997a/index.html +++ b/dev/References/@Lagaris1997a/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

title: Artificial neural networks for solving ordinary and partial differential equations authors: I. E. Lagaris, A. Likas, D. I. Fotiadis year: 1997 –-

+- · WallyToolbox.jl

title: Artificial neural networks for solving ordinary and partial differential equations authors: I. E. Lagaris, A. Likas, D. I. Fotiadis year: 1997 –-

diff --git a/dev/References/@Launder1974/index.html b/dev/References/@Launder1974/index.html index f85adcba2..c1b34ce0c 100644 --- a/dev/References/@Launder1974/index.html +++ b/dev/References/@Launder1974/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

title: The numerical computation of turbulent flows authors: B. E. Launder, D. B. Spalding year: 1974 –-

+- · WallyToolbox.jl

title: The numerical computation of turbulent flows authors: B. E. Launder, D. B. Spalding year: 1974 –-

diff --git a/dev/References/@Liu1993/index.html b/dev/References/@Liu1993/index.html index 6195315ac..548ea6731 100644 --- a/dev/References/@Liu1993/index.html +++ b/dev/References/@Liu1993/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

title: Modeling the effects of drop drag and breakup on fuel sprays authors: Alex B. Liu, Daniel Mather, Rolf D. Reitz year: 1993 URL: TODO –-

+- · WallyToolbox.jl

title: Modeling the effects of drop drag and breakup on fuel sprays authors: Alex B. Liu, Daniel Mather, Rolf D. Reitz year: 1993 URL: TODO –-

diff --git a/dev/References/@Lu2019a/index.html b/dev/References/@Lu2019a/index.html index 1cb8f222c..e1267867c 100644 --- a/dev/References/@Lu2019a/index.html +++ b/dev/References/@Lu2019a/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

title: "DeepXDE: A deep learning library for solving differential equations" authors: Lu Lu, Xuhui Meng, Zhiping Mao, George E. Karniadakis year: 2019 URL: https://doi.org/10.48550/arXiv.1907.04502 Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZla8eg-cL7mDKg_muqQ?e=hcIqTb –-

+- · WallyToolbox.jl

title: "DeepXDE: A deep learning library for solving differential equations" authors: Lu Lu, Xuhui Meng, Zhiping Mao, George E. Karniadakis year: 2019 URL: https://doi.org/10.48550/arXiv.1907.04502 Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZla8eg-cL7mDKg_muqQ?e=hcIqTb –-

diff --git a/dev/References/@Lu2021a/index.html b/dev/References/@Lu2021a/index.html index 9ee98c2d0..ed8d6e967 100644 --- a/dev/References/@Lu2021a/index.html +++ b/dev/References/@Lu2021a/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

title: Physics-informed neural networks with hard constraints for inverse design authors: Lu Lu, Raphael Pestourie, Wenjie Yao, Zhicheng Wang, Francesc Verdugo, Steven G. Johnson year: 2021 URL: https://doi.org/10.48550/arXiv.2102.04626 –-

+- · WallyToolbox.jl

title: Physics-informed neural networks with hard constraints for inverse design authors: Lu Lu, Raphael Pestourie, Wenjie Yao, Zhicheng Wang, Francesc Verdugo, Steven G. Johnson year: 2021 URL: https://doi.org/10.48550/arXiv.2102.04626 –-

diff --git a/dev/References/@Nabian2021a/index.html b/dev/References/@Nabian2021a/index.html index 987093172..a317f9255 100644 --- a/dev/References/@Nabian2021a/index.html +++ b/dev/References/@Nabian2021a/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

title: Efficient training of physics-informed neural networks via importance sampling authors: Mohammad Amin Nabian, Rini Jasmine Gladstone, Hadi Meidani year: 2021 URL: https://doi.org/10.48550/arXiv.2104.12325 –-

+- · WallyToolbox.jl

title: Efficient training of physics-informed neural networks via importance sampling authors: Mohammad Amin Nabian, Rini Jasmine Gladstone, Hadi Meidani year: 2021 URL: https://doi.org/10.48550/arXiv.2104.12325 –-

diff --git a/dev/References/@Nowruzi2014/index.html b/dev/References/@Nowruzi2014/index.html index 982ee5d47..503a06228 100644 --- a/dev/References/@Nowruzi2014/index.html +++ b/dev/References/@Nowruzi2014/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

title: Numerical simulation of non-evaporating and non-reacting heavy fuel oil injection spray in medium speed engines using OpenFOAM authors: Hashem Nowruzi, Parviz Ghadimi, Mehdi Yousefifard, Mohammad A. Feiz Chekab year: 2014 URL: https://doi.org/10.14810/ijmech.2014.3206 Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZlbEf-L95SgshO8_Nhg?e=jKpxyO –-

+- · WallyToolbox.jl

title: Numerical simulation of non-evaporating and non-reacting heavy fuel oil injection spray in medium speed engines using OpenFOAM authors: Hashem Nowruzi, Parviz Ghadimi, Mehdi Yousefifard, Mohammad A. Feiz Chekab year: 2014 URL: https://doi.org/10.14810/ijmech.2014.3206 Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZlbEf-L95SgshO8_Nhg?e=jKpxyO –-

diff --git a/dev/References/@ORourke2010/index.html b/dev/References/@ORourke2010/index.html index f3d8242aa..c5a0ced37 100644 --- a/dev/References/@ORourke2010/index.html +++ b/dev/References/@ORourke2010/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

title: An improved collision damping time for MP-PIC calculations of dense particle flows with applications to polydisperse sedimenting beds and colliding particle jets authors: Peter J. O’Rourke, Dale M. Snider year: 2010 URL: https://doi.org/10.1016/j.ces.2010.08.032 –-

+- · WallyToolbox.jl

title: An improved collision damping time for MP-PIC calculations of dense particle flows with applications to polydisperse sedimenting beds and colliding particle jets authors: Peter J. O’Rourke, Dale M. Snider year: 2010 URL: https://doi.org/10.1016/j.ces.2010.08.032 –-

diff --git a/dev/References/@Pena2001a/index.html b/dev/References/@Pena2001a/index.html index 05dc029c1..2fad2fa1b 100644 --- a/dev/References/@Pena2001a/index.html +++ b/dev/References/@Pena2001a/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

title: Stability of Turing patterns in the Brusselator model authors: B. Peña, C. Pérez-García year: 2001 URL: https://doi.org/10.1103/PhysRevE.64.056213 Drive: –-

+- · WallyToolbox.jl

title: Stability of Turing patterns in the Brusselator model authors: B. Peña, C. Pérez-García year: 2001 URL: https://doi.org/10.1103/PhysRevE.64.056213 Drive: –-

diff --git a/dev/References/@Plessis1988/index.html b/dev/References/@Plessis1988/index.html index b279d07d2..f37870f4b 100644 --- a/dev/References/@Plessis1988/index.html +++ b/dev/References/@Plessis1988/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

title: Mathematical modelling of flow through consolidated isotropic porous media authors: J. Prieur Du Plessis, Jacob H. Masliyah year: 1988 URL: TODO –-

+- · WallyToolbox.jl

title: Mathematical modelling of flow through consolidated isotropic porous media authors: J. Prieur Du Plessis, Jacob H. Masliyah year: 1988 URL: TODO –-

diff --git a/dev/References/@Raissi2017/index.html b/dev/References/@Raissi2017/index.html index 0a387729d..77f7c0c20 100644 --- a/dev/References/@Raissi2017/index.html +++ b/dev/References/@Raissi2017/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

title: "Physics informed deep learning (part I): Data-driven solutions of nonlinear partial differential equations" authors: Maziar Raissi, Paris Perdikaris, George Em Karniadakis year: 2017 DOI: https://doi.org/10.48550/arXiv.1711.10561 Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZla5YwhmbwapFcSs-8A?e=XiDCyF –-

+- · WallyToolbox.jl

title: "Physics informed deep learning (part I): Data-driven solutions of nonlinear partial differential equations" authors: Maziar Raissi, Paris Perdikaris, George Em Karniadakis year: 2017 DOI: https://doi.org/10.48550/arXiv.1711.10561 Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZla5YwhmbwapFcSs-8A?e=XiDCyF –-

diff --git a/dev/References/@Ranz1952/index.html b/dev/References/@Ranz1952/index.html index 5fd484151..ababec304 100644 --- a/dev/References/@Ranz1952/index.html +++ b/dev/References/@Ranz1952/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

title: Evaporation from drops authors: W. Ranz, W. Marshall year: 1952 –-

+- · WallyToolbox.jl

title: Evaporation from drops authors: W. Ranz, W. Marshall year: 1952 –-

diff --git a/dev/References/@Saario2005a/index.html b/dev/References/@Saario2005a/index.html index e857a14e6..5fb41bbd3 100644 --- a/dev/References/@Saario2005a/index.html +++ b/dev/References/@Saario2005a/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

title: Heavy fuel oil combustion in a cylindrical laboratory furnace: measurements and modeling authors: A. Saario, A. Rebola, P. Coelho, M. Costa, A. Oksanen year: 2005 –-

+- · WallyToolbox.jl

title: Heavy fuel oil combustion in a cylindrical laboratory furnace: measurements and modeling authors: A. Saario, A. Rebola, P. Coelho, M. Costa, A. Oksanen year: 2005 –-

diff --git a/dev/References/@Sanchez2023a/index.html b/dev/References/@Sanchez2023a/index.html index 1d30a65b3..68435f516 100644 --- a/dev/References/@Sanchez2023a/index.html +++ b/dev/References/@Sanchez2023a/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

title: "Biomass combustion modeling using OpenFOAM: Development of a simple computational model and study of the combustion performance of lippia origanoides bagasse" authors: Gabriel Fernando García Sánchez, Jorge Luis Chacón Velasco, David Alfredo Fuentes Díaz, Yesid Javier Rueda-Ordóñez, David Patiño, Juan Jesús Rico, Jairo René Martínez Morales year: 2023 URL: https://doi.org/10.3390/en16062932 Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZlbEgWeJ66H4-cfxBiQ?e=YQGseW –-

+- · WallyToolbox.jl

title: "Biomass combustion modeling using OpenFOAM: Development of a simple computational model and study of the combustion performance of lippia origanoides bagasse" authors: Gabriel Fernando García Sánchez, Jorge Luis Chacón Velasco, David Alfredo Fuentes Díaz, Yesid Javier Rueda-Ordóñez, David Patiño, Juan Jesús Rico, Jairo René Martínez Morales year: 2023 URL: https://doi.org/10.3390/en16062932 Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZlbEgWeJ66H4-cfxBiQ?e=YQGseW –-

diff --git a/dev/References/@Sanyal2022a/index.html b/dev/References/@Sanyal2022a/index.html index 249a26dba..25f0a9a57 100644 --- a/dev/References/@Sanyal2022a/index.html +++ b/dev/References/@Sanyal2022a/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

title: "RAMP-Net: A robust adaptive MPC for quadrotors via physics-informed neural network" authors: Sourav Sanyal, Kaushik Roy year: 2022 URL: https://doi.org/10.48550/arXiv.2209.09025 –-

+- · WallyToolbox.jl

title: "RAMP-Net: A robust adaptive MPC for quadrotors via physics-informed neural network" authors: Sourav Sanyal, Kaushik Roy year: 2022 URL: https://doi.org/10.48550/arXiv.2209.09025 –-

diff --git a/dev/References/@Sweldens1998a/index.html b/dev/References/@Sweldens1998a/index.html index f954051e9..aa177cf0c 100644 --- a/dev/References/@Sweldens1998a/index.html +++ b/dev/References/@Sweldens1998a/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

title: "The lifting scheme: A construction of second generation wavelets" authors: Wim Sweldens year: 1998 URL: https://doi.org/10.1137/S0036141095289051 Drive: –-

+- · WallyToolbox.jl

title: "The lifting scheme: A construction of second generation wavelets" authors: Wim Sweldens year: 1998 URL: https://doi.org/10.1137/S0036141095289051 Drive: –-

diff --git a/dev/References/@Tensorflow2015Whitepaper/index.html b/dev/References/@Tensorflow2015Whitepaper/index.html index e80ef3d4e..ee811241c 100644 --- a/dev/References/@Tensorflow2015Whitepaper/index.html +++ b/dev/References/@Tensorflow2015Whitepaper/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

title: "TensorFlow: Large-scale machine learning on heterogeneous systems" authors: Martín Abadi, Ashish Agarwal, Paul Barham, Eugene Brevdo, Zhifeng Chen, Craig Citro, Greg S. Corrado, Andy Davis, Jeffrey Dean, Matthieu Devin, Sanjay Ghemawat, Ian Goodfellow, Andrew Harp, Geoffrey Irving, Michael Isard, Yangqing Jia, Rafal Jozefowicz, Lukasz Kaiser, Manjunath Kudlur, Josh Levenberg, Dandelion Mané, Rajat Monga, Sherry Moore, Derek Murray, Chris Olah, Mike Schuster, Jonathon Shlens, Benoit Steiner, Ilya Sutskever, Kunal Talwar, Paul Tucker, Vincent Vanhoucke, Vijay Vasudevan, Fernanda Viégas, Oriol Vinyals, Pete Warden, Martin Wattenberg, Martin Wicke, Yuan Yu, Xiaoqiang Zheng year: 2015 DOI: https://doi.org/10.5281/zenodo.4724125 –-

+- · WallyToolbox.jl

title: "TensorFlow: Large-scale machine learning on heterogeneous systems" authors: Martín Abadi, Ashish Agarwal, Paul Barham, Eugene Brevdo, Zhifeng Chen, Craig Citro, Greg S. Corrado, Andy Davis, Jeffrey Dean, Matthieu Devin, Sanjay Ghemawat, Ian Goodfellow, Andrew Harp, Geoffrey Irving, Michael Isard, Yangqing Jia, Rafal Jozefowicz, Lukasz Kaiser, Manjunath Kudlur, Josh Levenberg, Dandelion Mané, Rajat Monga, Sherry Moore, Derek Murray, Chris Olah, Mike Schuster, Jonathon Shlens, Benoit Steiner, Ilya Sutskever, Kunal Talwar, Paul Tucker, Vincent Vanhoucke, Vijay Vasudevan, Fernanda Viégas, Oriol Vinyals, Pete Warden, Martin Wattenberg, Martin Wicke, Yuan Yu, Xiaoqiang Zheng year: 2015 DOI: https://doi.org/10.5281/zenodo.4724125 –-

diff --git a/dev/References/@Wang2022a/index.html b/dev/References/@Wang2022a/index.html index 06318c510..3dbb1314b 100644 --- a/dev/References/@Wang2022a/index.html +++ b/dev/References/@Wang2022a/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

title: Respecting causality is all you need for training physics-informed neural networks authors: Sifan Wang, Shyam Sankaran, Paris Perdikaris year: 2022 URL: https://doi.org/10.48550/arXiv.2203.07404 Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZla8hHROyjqNuK7otnA?e=U8kabk –-

Supporting materials at GitHub.

+- · WallyToolbox.jl

title: Respecting causality is all you need for training physics-informed neural networks authors: Sifan Wang, Shyam Sankaran, Paris Perdikaris year: 2022 URL: https://doi.org/10.48550/arXiv.2203.07404 Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZla8hHROyjqNuK7otnA?e=U8kabk –-

Supporting materials at GitHub.

diff --git a/dev/References/@Wang2023a/index.html b/dev/References/@Wang2023a/index.html index 637646360..d0c8e7dad 100644 --- a/dev/References/@Wang2023a/index.html +++ b/dev/References/@Wang2023a/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

title: "Auto-PINN: Understanding and optimizing physics-informed neural architecture" authors: Yicheng Wang, Xiaotian Han, Chia-Yuan Chang, Daochen Zha, Ulisses Braga-Neto, Xia Hu year: 2023 URL: https://doi.org/10.48550/arXiv.2205.13748 Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZla8gKwrbEVbpOVfBQg?e=5kcaTy –-

+- · WallyToolbox.jl

title: "Auto-PINN: Understanding and optimizing physics-informed neural architecture" authors: Yicheng Wang, Xiaotian Han, Chia-Yuan Chang, Daochen Zha, Ulisses Braga-Neto, Xia Hu year: 2023 URL: https://doi.org/10.48550/arXiv.2205.13748 Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZla8gKwrbEVbpOVfBQg?e=5kcaTy –-

diff --git a/dev/References/@Wu2022a/index.html b/dev/References/@Wu2022a/index.html index 903c7867d..bdc870ba1 100644 --- a/dev/References/@Wu2022a/index.html +++ b/dev/References/@Wu2022a/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

title: A comprehensive study of non-adaptive and residual-based adaptive sampling for physics-informed neural networks authors: Chenxi Wu, Min Zhu, Qinyang Tan, Yadhu Kartha, Lu Lu year: 2022 URL: https://doi.org/10.48550/arXiv.2207.10289 Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZla5WOX3yVxsVYZ1BSQ?e=RJSrB2 –-

+- · WallyToolbox.jl

title: A comprehensive study of non-adaptive and residual-based adaptive sampling for physics-informed neural networks authors: Chenxi Wu, Min Zhu, Qinyang Tan, Yadhu Kartha, Lu Lu year: 2022 URL: https://doi.org/10.48550/arXiv.2207.10289 Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZla5WOX3yVxsVYZ1BSQ?e=RJSrB2 –-

diff --git a/dev/References/@Wurth2023a/index.html b/dev/References/@Wurth2023a/index.html index 4bef311d6..7ce4cfc2e 100644 --- a/dev/References/@Wurth2023a/index.html +++ b/dev/References/@Wurth2023a/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

title: Physics-informed neural networks for data-free surrogate modelling and engineering optimization – An example from composite manufacturing authors: Tobias Würth, Constantin Krauß, Clemens Zimmerling, Luise Kärger year: 2023 URL: https://doi.org/10.5445/IR/1000159290 Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZla5XEQtEiYnlp5ggtA?e=6TW8va –-

  • PINNs are alternative to SBO methods

  • Reference 6: one NN per output

  • Used same weight for all losses (domain, B.C., I.C.)

  • NNs provide automatic jacobian and hessian evaluations, what can be used for great benefit of optimization algorithms

  • Implemented in SciANN [[@Haghighat2021sciann]] wrapper to [[@Tensorflow2015Whitepaper]]

  • Solves the diffusion equation

  • Kamal-Malkin model can be seem as a more general parametrization as JMKA $\rightarrow$ maybe useful in cement hydration modeling?

  • Interesting to write a tutorial about!

+- · WallyToolbox.jl

title: Physics-informed neural networks for data-free surrogate modelling and engineering optimization – An example from composite manufacturing authors: Tobias Würth, Constantin Krauß, Clemens Zimmerling, Luise Kärger year: 2023 URL: https://doi.org/10.5445/IR/1000159290 Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZla5XEQtEiYnlp5ggtA?e=6TW8va –-

  • PINNs are alternative to SBO methods

  • Reference 6: one NN per output

  • Used same weight for all losses (domain, B.C., I.C.)

  • NNs provide automatic jacobian and hessian evaluations, what can be used for great benefit of optimization algorithms

  • Implemented in SciANN [[@Haghighat2021sciann]] wrapper to [[@Tensorflow2015Whitepaper]]

  • Solves the diffusion equation

  • Kamal-Malkin model can be seem as a more general parametrization as JMKA $\rightarrow$ maybe useful in cement hydration modeling?

  • Interesting to write a tutorial about!

diff --git a/dev/References/@Yu2022a/index.html b/dev/References/@Yu2022a/index.html index 154373ad3..32f54fc70 100644 --- a/dev/References/@Yu2022a/index.html +++ b/dev/References/@Yu2022a/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

title: Gradient-enhanced physics-informed neural networks for forward and inverse PDE problems authors: Jeremy Yu, Lu Lu, Xuhui Meng, George Em Karniadakis year: 2022 URL: https://doi.org/10.48550/arXiv.2111.02801 Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZla8fqTeJApcwO8Ng?e=lpsaxB –-

+- · WallyToolbox.jl

title: Gradient-enhanced physics-informed neural networks for forward and inverse PDE problems authors: Jeremy Yu, Lu Lu, Xuhui Meng, George Em Karniadakis year: 2022 URL: https://doi.org/10.48550/arXiv.2111.02801 Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZla8fqTeJApcwO8Ng?e=lpsaxB –-

diff --git a/dev/References/@Zuo2000a/index.html b/dev/References/@Zuo2000a/index.html index 83c7948d0..b9032827d 100644 --- a/dev/References/@Zuo2000a/index.html +++ b/dev/References/@Zuo2000a/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

title: Modelling superheated fuel sprays and vaproization authors: B. Zuo, A. M. Gomes, C. J. Rutland year: 2000 URL: https://doi.org/10.1243/1468087001545218 –-

+- · WallyToolbox.jl

title: Modelling superheated fuel sprays and vaproization authors: B. Zuo, A. M. Gomes, C. J. Rutland year: 2000 URL: https://doi.org/10.1243/1468087001545218 –-

diff --git a/dev/References/index.html b/dev/References/index.html index 44feb6d95..0d7517517 100644 --- a/dev/References/index.html +++ b/dev/References/index.html @@ -1,2 +1,2 @@ -References · WallyToolbox.jl

References

[1]
D. J. Gunn. Transfer of heat or mass to particles in fixed and fluidised beds. International Journal of Heat and Mass Transfer 21, 467–476 (1978).
[2]
H. Kramers and P. Croockewit. The passage of granular solids through inclined rotary kilns. Chemical Engineering Science 1, 259–265 (1952).
[3]
W. L. Grosshandler. Radcal – a narrow-band model for radiation calculations in a combustion environment (National Institute of Standards and Technology, 1993).
[4]
J. P. Gorog, J. K. Brimacombe and T. N. Adams. Radiative heat transfer in rotary kilns. Metallurgical Transactions B 12, 55–70 (1981).
[5]
W. C. Tam and W. W. Yuen. OpenSC: an open-source calculation tool for combustion mixture emissivity/absorptivity (National Institute of Standards and Technology, 2019).
[6]
B. E. Launder and D. B. Spalding. The numerical computation of turbulent flows. Computer Methods in Applied Mechanics and Engineering 3, 269–289 (1974).
[7]
[8]
J. P. Du Plessis and J. H. Masliyah. Mathematical modelling of flow through consolidated isotropic porous media. Transport in Porous Media 3, 145–161 (1988).
[9]
A. B. Liu, D. Mather and R. D. Reitz. Modeling the Effects of Drop Drag and Breakup on Fuel Sprays. In: SAE Technical Paper Series, ANNUAL (SAE International, Mar 1993).
[10]
A. Haider and O. Levenspiel. Drag coefficient and terminal velocity of spherical and nonspherical particles. Powder Technology 58, 63–70 (1989).
[11]
B. Peña and C. Pérez-García. Stability of Turing patterns in the Brusselator model. Physical Review E 64, 056213 (2001).
[12]
W. Sweldens. The Lifting Scheme: A Construction of Second Generation Wavelets. SIAM Journal on Mathematical Analysis 29, 511–546 (1998).
[13]
J. Jeong and F. Hussain. On the identification of a vortex. Journal of Fluid Mechanics 285, 69–94 (1995).
[14]
C. Balaji. Essentials of radiation heat transfer (Wiley, Chichester, 2014).
[15]
P. J. O'Rourke and D. M. Snider. An improved collision damping time for MP-PIC calculations of dense particle flows with applications to polydisperse sedimenting beds and colliding particle jets. Chemical Engineering Science 65, 6014–6028 (2010).
[16]
W. Ranz and W. Marshall. Evaporation from drops. Chemical Engineering Progress 48, 141–146 (1952).
[17]
A. Aissa, M. Abdelouahab, A. Noureddine, M. Elganaoui and B. Pateyron. Ranz and Marshall correlations limits on heat flow between a sphere and its surrounding gas at high temperature. Thermal Science 19, 1521–1528 (2015).
[18]
B. Zuo, A. M. Gomes and C. J. Rutland. Modelling superheated fuel sprays and vaproization. International Journal of Engine Research 1, 321–336 (2000).
+References · WallyToolbox.jl

References

[1]
D. J. Gunn. Transfer of heat or mass to particles in fixed and fluidised beds. International Journal of Heat and Mass Transfer 21, 467–476 (1978).
[2]
H. Kramers and P. Croockewit. The passage of granular solids through inclined rotary kilns. Chemical Engineering Science 1, 259–265 (1952).
[3]
W. L. Grosshandler. Radcal – a narrow-band model for radiation calculations in a combustion environment (National Institute of Standards and Technology, 1993).
[4]
J. P. Gorog, J. K. Brimacombe and T. N. Adams. Radiative heat transfer in rotary kilns. Metallurgical Transactions B 12, 55–70 (1981).
[5]
W. C. Tam and W. W. Yuen. OpenSC: an open-source calculation tool for combustion mixture emissivity/absorptivity (National Institute of Standards and Technology, 2019).
[6]
B. E. Launder and D. B. Spalding. The numerical computation of turbulent flows. Computer Methods in Applied Mechanics and Engineering 3, 269–289 (1974).
[7]
[8]
J. P. Du Plessis and J. H. Masliyah. Mathematical modelling of flow through consolidated isotropic porous media. Transport in Porous Media 3, 145–161 (1988).
[9]
A. B. Liu, D. Mather and R. D. Reitz. Modeling the Effects of Drop Drag and Breakup on Fuel Sprays. In: SAE Technical Paper Series, ANNUAL (SAE International, Mar 1993).
[10]
A. Haider and O. Levenspiel. Drag coefficient and terminal velocity of spherical and nonspherical particles. Powder Technology 58, 63–70 (1989).
[11]
B. Peña and C. Pérez-García. Stability of Turing patterns in the Brusselator model. Physical Review E 64, 056213 (2001).
[12]
W. Sweldens. The Lifting Scheme: A Construction of Second Generation Wavelets. SIAM Journal on Mathematical Analysis 29, 511–546 (1998).
[13]
J. Jeong and F. Hussain. On the identification of a vortex. Journal of Fluid Mechanics 285, 69–94 (1995).
[14]
C. Balaji. Essentials of radiation heat transfer (Wiley, Chichester, 2014).
[15]
P. J. O'Rourke and D. M. Snider. An improved collision damping time for MP-PIC calculations of dense particle flows with applications to polydisperse sedimenting beds and colliding particle jets. Chemical Engineering Science 65, 6014–6028 (2010).
[16]
W. Ranz and W. Marshall. Evaporation from drops. Chemical Engineering Progress 48, 141–146 (1952).
[17]
A. Aissa, M. Abdelouahab, A. Noureddine, M. Elganaoui and B. Pateyron. Ranz and Marshall correlations limits on heat flow between a sphere and its surrounding gas at high temperature. Thermal Science 19, 1521–1528 (2015).
[18]
B. Zuo, A. M. Gomes and C. J. Rutland. Modelling superheated fuel sprays and vaproization. International Journal of Engine Research 1, 321–336 (2000).
diff --git a/dev/Teaching/Ansys Fluent/UDF/index.html b/dev/Teaching/Ansys Fluent/UDF/index.html index b75c06a88..184a15522 100644 --- a/dev/Teaching/Ansys Fluent/UDF/index.html +++ b/dev/Teaching/Ansys Fluent/UDF/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

General purpose

MacroNotes
Data_Valid_PTest if parameters required by UDF have been initialized. It is a good practice to use this macro on top of UDF's to avoid crashes.
MessageDisplays a message, to be used from host.
ErrorDisplay and throw an error message. Compiled only.

Macro parallelization

MacroNotes
PRINCIPAL_FACE_PWhen looping across faces in a thread using begin_f_loop (or another equivalent macro) in a parallel setting, we might access elements that actually belong to other nodes (because of how MPI works). This macro allows us to check the current face is part of the chunk belonging to current node, what allows us to avoid computing a quantity multiple times, leading to wrong results. Compiled only.
RP_HOSTUsed in #if directives to tell code must be evaluated only in host.
RP_NODEUsed in #if directives to tell code must be evaluated only in nodes.
PRF_GRSUM1Performs aggregation of real R values through sum SUM1. This function is called in nodes and there are other cousins for different aggregations.
node_to_host_{type}_{n}Pass n values of type from node to host. It is called after, e.g. aggregations such as PRF_GRSUM1 are used in node. There is also an equivalent host_to_node_{type}_{n}.
+- · WallyToolbox.jl

General purpose

MacroNotes
Data_Valid_PTest if parameters required by UDF have been initialized. It is a good practice to use this macro on top of UDF's to avoid crashes.
MessageDisplays a message, to be used from host.
ErrorDisplay and throw an error message. Compiled only.

Macro parallelization

MacroNotes
PRINCIPAL_FACE_PWhen looping across faces in a thread using begin_f_loop (or another equivalent macro) in a parallel setting, we might access elements that actually belong to other nodes (because of how MPI works). This macro allows us to check the current face is part of the chunk belonging to current node, what allows us to avoid computing a quantity multiple times, leading to wrong results. Compiled only.
RP_HOSTUsed in #if directives to tell code must be evaluated only in host.
RP_NODEUsed in #if directives to tell code must be evaluated only in nodes.
PRF_GRSUM1Performs aggregation of real R values through sum SUM1. This function is called in nodes and there are other cousins for different aggregations.
node_to_host_{type}_{n}Pass n values of type from node to host. It is called after, e.g. aggregations such as PRF_GRSUM1 are used in node. There is also an equivalent host_to_node_{type}_{n}.
diff --git a/dev/Teaching/Basilisk/Basilisk/index.html b/dev/Teaching/Basilisk/Basilisk/index.html index 9de5ef275..3925501f8 100644 --- a/dev/Teaching/Basilisk/Basilisk/index.html +++ b/dev/Teaching/Basilisk/Basilisk/index.html @@ -18,4 +18,4 @@ init_grid(1 << LEVEL); ... run(); -}

Parallel computing

Currently I have not tried Basilisk in parallel (actually I did so a few years back but don't really remember the steps). Since there is no dedicated tutorial for going parallel, here are the notes I am taking for writing something in that sense:

+}

Parallel computing

Currently I have not tried Basilisk in parallel (actually I did so a few years back but don't really remember the steps). Since there is no dedicated tutorial for going parallel, here are the notes I am taking for writing something in that sense:

diff --git a/dev/Teaching/Basilisk/Documentation/index.html b/dev/Teaching/Basilisk/Documentation/index.html index abadd42e4..4bff5bdef 100644 --- a/dev/Teaching/Basilisk/Documentation/index.html +++ b/dev/Teaching/Basilisk/Documentation/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

Built-in solvers

Basic component solvers:

It is upon these that the Navier-Stokes equation can be assembled in:

HeaderDescription
navier-stokes/stream.hSolves a 2D incompressible, constant density, constant viscosity Navier-Stokes equation formulated in the vorticity $\omega$. This is and advection-diffusion equation solved with a flux-based advection scheme in advection.h. Given its form, the stream function $\psi$ is solver through the poisson.h solver.
navier-stokes/centered.h
navier-stokes/perfs.hNot a solver by itself, it supports other headers under the Navier-Stokes family to follow performance during solution.

Other equations:

Headers files

FileUsage
common.h
distance.h
embed.hAllow the creation of general shape boundary conditions inside the domain.
fractions.h
lambda2.hDetection of vortex using the criteria by [[@Jeong1995a]] [13]
run.hA generic time loop which executes until termination (to be avoided!).
tracer.hProvides an event to integrate the advection of tracer elements.
utils.h
view.h
FileUsage
grid/cartesian.h
grid/multigrid.h
grid/octree.h
grid/bitree.h

Data types

  • scalar
  • vector
  • face
  • msgstats convergence statistics of (multigrid?) solver.

Functions

FunctionDefinitionUses
origincommon.hSet the origin of cartesian system.
init_gridgrid/ (overloaded)Level of refinement (size) of initial grid.
size
periodicSet periodic boundary conditions.
statsfutils.hRetrieve statistics of a scalar field.
output_ppmoutput.hGenerate a image and video output.
adapt_waveletgrid/tree-common.hAdaptive grid refinement routine.
runrun.h (overloaded)Generic time loop for events execution.
noiseGenerate random noise in $[-1; 1]$.
swapSwap values of two scalar arrays.
input_stldistance.hRead an STL file as an array of triplets.
bounding_boxdistance.hDetermines the bounding box of inputs (segments or triangles).
distancedistance.hDistance to coordinate.
viewdraw.hSetup of viewing (camera) parameters.
isosurfacedraw.hDisplays an isosurface of a field.
draw_vofdraw.hDisplay VOF reconstructed interfaces.
cleardraw.hRemoves previous objects.
saveview.hDumps image(s) to file.
refine_biquadradicgrid/multigrid-common.h
waveletgrid/multigrid-common.h
inverse_waveletgrid/multigrid-common.h
boundary_level
unrefine
vorticityutils.hComputes the vorticity from a velocity field.
+- · WallyToolbox.jl

Built-in solvers

Basic component solvers:

It is upon these that the Navier-Stokes equation can be assembled in:

HeaderDescription
navier-stokes/stream.hSolves a 2D incompressible, constant density, constant viscosity Navier-Stokes equation formulated in the vorticity $\omega$. This is and advection-diffusion equation solved with a flux-based advection scheme in advection.h. Given its form, the stream function $\psi$ is solver through the poisson.h solver.
navier-stokes/centered.h
navier-stokes/perfs.hNot a solver by itself, it supports other headers under the Navier-Stokes family to follow performance during solution.

Other equations:

Headers files

FileUsage
common.h
distance.h
embed.hAllow the creation of general shape boundary conditions inside the domain.
fractions.h
lambda2.hDetection of vortex using the criteria by [[@Jeong1995a]] [13]
run.hA generic time loop which executes until termination (to be avoided!).
tracer.hProvides an event to integrate the advection of tracer elements.
utils.h
view.h
FileUsage
grid/cartesian.h
grid/multigrid.h
grid/octree.h
grid/bitree.h

Data types

  • scalar
  • vector
  • face
  • msgstats convergence statistics of (multigrid?) solver.

Functions

FunctionDefinitionUses
origincommon.hSet the origin of cartesian system.
init_gridgrid/ (overloaded)Level of refinement (size) of initial grid.
size
periodicSet periodic boundary conditions.
statsfutils.hRetrieve statistics of a scalar field.
output_ppmoutput.hGenerate a image and video output.
adapt_waveletgrid/tree-common.hAdaptive grid refinement routine.
runrun.h (overloaded)Generic time loop for events execution.
noiseGenerate random noise in $[-1; 1]$.
swapSwap values of two scalar arrays.
input_stldistance.hRead an STL file as an array of triplets.
bounding_boxdistance.hDetermines the bounding box of inputs (segments or triangles).
distancedistance.hDistance to coordinate.
viewdraw.hSetup of viewing (camera) parameters.
isosurfacedraw.hDisplays an isosurface of a field.
draw_vofdraw.hDisplay VOF reconstructed interfaces.
cleardraw.hRemoves previous objects.
saveview.hDumps image(s) to file.
refine_biquadradicgrid/multigrid-common.h
waveletgrid/multigrid-common.h
inverse_waveletgrid/multigrid-common.h
boundary_level
unrefine
vorticityutils.hComputes the vorticity from a velocity field.
diff --git a/dev/Teaching/Basilisk/Draft/index.html b/dev/Teaching/Basilisk/Draft/index.html index 37763554f..07e976fa3 100644 --- a/dev/Teaching/Basilisk/Draft/index.html +++ b/dev/Teaching/Basilisk/Draft/index.html @@ -17,4 +17,4 @@ - [ ] Rising bubble in fluid
- [ ] Running simulations in parallel
 - [ ] Evaporation and combustion in sandbox
 - [ ] Examples with [granular flows](http://basilisk.fr/sandbox/M1EMN/README#examples-of-granular-flows) and [silos](http://basilisk.fr/sandbox/M1EMN/Exemples/granular_sandglass.c)
-- [ ] Rising bubble with granular flow

Commented examples## Teaching plan

Week 1

Week 2

Week 3

Week 4

Week 5

Week 6

+- [ ] Rising bubble with granular flow

Commented examples## Teaching plan

Week 1

Week 2

Week 3

Week 4

Week 5

Week 6

diff --git a/dev/Teaching/Basilisk/Tutorials/index.html b/dev/Teaching/Basilisk/Tutorials/index.html index 57479d6e0..359541e88 100644 --- a/dev/Teaching/Basilisk/Tutorials/index.html +++ b/dev/Teaching/Basilisk/Tutorials/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

Introductory

Basilisk basics

ReferenceTutorial
Code01-Tutorial-Basics
NotesBasilisk is a conceptual solver for investigating problems in a Cartesian domain.<br><br>Different steps of the simulations are set by event's, which use a specific syntax do indicate whether they depend on a time or iteration condition. These steps might include setup of initial conditions, storage of intermediate results or solution, grid refinement, etc.<br><br>For iterating over arrays Basilisk provides a foreach()loop extending the C-language.<br><br>A standard Makefile is provided by Basilisk for managing common workflows.<br><br>Check the tips.

Game of life

ReferenceConway’s game of life
Code02-Game-of-life
NotesA simple implementation of Conway's game of life to get used with syntax.

Brusselator

ReferenceCoupled reaction-diffusion equations
Code03-Brusselator
NotesSolves the 2D Brusselator, a theoretical autocatalytic reaction diffusion system. The set of parameters used in the study for the stable Turin points where the ones proposed by ([[@Pena2001a]]) [11]. Interesting material for preparing courses extending this to other oscillating systems can be found here.

Ginzburg-Landau

ReferenceThe complex Ginzburg-Landau equation
Code04-Ginzburg-Landau
NotesSolves the complex Ginzburg-Landau equation describing the nonlinear evolution of disturbances near the transition from a stable to unstable state of a system. Additional materials are provided here. It would be a good project to include the term $\alpha$ in the equation and the Laplacian term that goes with it.

Distance field

ReferenceDistance field computation from a 3D model
Code05-Distance-Field
NotesThis can be seen as a particular case of pre-/post-processing. It can prove useful when initializing domains with scanned surfaces in STL or other compatible format. Additional steps must be taken for compilation with rendering (modifications to Makefile). Iteration over dimensions can be done with foreach_dimension().

Wavelet transform

ReferenceWavelet transforms and filtering
Code06-Wavelet-Transform
NotesProvides a tutorial on wavelet transform and associated filters. It is presented as the basis to understand mesh adaptation in Basilisk. Recommended reading of ([[@Sweldens1998a]]) [12].

Decaying turbulence

ReferenceDecaying two-dimensional turbulence
Code07-Decaying-Turbulence
NotesFor solving Euler equation with vorticity-stream formulation one uses header file navier-stokes/stream.h. The examples makes a first usage of dimensional quantities for vorticity initialization.

Vortex street

ReferenceBénard–von Kármán Vortex Street for flow around a cylinder
Code08-Vortex-Street
NotesSolves the flow around a solid object using the navier-stokes/centered.h solver and introduced the use of passive scalars (tracer). Notice we modify L0, which among many other magic variables is defined in common.h. Illustrates the use of solid and intersection to accomplish complex domains.

Vortex shedding

ReferenceVortex shedding behind a sphere
Code09-Vortex-Shedding
NotesSolution of Navier-Stokes equations in an adaptive domain embedding an sphere. Vortex detection is made with functionalities from lambda2.h implemented following ([[@Jeong1995a]]) [13].

Porous medium

ReferenceStokes flow through a complex 3D porous medium
Code10-Porous-Medium
Notes

Periodic box

ReferenceForced isotropic turbulence in a triply-periodic box
Code11-Periodic-Box
Notes

Two-phase flows

Pulsed atomization

ReferenceAtomisation of a pulsed liquid jet
Code12-Pulsed-Atomisation
Notes

Bubble rising

ReferenceBubble rising in a large tank
Code13-Bubble-Rising
Notes

Rotating cylinder

ReferenceFlow in a rotating bottom-driven cylindrical container
Code14-Rotating-Cylinder
Notes

Moving Tangaroa

ReferenceTwo-phase flow around RV Tangaroa
Code15-Moving-Tangaroa
Notes

Geophysical applications

Indian Tsunami

ReferenceThe 2004 Indian Ocean tsunami
Code16-Indian-Tsunami
Notes

Tohoku Tsunami

ReferenceThe 2011 Tohoku tsunami
Code17-Tohoku-Tsunami
Notes

Train of Solitons

ReferenceBreakup of a rectangular perturbation into a train of solitons
Code18-Train-of-Solitons
Notes

Lee Waves

ReferenceTidally-induced internal lee waves
Code19-Lee-Waves
Notes

Ellipsoidal Shoal

ReferencePeriodic wave propagation over an ellipsoidal shoal
Code20-Ellipsoidal-Shoal
Notes

Ellipsoidal Shoal Multilayer

ReferencePeriodic wave propagation over an ellipsoidal shoal (multilayer)
Code21-Ellipsoidal-Shoal-Multilayer
NotesCheck for source code in current version.

Stokes Wave

Reference3D breaking Stokes wave (multilayer solver)
Code22-Stokes-Wave
Notes

Transcritical Flow

ReferenceTranscritical flow over a bump
Code23-Transcritical-Flow
Notes

Shock Instability

ReferenceA Shallow Water Analogue for the Standing Accretion Shock Instability
Code24-Shock-Instability
Notes

Python interface

Basic usage

ReferencePython interface
Code25-Python-Interface
Notes

Poisson equation

ReferencePoisson problem with Python
Code26-Python-Poisson
Notes
+- · WallyToolbox.jl

Introductory

Basilisk basics

ReferenceTutorial
Code01-Tutorial-Basics
NotesBasilisk is a conceptual solver for investigating problems in a Cartesian domain.<br><br>Different steps of the simulations are set by event's, which use a specific syntax do indicate whether they depend on a time or iteration condition. These steps might include setup of initial conditions, storage of intermediate results or solution, grid refinement, etc.<br><br>For iterating over arrays Basilisk provides a foreach()loop extending the C-language.<br><br>A standard Makefile is provided by Basilisk for managing common workflows.<br><br>Check the tips.

Game of life

ReferenceConway’s game of life
Code02-Game-of-life
NotesA simple implementation of Conway's game of life to get used with syntax.

Brusselator

ReferenceCoupled reaction-diffusion equations
Code03-Brusselator
NotesSolves the 2D Brusselator, a theoretical autocatalytic reaction diffusion system. The set of parameters used in the study for the stable Turin points where the ones proposed by ([[@Pena2001a]]) [11]. Interesting material for preparing courses extending this to other oscillating systems can be found here.

Ginzburg-Landau

ReferenceThe complex Ginzburg-Landau equation
Code04-Ginzburg-Landau
NotesSolves the complex Ginzburg-Landau equation describing the nonlinear evolution of disturbances near the transition from a stable to unstable state of a system. Additional materials are provided here. It would be a good project to include the term $\alpha$ in the equation and the Laplacian term that goes with it.

Distance field

ReferenceDistance field computation from a 3D model
Code05-Distance-Field
NotesThis can be seen as a particular case of pre-/post-processing. It can prove useful when initializing domains with scanned surfaces in STL or other compatible format. Additional steps must be taken for compilation with rendering (modifications to Makefile). Iteration over dimensions can be done with foreach_dimension().

Wavelet transform

ReferenceWavelet transforms and filtering
Code06-Wavelet-Transform
NotesProvides a tutorial on wavelet transform and associated filters. It is presented as the basis to understand mesh adaptation in Basilisk. Recommended reading of ([[@Sweldens1998a]]) [12].

Decaying turbulence

ReferenceDecaying two-dimensional turbulence
Code07-Decaying-Turbulence
NotesFor solving Euler equation with vorticity-stream formulation one uses header file navier-stokes/stream.h. The examples makes a first usage of dimensional quantities for vorticity initialization.

Vortex street

ReferenceBénard–von Kármán Vortex Street for flow around a cylinder
Code08-Vortex-Street
NotesSolves the flow around a solid object using the navier-stokes/centered.h solver and introduced the use of passive scalars (tracer). Notice we modify L0, which among many other magic variables is defined in common.h. Illustrates the use of solid and intersection to accomplish complex domains.

Vortex shedding

ReferenceVortex shedding behind a sphere
Code09-Vortex-Shedding
NotesSolution of Navier-Stokes equations in an adaptive domain embedding an sphere. Vortex detection is made with functionalities from lambda2.h implemented following ([[@Jeong1995a]]) [13].

Porous medium

ReferenceStokes flow through a complex 3D porous medium
Code10-Porous-Medium
Notes

Periodic box

ReferenceForced isotropic turbulence in a triply-periodic box
Code11-Periodic-Box
Notes

Two-phase flows

Pulsed atomization

ReferenceAtomisation of a pulsed liquid jet
Code12-Pulsed-Atomisation
Notes

Bubble rising

ReferenceBubble rising in a large tank
Code13-Bubble-Rising
Notes

Rotating cylinder

ReferenceFlow in a rotating bottom-driven cylindrical container
Code14-Rotating-Cylinder
Notes

Moving Tangaroa

ReferenceTwo-phase flow around RV Tangaroa
Code15-Moving-Tangaroa
Notes

Geophysical applications

Indian Tsunami

ReferenceThe 2004 Indian Ocean tsunami
Code16-Indian-Tsunami
Notes

Tohoku Tsunami

ReferenceThe 2011 Tohoku tsunami
Code17-Tohoku-Tsunami
Notes

Train of Solitons

ReferenceBreakup of a rectangular perturbation into a train of solitons
Code18-Train-of-Solitons
Notes

Lee Waves

ReferenceTidally-induced internal lee waves
Code19-Lee-Waves
Notes

Ellipsoidal Shoal

ReferencePeriodic wave propagation over an ellipsoidal shoal
Code20-Ellipsoidal-Shoal
Notes

Ellipsoidal Shoal Multilayer

ReferencePeriodic wave propagation over an ellipsoidal shoal (multilayer)
Code21-Ellipsoidal-Shoal-Multilayer
NotesCheck for source code in current version.

Stokes Wave

Reference3D breaking Stokes wave (multilayer solver)
Code22-Stokes-Wave
Notes

Transcritical Flow

ReferenceTranscritical flow over a bump
Code23-Transcritical-Flow
Notes

Shock Instability

ReferenceA Shallow Water Analogue for the Standing Accretion Shock Instability
Code24-Shock-Instability
Notes

Python interface

Basic usage

ReferencePython interface
Code25-Python-Interface
Notes

Poisson equation

ReferencePoisson problem with Python
Code26-Python-Poisson
Notes
diff --git a/dev/Teaching/Machine Learning/Data-Driven/index.html b/dev/Teaching/Machine Learning/Data-Driven/index.html index 8f4537e18..d513fc1f3 100644 --- a/dev/Teaching/Machine Learning/Data-Driven/index.html +++ b/dev/Teaching/Machine Learning/Data-Driven/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

Notes based on Data-Driven Science and Engineering by Steven L. Brunton and J. Nathan Kurz. Their proposed teaching materials for the book can be found here. Supplementary notes that might be useful for understanding the concepts are provided in course AMATH301. The set of open source materials proposed by Kurz's team is found here.

Singular Value Decomposition

Fourier and Wavelet Transforms

Sparsity and Compressed Sensing

Regression and Model Selection

Clustering and Classification

Neural Networks and Deep Learning

Data-Driven Dynamical Systems

Linear Control Theory

Balanced Models for Control

Data-Driven Control

Reduced Order Models (ROMs)

POD for Partial Differential equations (11.1)

  • Proxy models are much faster (lower dimensional)
  • Classical discretization (FD) lead to high dimensional schemes
  • Model expansion can produce much lower dimension problems
$$u(x,t) = \sum_{k=1}^{n}a_{k}(t)\psi_k(x)$$
  • Idea: plug the modal expansion in the PDE and expand it
  • With modal basis the approximations are non-local (global)
  • Option 1: Fourier mode expansion - FFT
$$\psi_k(x)=\frac{1}{L}\exp\left(i\frac{2\pi{}kx}{L}\right)$$
  • Goal: try to approximate with $r$ basis instead of large $n$
  • Example: try to approximate a Gaussian with FME
  • Localized structures require more expansion modes
  • Construction similar to spectral methods

Optimal Basis Elements (11.2)

  • Key idea: simulate the dynamics of the system and save snapshots of time-step solutions to then identify a modal expansion.
  • The $\tilde{U}$ POD basis $\psi_k$ found by truncating the SVD matrix $U$ at rank $r$ is the optimal in the $L^2$ sense for the given data.
  • Use energy accumulated in modes as discussed in Chapter 1 Singular Value Decomposition to define the optimal (or good enough) value of $r$.
  • The produced ROM is not assured to be safe outside the subspace to which it was identified, though that is fine for several physics.

POD and Soliton Dynamics (11.3)

Continuous Formulation of POD

POD with Symmetries

Interpolation for Parametric ROMs

Additional materials

Professor Nick Trefethen, University of Oxford, Linear Algebra Optimization

+- · WallyToolbox.jl

Notes based on Data-Driven Science and Engineering by Steven L. Brunton and J. Nathan Kurz. Their proposed teaching materials for the book can be found here. Supplementary notes that might be useful for understanding the concepts are provided in course AMATH301. The set of open source materials proposed by Kurz's team is found here.

Singular Value Decomposition

Fourier and Wavelet Transforms

Sparsity and Compressed Sensing

Regression and Model Selection

Clustering and Classification

Neural Networks and Deep Learning

Data-Driven Dynamical Systems

Linear Control Theory

Balanced Models for Control

Data-Driven Control

Reduced Order Models (ROMs)

POD for Partial Differential equations (11.1)

  • Proxy models are much faster (lower dimensional)
  • Classical discretization (FD) lead to high dimensional schemes
  • Model expansion can produce much lower dimension problems
$$u(x,t) = \sum_{k=1}^{n}a_{k}(t)\psi_k(x)$$
  • Idea: plug the modal expansion in the PDE and expand it
  • With modal basis the approximations are non-local (global)
  • Option 1: Fourier mode expansion - FFT
$$\psi_k(x)=\frac{1}{L}\exp\left(i\frac{2\pi{}kx}{L}\right)$$
  • Goal: try to approximate with $r$ basis instead of large $n$
  • Example: try to approximate a Gaussian with FME
  • Localized structures require more expansion modes
  • Construction similar to spectral methods

Optimal Basis Elements (11.2)

  • Key idea: simulate the dynamics of the system and save snapshots of time-step solutions to then identify a modal expansion.
  • The $\tilde{U}$ POD basis $\psi_k$ found by truncating the SVD matrix $U$ at rank $r$ is the optimal in the $L^2$ sense for the given data.
  • Use energy accumulated in modes as discussed in Chapter 1 Singular Value Decomposition to define the optimal (or good enough) value of $r$.
  • The produced ROM is not assured to be safe outside the subspace to which it was identified, though that is fine for several physics.

POD and Soliton Dynamics (11.3)

Continuous Formulation of POD

POD with Symmetries

Interpolation for Parametric ROMs

Additional materials

Professor Nick Trefethen, University of Oxford, Linear Algebra Optimization

diff --git a/dev/Teaching/Machine Learning/PINNs/index.html b/dev/Teaching/Machine Learning/PINNs/index.html index 5fa11ee65..f0a3e8e22 100644 --- a/dev/Teaching/Machine Learning/PINNs/index.html +++ b/dev/Teaching/Machine Learning/PINNs/index.html @@ -3,4 +3,4 @@ - Acceleration of multi-physics simulations
- Surrogate models for design optimization
 - Inverse design (finding conditions)
 - Model predictive control
-- Optimal sensor placement

Key Ideas

Research opportunities

References

Unraveling the design pattern of physics-informed neural networks:

PostSubjectMain reference(s)
[[@Guo2023a]]Resampling of residual points[[@Wu2022a]]
[[@Guo2023b]]Ensemble learning and dynamic solution interval expansion[[@Haitsiukevich2022a]]
[[@Guo2023c]]Improving performance through gradient boosting[[@Fang2023a]]
[[@Guo2023d]]Incorporate the gradient of residual terms as an additional loss term for stiff problems[[@Yu2022a]]
[[@Guo2023e]][[@Wang2023a]]
[[@Guo2023f]][[@Wang2022a]]
[[@Guo2023g]][[@Arthurs2021a]]
ReferenceSubject
[[@Lagaris1997a]]Seminal work on PINNs.
[[@Antonelo2021a]]
[[@Cai2021a]]
[[@Cuomo2022a]]
[[@Haitsiukevich2022a]]
[[@Karniadakis2021a]]
[[@Lu2019a]]
[[@Lu2021a]]
[[@Nabian2021a]]
[[@Sanyal2022a]]
[[@Wurth2023a]]Use of PINNs to solve diffusion equation (heat transfer) during the curing of composites. The paper is more focused in the application than in the implementation. Benchmark against FDM/FEM.

Other current readings:

+- Optimal sensor placement

Key Ideas

Research opportunities

References

Unraveling the design pattern of physics-informed neural networks:

PostSubjectMain reference(s)
[[@Guo2023a]]Resampling of residual points[[@Wu2022a]]
[[@Guo2023b]]Ensemble learning and dynamic solution interval expansion[[@Haitsiukevich2022a]]
[[@Guo2023c]]Improving performance through gradient boosting[[@Fang2023a]]
[[@Guo2023d]]Incorporate the gradient of residual terms as an additional loss term for stiff problems[[@Yu2022a]]
[[@Guo2023e]][[@Wang2023a]]
[[@Guo2023f]][[@Wang2022a]]
[[@Guo2023g]][[@Arthurs2021a]]
ReferenceSubject
[[@Lagaris1997a]]Seminal work on PINNs.
[[@Antonelo2021a]]
[[@Cai2021a]]
[[@Cuomo2022a]]
[[@Haitsiukevich2022a]]
[[@Karniadakis2021a]]
[[@Lu2019a]]
[[@Lu2021a]]
[[@Nabian2021a]]
[[@Sanyal2022a]]
[[@Wurth2023a]]Use of PINNs to solve diffusion equation (heat transfer) during the curing of composites. The paper is more focused in the application than in the implementation. Benchmark against FDM/FEM.

Other current readings:

diff --git a/dev/Teaching/Machine Learning/index.html b/dev/Teaching/Machine Learning/index.html index d8cf7bc0a..eb78c8ef8 100644 --- a/dev/Teaching/Machine Learning/index.html +++ b/dev/Teaching/Machine Learning/index.html @@ -1,2 +1,2 @@ -Machine Learning · WallyToolbox.jl
+Machine Learning · WallyToolbox.jl
diff --git a/dev/Teaching/OpenFOAM/Cases/aachenBombSteady/index.html b/dev/Teaching/OpenFOAM/Cases/aachenBombSteady/index.html index d22c11e34..3c75a4e8c 100644 --- a/dev/Teaching/OpenFOAM/Cases/aachenBombSteady/index.html +++ b/dev/Teaching/OpenFOAM/Cases/aachenBombSteady/index.html @@ -22,4 +22,4 @@ C2 1.92; C3 0; sigmak 1; -sigmaEps 1.3;

Reminders

Initial tentative setup

+sigmaEps 1.3;

Reminders

Initial tentative setup

diff --git a/dev/Teaching/OpenFOAM/Cases/horizontalMixer/index.html b/dev/Teaching/OpenFOAM/Cases/horizontalMixer/index.html index 8feb6a28e..a1df34723 100644 --- a/dev/Teaching/OpenFOAM/Cases/horizontalMixer/index.html +++ b/dev/Teaching/OpenFOAM/Cases/horizontalMixer/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

The following numerical experiments concern the horizontalMixer sample case.

Conceptual phase

Minimal working examples:

  • 000: no models active other than patchInteraction rebound.

Case 000

  • 001: no models active other than patchInteraction standardWallInteraction.

Case 001

  • 002: no models active other than patchInteraction localInteraction.

Case 002

If there are outlets in the system, rebound model is not suitable. Because of this, all the next cases, unless stated otherwise, will use localInteraction given the better control it provides over individual patches with respect to standardWallInteraction (although it is much slower than the latter).

  • 007: compare solution for same (approximate) mass flow with using multiple particles per parcel - with respect to the single particle per parcel performed in the reference case 002. The overall cloud shape remains the same but some spatial resolution is lost. For conception studies it seems valid to use a higher number of particles per parcel.

Case 007

Using the basic patchInteraction localInteraction add these variants (notice that the option none for all these models is already covered by the reference case 002. After comparing cases 002 and 007 the following variants were modified to match 007 as a reference case given the much lower computational time (more particles per parcel).

  • 003: packingModel explicit.

Case 003

  • 004: packingModel implicit.

Case 004

  • 005: dampingModel relaxation. Particle velocities are relaxed towards the local mean over a time-scale. Notice that reference paper intended to improve MP-PIC for polydisperse sedimenting particle clouds.

Case 005

  • 006 isotropyModel stochastic. According to the reference paper collisions cause numerical particles to scatter in MP-PIC calculations, just as physical particles do in particle/fluid flows, just as the generated animation implies.

Case 006

Implicit packing so far is the only model for which particles left the system and turbulence effects and segregation becomes apparent. In fact without implicit packing the results do not even look physical, so it is probably a requirement to activate this model. Damping and isotropy models produce similar results, with a little more dispersed cloud when isotropy is active, as stated above from its reference.

Hypotheses testing cases:

  • 008: modify case 004 to test if with rebound patch interaction particles are able to quit the system. Confirmed that this patch interaction does not handle outlets.

Case 008

  • 009: modify case 004 to test if with standardWallInteraction patch interaction particles are able to quit the system. Confirmed that this patch interaction does handle outlets similarly to the localInteraction. It was not possible to confirm if inlets also allow backflow since reporting is not provided by patch.

Case 009

  • 010: check the role of gravity option over implicit packing model. Here we derive a variant of 009 because it runs faster than with localInteraction.

Case 010

  • 011: in fact the role of gravity in 010 was pretty devastating over the sedimentation rate (quite unexpected given the particle sizes that were used) so a variant of this case was manually initialized from last state and left to run for a much longer physical time (100 s) using maxCo 2.0 for faster execution. CALCULATION DIVERGED, REDO!

Physical refinement phase

ModelTakings
InjectionModelCONFIRM CONCLUSIONS WITH POLYDISTRIBUTED CLOUDS (particles per parcel)!
PatchInteractionModelThis model is key for the simulation of particles coupled to a fluid. Unless different behavior is expected in the different walls so customization of interaction is required, it is much faster to use a standardWallInteraction approach. For understanding the role of parameters e and mu over rebound one can check lines 144-168 of source code and confirm the model is the same as the one implemented in localInteraction in lines 366-391 of sources.
PackingModel
DampingModel
IsotropyModel
ParticleForceThis will be discussed in this section.

Solution with different drag models:

ModelResults
sphereDragCase 012 012
WenYuDrag (used in injectionChannel) implemented from equation (2.12) of ([[@Gidaspow1994]]) [7].Case 013 013
ErgunWenYuDrag (used in Goldschmidt, cyclone, and column) implemented from equation (5.11) of ([[@Gidaspow1994]]) [7].Case 014 014

Other drag models:

ModelDetails
PlessisMasliyahDragUsed in GoldschmidtMPPIC. Implemented from ([[@Plessis1988]]) [8] is adapted for flow through consolidated isotropic porous media. This is outside the scope of the current study but functionality is tested anyways from a computational point of view and to understand its behavior far from its reference application. Calculation diverged, so no results are available.
distortedSphereDragNot used in any tutorial. Implemented as per ([[@Liu1993]]) [9] is conceived for the simulation of the effects of drop drag and breakup on fuel sprays. This is far from our scope and is not tested.
nonSphereDragNot used in any tutorial. Implemented as per ([[@Haider1989]]) [10] is a drag model for non-spherical particles. Its most important parameter is phi, the ratio of the surface area of a sphere with the same volume as the particle to the actual surface area of the particle.
SchillerNaumannDragNot used in any tutorial. Implemented according the classical paper by Schiller (1935) for modeling drag over spheres.

Solution with different sizeDistribution:

  • [ ] fixedValue
  • [ ] normal
  • [ ] RosinRammler
  • [ ] tabulatedDensity

Solution with different cloud types

  • MPPICCloud
  • collidingCloud

For the PackingModelone needs to specify the ParticleStressModel among the following:

ModelDetails
HarrisCrighton
Lun

For both DampingModel and IsotropyModel one needs a TimeScaleModel

OptionDetails
equilibrium
isotropic
nonEquilibrium
+- · WallyToolbox.jl

The following numerical experiments concern the horizontalMixer sample case.

Conceptual phase

Minimal working examples:

  • 000: no models active other than patchInteraction rebound.

Case 000

  • 001: no models active other than patchInteraction standardWallInteraction.

Case 001

  • 002: no models active other than patchInteraction localInteraction.

Case 002

If there are outlets in the system, rebound model is not suitable. Because of this, all the next cases, unless stated otherwise, will use localInteraction given the better control it provides over individual patches with respect to standardWallInteraction (although it is much slower than the latter).

  • 007: compare solution for same (approximate) mass flow with using multiple particles per parcel - with respect to the single particle per parcel performed in the reference case 002. The overall cloud shape remains the same but some spatial resolution is lost. For conception studies it seems valid to use a higher number of particles per parcel.

Case 007

Using the basic patchInteraction localInteraction add these variants (notice that the option none for all these models is already covered by the reference case 002. After comparing cases 002 and 007 the following variants were modified to match 007 as a reference case given the much lower computational time (more particles per parcel).

  • 003: packingModel explicit.

Case 003

  • 004: packingModel implicit.

Case 004

  • 005: dampingModel relaxation. Particle velocities are relaxed towards the local mean over a time-scale. Notice that reference paper intended to improve MP-PIC for polydisperse sedimenting particle clouds.

Case 005

  • 006 isotropyModel stochastic. According to the reference paper collisions cause numerical particles to scatter in MP-PIC calculations, just as physical particles do in particle/fluid flows, just as the generated animation implies.

Case 006

Implicit packing so far is the only model for which particles left the system and turbulence effects and segregation becomes apparent. In fact without implicit packing the results do not even look physical, so it is probably a requirement to activate this model. Damping and isotropy models produce similar results, with a little more dispersed cloud when isotropy is active, as stated above from its reference.

Hypotheses testing cases:

  • 008: modify case 004 to test if with rebound patch interaction particles are able to quit the system. Confirmed that this patch interaction does not handle outlets.

Case 008

  • 009: modify case 004 to test if with standardWallInteraction patch interaction particles are able to quit the system. Confirmed that this patch interaction does handle outlets similarly to the localInteraction. It was not possible to confirm if inlets also allow backflow since reporting is not provided by patch.

Case 009

  • 010: check the role of gravity option over implicit packing model. Here we derive a variant of 009 because it runs faster than with localInteraction.

Case 010

  • 011: in fact the role of gravity in 010 was pretty devastating over the sedimentation rate (quite unexpected given the particle sizes that were used) so a variant of this case was manually initialized from last state and left to run for a much longer physical time (100 s) using maxCo 2.0 for faster execution. CALCULATION DIVERGED, REDO!

Physical refinement phase

ModelTakings
InjectionModelCONFIRM CONCLUSIONS WITH POLYDISTRIBUTED CLOUDS (particles per parcel)!
PatchInteractionModelThis model is key for the simulation of particles coupled to a fluid. Unless different behavior is expected in the different walls so customization of interaction is required, it is much faster to use a standardWallInteraction approach. For understanding the role of parameters e and mu over rebound one can check lines 144-168 of source code and confirm the model is the same as the one implemented in localInteraction in lines 366-391 of sources.
PackingModel
DampingModel
IsotropyModel
ParticleForceThis will be discussed in this section.

Solution with different drag models:

ModelResults
sphereDragCase 012 012
WenYuDrag (used in injectionChannel) implemented from equation (2.12) of ([[@Gidaspow1994]]) [7].Case 013 013
ErgunWenYuDrag (used in Goldschmidt, cyclone, and column) implemented from equation (5.11) of ([[@Gidaspow1994]]) [7].Case 014 014

Other drag models:

ModelDetails
PlessisMasliyahDragUsed in GoldschmidtMPPIC. Implemented from ([[@Plessis1988]]) [8] is adapted for flow through consolidated isotropic porous media. This is outside the scope of the current study but functionality is tested anyways from a computational point of view and to understand its behavior far from its reference application. Calculation diverged, so no results are available.
distortedSphereDragNot used in any tutorial. Implemented as per ([[@Liu1993]]) [9] is conceived for the simulation of the effects of drop drag and breakup on fuel sprays. This is far from our scope and is not tested.
nonSphereDragNot used in any tutorial. Implemented as per ([[@Haider1989]]) [10] is a drag model for non-spherical particles. Its most important parameter is phi, the ratio of the surface area of a sphere with the same volume as the particle to the actual surface area of the particle.
SchillerNaumannDragNot used in any tutorial. Implemented according the classical paper by Schiller (1935) for modeling drag over spheres.

Solution with different sizeDistribution:

  • [ ] fixedValue
  • [ ] normal
  • [ ] RosinRammler
  • [ ] tabulatedDensity

Solution with different cloud types

  • MPPICCloud
  • collidingCloud

For the PackingModelone needs to specify the ParticleStressModel among the following:

ModelDetails
HarrisCrighton
Lun

For both DampingModel and IsotropyModel one needs a TimeScaleModel

OptionDetails
equilibrium
isotropic
nonEquilibrium
diff --git a/dev/Teaching/OpenFOAM/Cases/injectionChannel/index.html b/dev/Teaching/OpenFOAM/Cases/injectionChannel/index.html index db00bd6ff..bd7d8571d 100644 --- a/dev/Teaching/OpenFOAM/Cases/injectionChannel/index.html +++ b/dev/Teaching/OpenFOAM/Cases/injectionChannel/index.html @@ -2,4 +2,4 @@ - · WallyToolbox.jl

Verification

Using the base package provided here we can verify the computation of number of parcels per second of sample case injectionChannel. Notice that the value of mdot has been reversed engineered so that it matches the expected value.

import OpenFOAM as OF
 
 OF.parcels_per_second(; mdot = 0.2, rhop = 1000.0, diam = 650.0e-06, nParticle = 1)
-# Output: 1390885
+# Output: 1390885 diff --git a/dev/Teaching/OpenFOAM/Cases/sedimentationBox/index.html b/dev/Teaching/OpenFOAM/Cases/sedimentationBox/index.html index 1d551f4a0..f10f69324 100644 --- a/dev/Teaching/OpenFOAM/Cases/sedimentationBox/index.html +++ b/dev/Teaching/OpenFOAM/Cases/sedimentationBox/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

The goal of this study is to verify the role of some drag models over particle drop dynamics. Other than the drag models, particle size and role of parameter applyGravity in implicit packing model. The later was added because of unexpected results found in some cases of horizontalMixer and dustCollector.

Analytical solution

+- · WallyToolbox.jl

The goal of this study is to verify the role of some drag models over particle drop dynamics. Other than the drag models, particle size and role of parameter applyGravity in implicit packing model. The later was added because of unexpected results found in some cases of horizontalMixer and dustCollector.

Analytical solution

diff --git a/dev/Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/index.html b/dev/Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/index.html index 470eabb37..ea3c269af 100644 --- a/dev/Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/index.html +++ b/dev/Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

Combustion models

Models inheriting from combustionModel base class. If you are reading this section you might also be interested in building the case and testing the combustion with OpenSmoke++ or Cantera.

TypeGroupDescription
EDCTurbulentEddy Dissipation Concept turbulent combustion model. Probably the most popular approach for simulation of gas combustion in industrial processes.
laminarLaminar
PaSRLaminar
FDSSingle-step
infinitelyFastChemistrySingle-step
diffusionSingle-step
zoneCombustionFilterEnable the reactions within the specified list of cell-zones and set to zero elsewhere.
noCombustionDummyDummy combustion model for 'no combustion'.

Cloud models

In OpenFOAM, a cloud designate the injection of a secondary phase, generally solid particles or droplets, in a primary continuous carrier phase. The dictionary cloudProperties is identified in tutorials related to the following solver modules:

  • incompressibleDenseParticleFluid
  • incompressibleFluid
  • multicomponentFluid
  • multiRegion

The default version of the dictionary provided here is not yet documented as of OpenFOAM v11 and does not contain any solver specific configurations, so the users must refer to the tutorial cases for setting up their studies. A post-processing particle tracking function associated to the dictionary is provided here (untested).

Currently OpenFOAM implements the following cloud types:

CloudDescription
CollidingCloudAdds collisions to clouds.
MomentumCloudTemplated base class for momentum cloud. Adds particle forces and dispersion, injection, patch interaction, stochastic collision, and surface film models to clouds.
ParcelCloudOutermost template for parcel clouds.
ThermoCloudTemplated base class for thermodynamic cloud. Adds heat transfer.
MPPICCloudAdds MPPIC modelling to clouds.
ReactingCloudTemplated base class for reacting cloud. Supports single phase with variable composition and phase change modeling.
ReactingMultiphaseCloudTemplated base class for multiphase reacting cloud. Supports multiphase composition, devolatilization, and surface reactions.
SprayCloudTemplated base class for spray cloud. Supports atomization and break-up models.

CollidingCloud models

Collision models

These inherit from CollisionModel.

TypeDescription
NoCollisionDummy class for the none option.
PairCollisionMaterial properties can be set in detail in sub-dictionary constantProperties. Notice that this is computationally expensive

MomentumCloud models

Dispersion models

Injection models

These inherit from InjectionModel and implement how particles are injected into a continuous medium. The following table summarizes some of the available models.

TypeDescription
coneInjectionInject particles in a number of oriented cones. Particles can be generated from a single point or over a disk. Injection can be made at constant velocity, pressure, or with a flow rate and discharge coefficient.

Patch interaction models

Stochastic collision models

Surface film models

ThermoCloud models

Heat transfer models

These inherit from HeatTransferModel. It is possible to provide a Stefan flow approximation to the models by using flag BirdCorrection in the models dictionaries.

TypeDescription
NoHeatTransferDummy class for the none option.
RanzMarshallThe Ranz-Marshall ([[@Ranz1952]]) [16] correlation for heat transfer. For a more recent review, see e.g. ([[@Aissa2015a]]) [17].

MPPICCloud models

Packing models

Isotropy models

Damping models

ReactingCloud models

Phase change models

These inherit from PhaseChangeModel.

TypeDescription
NoPhaseChangeDummy class for the none option.
LiquidEvaporationLiquid evaporation model using ideal gas assumption.
LiquidEvaporationBoilLiquid evaporation model using ideal gas assumption and includes boiling model based on ([[@Zuo2000a]]) [18].

ReactingMultiphaseCloud models

Devolatilization models

Surface reaction models

SprayCloud models

Atomization models

Breakup models

These inherit from BreakupModel for handling particle breakup.

TypeDescription
NoBreakup
PilchErdman
ReitzDiwakarSecondary breakup model adapted to high pressure fuel sprays.
ReitzKHRTSecondary breakup model which uses the Kelvin-Helmholtz instability theory to predict the stripped droplets and the Raleigh-Taylor instability as well.
SHF
ETABEnhanced TAB model for non-evaporating fuel sprays.
TAB

Composition models

These inherit from CompositionModel and consists of carrier species (via thermo package), and additional liquids and solids. They are not attached to a type of cloud and each model supports their own cloud types.

TypeDescriptionSupport
NoCompositionDummy class for the none option.
SingleMixtureFractionTemplated parcel multi-phase, multi-component class.ReactingMultiphaseCloud
SinglePhaseMixtureTemplated parcel single phase, multi-component class.SprayCloud, ReactingCloud
+- · WallyToolbox.jl

Combustion models

Models inheriting from combustionModel base class. If you are reading this section you might also be interested in building the case and testing the combustion with OpenSmoke++ or Cantera.

TypeGroupDescription
EDCTurbulentEddy Dissipation Concept turbulent combustion model. Probably the most popular approach for simulation of gas combustion in industrial processes.
laminarLaminar
PaSRLaminar
FDSSingle-step
infinitelyFastChemistrySingle-step
diffusionSingle-step
zoneCombustionFilterEnable the reactions within the specified list of cell-zones and set to zero elsewhere.
noCombustionDummyDummy combustion model for 'no combustion'.

Cloud models

In OpenFOAM, a cloud designate the injection of a secondary phase, generally solid particles or droplets, in a primary continuous carrier phase. The dictionary cloudProperties is identified in tutorials related to the following solver modules:

  • incompressibleDenseParticleFluid
  • incompressibleFluid
  • multicomponentFluid
  • multiRegion

The default version of the dictionary provided here is not yet documented as of OpenFOAM v11 and does not contain any solver specific configurations, so the users must refer to the tutorial cases for setting up their studies. A post-processing particle tracking function associated to the dictionary is provided here (untested).

Currently OpenFOAM implements the following cloud types:

CloudDescription
CollidingCloudAdds collisions to clouds.
MomentumCloudTemplated base class for momentum cloud. Adds particle forces and dispersion, injection, patch interaction, stochastic collision, and surface film models to clouds.
ParcelCloudOutermost template for parcel clouds.
ThermoCloudTemplated base class for thermodynamic cloud. Adds heat transfer.
MPPICCloudAdds MPPIC modelling to clouds.
ReactingCloudTemplated base class for reacting cloud. Supports single phase with variable composition and phase change modeling.
ReactingMultiphaseCloudTemplated base class for multiphase reacting cloud. Supports multiphase composition, devolatilization, and surface reactions.
SprayCloudTemplated base class for spray cloud. Supports atomization and break-up models.

CollidingCloud models

Collision models

These inherit from CollisionModel.

TypeDescription
NoCollisionDummy class for the none option.
PairCollisionMaterial properties can be set in detail in sub-dictionary constantProperties. Notice that this is computationally expensive

MomentumCloud models

Dispersion models

Injection models

These inherit from InjectionModel and implement how particles are injected into a continuous medium. The following table summarizes some of the available models.

TypeDescription
coneInjectionInject particles in a number of oriented cones. Particles can be generated from a single point or over a disk. Injection can be made at constant velocity, pressure, or with a flow rate and discharge coefficient.

Patch interaction models

Stochastic collision models

Surface film models

ThermoCloud models

Heat transfer models

These inherit from HeatTransferModel. It is possible to provide a Stefan flow approximation to the models by using flag BirdCorrection in the models dictionaries.

TypeDescription
NoHeatTransferDummy class for the none option.
RanzMarshallThe Ranz-Marshall ([[@Ranz1952]]) [16] correlation for heat transfer. For a more recent review, see e.g. ([[@Aissa2015a]]) [17].

MPPICCloud models

Packing models

Isotropy models

Damping models

ReactingCloud models

Phase change models

These inherit from PhaseChangeModel.

TypeDescription
NoPhaseChangeDummy class for the none option.
LiquidEvaporationLiquid evaporation model using ideal gas assumption.
LiquidEvaporationBoilLiquid evaporation model using ideal gas assumption and includes boiling model based on ([[@Zuo2000a]]) [18].

ReactingMultiphaseCloud models

Devolatilization models

Surface reaction models

SprayCloud models

Atomization models

Breakup models

These inherit from BreakupModel for handling particle breakup.

TypeDescription
NoBreakup
PilchErdman
ReitzDiwakarSecondary breakup model adapted to high pressure fuel sprays.
ReitzKHRTSecondary breakup model which uses the Kelvin-Helmholtz instability theory to predict the stripped droplets and the Raleigh-Taylor instability as well.
SHF
ETABEnhanced TAB model for non-evaporating fuel sprays.
TAB

Composition models

These inherit from CompositionModel and consists of carrier species (via thermo package), and additional liquids and solids. They are not attached to a type of cloud and each model supports their own cloud types.

TypeDescriptionSupport
NoCompositionDummy class for the none option.
SingleMixtureFractionTemplated parcel multi-phase, multi-component class.ReactingMultiphaseCloud
SinglePhaseMixtureTemplated parcel single phase, multi-component class.SprayCloud, ReactingCloud
diff --git a/dev/Teaching/OpenFOAM/OpenFOAM.org/Solver-Modules/index.html b/dev/Teaching/OpenFOAM/OpenFOAM.org/Solver-Modules/index.html index f282bfac6..69b195bc9 100644 --- a/dev/Teaching/OpenFOAM/OpenFOAM.org/Solver-Modules/index.html +++ b/dev/Teaching/OpenFOAM/OpenFOAM.org/Solver-Modules/index.html @@ -13,4 +13,4 @@ maxCo                     0.7; ... -}

Being a momentum cloud, MPPICCloud makes use only of patchInteractionModel localInteraction for interaction with the environment and collisions between particles are not taken into account (that is not completely true if you consider the packing effects that can be enabled as collisions). Again, it is better to go deeper in the case studies.

The main models for setting up a particle simulation in constant/cloudProperties are the [[Physical Models#Injection models|InjectionModel]] and the ParticleForce to be used. Notice that when dealing with incompressibleDenseParticleFluid the main ParticleForce models other than gravity are inherited by DenseDragForce.

+}

Being a momentum cloud, MPPICCloud makes use only of patchInteractionModel localInteraction for interaction with the environment and collisions between particles are not taken into account (that is not completely true if you consider the packing effects that can be enabled as collisions). Again, it is better to go deeper in the case studies.

The main models for setting up a particle simulation in constant/cloudProperties are the [[Physical Models#Injection models|InjectionModel]] and the ParticleForce to be used. Notice that when dealing with incompressibleDenseParticleFluid the main ParticleForce models other than gravity are inherited by DenseDragForce.

diff --git a/dev/Teaching/OpenFOAM/index.html b/dev/Teaching/OpenFOAM/index.html index cbfb434ab..ccce85304 100644 --- a/dev/Teaching/OpenFOAM/index.html +++ b/dev/Teaching/OpenFOAM/index.html @@ -1,2 +1,2 @@ -OpenFOAM · WallyToolbox.jl

OpenFOAM 11

Table of Contents

Tips and reminders

General topics

  • When converting to OpenFOAM v11 viscosityModel instead of transportModel in physicalProperties files. Currently setting transportModel Newtonian does not raise any errors.

  • When working with a 2-D extruded mesh (1-cell in thickness), the mass flow rate must be scaled by the width of the domain to keep consistency with what would be expected in 3-D.

Granular flows

  • It is a good idea to set SOI to a value higher than zero (dimensioned to match the global time-scale of the problem) so that flow is fully developed before particles arrive.

  • If it makes sense to do so, make parameter U0 in the entries of injectionModels of cloudProperties identical to the velocity specified for the corresponding path. In most cases this applies, except when modeling a particle jet that originates from another source outside of the computational domain.

+OpenFOAM · WallyToolbox.jl

OpenFOAM 11

Table of Contents

Tips and reminders

General topics

  • When converting to OpenFOAM v11 viscosityModel instead of transportModel in physicalProperties files. Currently setting transportModel Newtonian does not raise any errors.

  • When working with a 2-D extruded mesh (1-cell in thickness), the mass flow rate must be scaled by the width of the domain to keep consistency with what would be expected in 3-D.

Granular flows

  • It is a good idea to set SOI to a value higher than zero (dimensioned to match the global time-scale of the problem) so that flow is fully developed before particles arrive.

  • If it makes sense to do so, make parameter U0 in the entries of injectionModels of cloudProperties identical to the velocity specified for the corresponding path. In most cases this applies, except when modeling a particle jet that originates from another source outside of the computational domain.

diff --git a/dev/Teaching/Transport Phenomena/Analysis of Transport Phenomena/index.html b/dev/Teaching/Transport Phenomena/Analysis of Transport Phenomena/index.html new file mode 100644 index 000000000..eb916660a --- /dev/null +++ b/dev/Teaching/Transport Phenomena/Analysis of Transport Phenomena/index.html @@ -0,0 +1,4 @@ + +- · WallyToolbox.jl

Models

Theses notes intend to provide in a very concise way the mathematical fundamentals of transport phenomena. In this sense, they are devoted to generalities rather than specific closure models.

Most physical phenomena are actually discrete processes (particles); many phenomena such as heat transfer are actual discrete vibrations in materials. Such systems are described by large systems of coupled ordinary differential equations (ODE's) which quickly become intractable and require numerical solution. Continuum approximations, i.e. an averaging process over a representative volume element (RVE), are used to generate a single partial differential equation (PDE) from many such ODE's. This transformation leads to the concept of conservation equations.

Say we have a quantity $b$ such as it represents a number $\#$ concentration of a given physical quantity. Associated to this quantity we have a flux density $\vec{F}$ through the boundaries of the system and a rate production in volume $B_v$ as summarized in the following table.

$

\begin{align} b &= \dfrac{#}{volume} &\qquad\text{concentration} \ +\vec{F} &= \dfrac{#}{area\cdotp{}time} &\qquad\text{flux density} \ +B_{v} &= \dfrac{#}{volume\cdotp{}time} &\qquad\text{production rate} \end{align} $

The most general statement of conservation of this quantity $b$ writes then:

$

\frac{d}{dt}\left(\int{V}bdV\right) = -\int{\Omega}\vec{n}\cdotp\vec{F}dA+\int{V}B{v}dV $

Using divergence theorem this can be converted into:

$

\frac{d}{dt}\left(\int{V}bdV\right) = -\int{V}\nabla{\vec{F}}dV+\int{V}B{v}dV $

Assuming an Eulerian reference frame (fixed) to the volume $V$ we can move the time derivative of the above expression inside the left-hand side integral. Rearranging we have

$

\int{V}\left(\frac{\partial{}b}{\partial{}t} + \nabla{\vec{F}} - B{v}\right)dV = 0 $

For a differential volume $dV$ the integrand must be identically zero, from which the PDE arise:

$

\frac{\partial{}b}{\partial{}t} + \nabla{\vec{F}} - B_{v} = 0 $

Diffusion equation

In the nineteenth century, Fick demonstrated empirically that the flux density of a species submitted to concentration gradient field responded linearly to its concentration gradient.

$

\vec{F}\propto{}-\nabla\cdotp{}b $

This is actually the simplest form of diffusion modeling and, in general, is valid only in very specific cases, i.e. when a single species is being transported in a system without the effect of other components. Introducing a proportionality coefficient $D$, the diffusivity, we have:

$

\vec{F}=-D\nabla\cdotp{}b $

Using this expression in our conservation equation leads to:

$

\frac{\partial{}b}{\partial{}t} - \nabla{\left(D\nabla\cdotp{}b\right)} - B_{v} = 0 $

Under the very specific case where there is no production rate $B_{v}$, i.e. no chemical reactions, and constant diffusivity $D$, i.e. no composition or space dependence, this simplifies to the well-studied form of the so called Fick's second law:

$

\frac{\partial{}b}{\partial{}t} = D\nabla^{2}{b} $

This expression happens to be isomorph with heat diffusion equation for a constant specific heat medium because Fourier's law is analogous to Fick's first law, leading to the same final mathematical form. Using the thermodynamic definition $dh=\rho{}c_{p}dT$ we have

$

\frac{\partial{}T}{\partial{}t} = \frac{k}{\rho{}c_{p}}\nabla^{2}{T} $

It must be noticed that in the general case, the quantity being transported in heat equation is the enthalpy density $h$ and the potential field is linearized in terms of temperature $T$ through Fourier's equation. Without the constant specific heat simplification and with variable thermal conductivity $k$ it is stated as:

$

\frac{\partial{}h}{\partial{}t} = \nabla\left(k\nabla\cdotp{T}\right) $

Other than for very simple enthalpy-specific heat relationships (such as the constant approximation discussed above), this PDE must be solved numerically with a coupled system of nonlinear equations for computing the field of temperatures in terms of enthalpies. In the above we neglect the volumetric heat production rate, which would be present, e.g. in a reacting system or a material undergoing nuclear fission.


Math appendix

  • [ ] Proof of mean value theorem (null integral implies null integrand)
  • [ ] Derivation of Gauss (divergence) theorem
diff --git a/dev/Teaching/Transport Phenomena/index.html b/dev/Teaching/Transport Phenomena/index.html index ae43a77fc..a9a35e218 100644 --- a/dev/Teaching/Transport Phenomena/index.html +++ b/dev/Teaching/Transport Phenomena/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

Dimensionless groups

Knudsen: Particles mean free path over system characteristic dimension. Division between rarefied gas (Boltzmann) and continuum mechanics (Navier-Stokes).

Prandtl: Ratio of momentum diffusivity to thermal diffusivity $\mathrm{Pr}=\frac{\nu}{\alpha}$. High $\mathrm{Pr}$ indicates that momentum transfer is more effective than heat transfer (oils), while low values (liquid metals) indicate thermal boundary layer is more important than viscous one.

Nusselt: Ratio of convective to conductive heat transfer at a boundary in a fluid, defined as $\mathrm{Nu}=\frac{hL}{k}$. Often in buoyancy-driven flow analysis it is correlated as $\mathrm{Nu}=a\mathrm{Ra}^b$. A Nusselt number of value one represents heat transfer by pure conduction. Increasing this number implies a laminar conductive-dominant flow and then a convective dominant turbulent flow.

Sherwood: Also called the mass transfer Nusselt number) is a dimensionless number used in mass-transfer operation. It represents the ratio of the total mass transfer rate (convection + diffusion) to the rate of diffusive mass transport, and is named in honor of Thomas Kilgore Sherwood.

Grashof: Ratio of buoyancy to viscous forces defined as $\mathrm{Gr}=\frac{g\beta(T_s-T_{\infty})L^3}{\nu^2}$ and is analogous to Reynolds number in natural convection. Increasing the value of this number above a given threshold promotes buoyancy driven flow.

Rayleigh: Product of Grashof $\mathrm{Gr}$ and Prandtl $\mathrm{Pr}$ numbers. Related to the transition from laminar to turbulent in buoyancy-driven flows. Laminar to turbulent is assumed to take place at $10^9$ ([[@Balaji2014]]) [14].

Péclet: provides the ratio of advective per diffusive transport of a substance. For mass transport this is given by the product of Reynolds and Schmidt numbers $\mathrm{Re}\,\mathrm{Sc}$ while for thermal energy it is the product of Reynolds and Prandtl numbers $\mathrm{Re}\,\mathrm{Pr}$.

Granular flows

  • Parcel is a computational particle unit that may be composed of several particles which are all identical sharing a state, which include velocity, size, temperature, etc. See ([[@ORourke2010]]) [15] for details.

  • Cloud is the term OpenFOAM uses to describe particle flows. Here we will use both MPPICCloud andcollidingCloud, other types being available for reacting or multiphase solvers, such as thermoCloud.

Technological

  • Siwek chamber is a reactor often used to determine the dispersion of solid fuels for combustion. Validation of simulations can be done through this and this paper. Other than the OpenFOAM case there is also this setup available on Fetch CFD.

Mathematical

  • Hopf bifurcation  is a critical point where, as a parameter changes, a system's stability switches and a periodic solution arises. (see this).

Combustion

  • HyChem is an approach for modeling combustion of real liquid fuels by decomposing the problem into a lumped parameter model of evaporation/devolatilization and a detailed or simplified chemical kinetics approach applied to the gas phase. It is available for high-end fuels such as jet fuel and gasoline.

Condensate fuel combustion

This matter enters a intrinsically multiphysics domain and problem formulation needs to take into account at what level the model is required to act. For liquids, that might include spray droplets formation, evaporation, devolatilization, mass transfer to gas phase, and finally, oxidation kinetics of gas products. In the case of solids, due to high uncertainty and variability in material properties, and complex mass transfer phenomena, one must expect qualitative or semi-quantitative agreement of models and measurements. Furthermore, lumped-parameter modeling is a requirement in the field, making it difficult to be generalized to a physical level as of today.

[[@Saario2005a]] used Ansys Fluent to simulate HFO (heavy-fuel oil) combustion using the standard mixture fraction approach coupled to a Lagrangian particle tracking for evaporating droplets and $k-\epsilon$ turbulence modeling. This is a highly standard industrial application of global combustion simulation from an energy standpoint but lacks the generality of considering a detailed chemistry of gas phase (for instance, for coupling with solid calcination reactions, if that is the case).

[[@Garaniya2012a]] used StarCD to simulate HFO in the context of ship engines. From the same authors ([[@Garaniya2012b]]), we also have the the thermodynamic formulation of the problem.

[[@Nowruzi2014]] successfully simulated a spray jet of HFO with OpenFOAM without accounting for chemistry and combustion. In the absence of a proper PSD (particle size-distribution) this step is required to initialize a simulation, but can hardly be integrated in a reacting flow simulation, which would become overly complex.

[[@Sanchez2023a]] studied the combustion of biomass with help of OpenFOAM with some semi-quantitative results within 13% from the measurements, what is already considered a very good agreement in the field.

  • [ ] Continue the research here.
+- · WallyToolbox.jl

Dimensionless groups

Knudsen: Particles mean free path over system characteristic dimension. Division between rarefied gas (Boltzmann) and continuum mechanics (Navier-Stokes).

Prandtl: Ratio of momentum diffusivity to thermal diffusivity $\mathrm{Pr}=\frac{\nu}{\alpha}$. High $\mathrm{Pr}$ indicates that momentum transfer is more effective than heat transfer (oils), while low values (liquid metals) indicate thermal boundary layer is more important than viscous one.

Nusselt: Ratio of convective to conductive heat transfer at a boundary in a fluid, defined as $\mathrm{Nu}=\frac{hL}{k}$. Often in buoyancy-driven flow analysis it is correlated as $\mathrm{Nu}=a\mathrm{Ra}^b$. A Nusselt number of value one represents heat transfer by pure conduction. Increasing this number implies a laminar conductive-dominant flow and then a convective dominant turbulent flow.

Sherwood: Also called the mass transfer Nusselt number) is a dimensionless number used in mass-transfer operation. It represents the ratio of the total mass transfer rate (convection + diffusion) to the rate of diffusive mass transport, and is named in honor of Thomas Kilgore Sherwood.

Grashof: Ratio of buoyancy to viscous forces defined as $\mathrm{Gr}=\frac{g\beta(T_s-T_{\infty})L^3}{\nu^2}$ and is analogous to Reynolds number in natural convection. Increasing the value of this number above a given threshold promotes buoyancy driven flow.

Rayleigh: Product of Grashof $\mathrm{Gr}$ and Prandtl $\mathrm{Pr}$ numbers. Related to the transition from laminar to turbulent in buoyancy-driven flows. Laminar to turbulent is assumed to take place at $10^9$ ([[@Balaji2014]]) [14].

Péclet: provides the ratio of advective per diffusive transport of a substance. For mass transport this is given by the product of Reynolds and Schmidt numbers $\mathrm{Re}\,\mathrm{Sc}$ while for thermal energy it is the product of Reynolds and Prandtl numbers $\mathrm{Re}\,\mathrm{Pr}$.

Granular flows

  • Parcel is a computational particle unit that may be composed of several particles which are all identical sharing a state, which include velocity, size, temperature, etc. See ([[@ORourke2010]]) [15] for details.

  • Cloud is the term OpenFOAM uses to describe particle flows. Here we will use both MPPICCloud andcollidingCloud, other types being available for reacting or multiphase solvers, such as thermoCloud.

Technological

  • Siwek chamber is a reactor often used to determine the dispersion of solid fuels for combustion. Validation of simulations can be done through this and this paper. Other than the OpenFOAM case there is also this setup available on Fetch CFD.

Mathematical

  • Hopf bifurcation  is a critical point where, as a parameter changes, a system's stability switches and a periodic solution arises. (see this).

Combustion

  • HyChem is an approach for modeling combustion of real liquid fuels by decomposing the problem into a lumped parameter model of evaporation/devolatilization and a detailed or simplified chemical kinetics approach applied to the gas phase. It is available for high-end fuels such as jet fuel and gasoline.

Condensate fuel combustion

This matter enters a intrinsically multiphysics domain and problem formulation needs to take into account at what level the model is required to act. For liquids, that might include spray droplets formation, evaporation, devolatilization, mass transfer to gas phase, and finally, oxidation kinetics of gas products. In the case of solids, due to high uncertainty and variability in material properties, and complex mass transfer phenomena, one must expect qualitative or semi-quantitative agreement of models and measurements. Furthermore, lumped-parameter modeling is a requirement in the field, making it difficult to be generalized to a physical level as of today.

[[@Saario2005a]] used Ansys Fluent to simulate HFO (heavy-fuel oil) combustion using the standard mixture fraction approach coupled to a Lagrangian particle tracking for evaporating droplets and $k-\epsilon$ turbulence modeling. This is a highly standard industrial application of global combustion simulation from an energy standpoint but lacks the generality of considering a detailed chemistry of gas phase (for instance, for coupling with solid calcination reactions, if that is the case).

[[@Garaniya2012a]] used StarCD to simulate HFO in the context of ship engines. From the same authors ([[@Garaniya2012b]]), we also have the the thermodynamic formulation of the problem.

[[@Nowruzi2014]] successfully simulated a spray jet of HFO with OpenFOAM without accounting for chemistry and combustion. In the absence of a proper PSD (particle size-distribution) this step is required to initialize a simulation, but can hardly be integrated in a reacting flow simulation, which would become overly complex.

[[@Sanchez2023a]] studied the combustion of biomass with help of OpenFOAM with some semi-quantitative results within 13% from the measurements, what is already considered a very good agreement in the field.

  • [ ] Continue the research here.
diff --git a/dev/Teaching/index.html b/dev/Teaching/index.html index b6e871604..4c742fda2 100644 --- a/dev/Teaching/index.html +++ b/dev/Teaching/index.html @@ -1,2 +1,2 @@ -- · WallyToolbox.jl

Notes related to my learning and teaching interests in several fields related to scientific computing (mostly applied mathematics and machine learning) and related applications. This home page is the entry point with interesting links and an index to the materials.

Software

OpenSmoke++

OpenSmoke++ is a framework for detailed kinetics modeling of large reacting systems. This paper might be of interest: Dalili (2020) - modeling of a single droplet evaporation and combustion.

DWSIM

+- · WallyToolbox.jl

Notes related to my learning and teaching interests in several fields related to scientific computing (mostly applied mathematics and machine learning) and related applications. This home page is the entry point with interesting links and an index to the materials.

Software

OpenSmoke++

OpenSmoke++ is a framework for detailed kinetics modeling of large reacting systems. This paper might be of interest: Dalili (2020) - modeling of a single droplet evaporation and combustion.

DWSIM

diff --git a/dev/helpers/index.html b/dev/helpers/index.html index cdb098bf2..052f4a807 100644 --- a/dev/helpers/index.html +++ b/dev/helpers/index.html @@ -1,5 +1,5 @@ -Helpers · WallyToolbox.jl

Helpers

The core packages of WallyToolbox ecosystem provide shared functionalities and types that are used in several other more specialized packages. This allows for standardization of interfaces, employed quantities, and avoid boilerplate code. This page organizes everything to facilitate the understanding of the end-user. Knowing the base helper packages DryConstants and DryUtilities is key for proper usage of WallyToolbox.

DryConstants

Physical constants

Reference states

Other constants

DryUtilities

Haskell-like array slicing

Those who know Haskell probably started learning it by manipulating lists with head and tail. Those functionalities are not available in Julia by default and array slicing - with an ugly syntax - is required. Since this is done often in the fields of application of DryTooling, both head and tail together with a body functions are available in its core. They are simple wrapers over the @view macro and work with both iterable types and arrays. The following snippet illustrates their usage.

julia> v = collect(1:4);
+Helpers · WallyToolbox.jl

Helpers

The core packages of WallyToolbox ecosystem provide shared functionalities and types that are used in several other more specialized packages. This allows for standardization of interfaces, employed quantities, and avoid boilerplate code. This page organizes everything to facilitate the understanding of the end-user. Knowing the base helper packages DryConstants and DryUtilities is key for proper usage of WallyToolbox.

DryConstants

Physical constants

Reference states

Other constants

DryUtilities

Haskell-like array slicing

Those who know Haskell probably started learning it by manipulating lists with head and tail. Those functionalities are not available in Julia by default and array slicing - with an ugly syntax - is required. Since this is done often in the fields of application of DryTooling, both head and tail together with a body functions are available in its core. They are simple wrapers over the @view macro and work with both iterable types and arrays. The following snippet illustrates their usage.

julia> v = collect(1:4);
 
 julia> head(v) == [1; 2; 3]
 true
@@ -16,18 +16,18 @@
  1
  2
  3
-
julia> tail([1, 2, 3, 4])
+
julia> tail([1, 2, 3, 4])
 3-element view(::Vector{Int64}, 2:4) with eltype Int64:
  2
  3
  4
 julia> tail(1:4)
-2:4
julia> body([1, 2, 3, 4])
+2:4
julia> body([1, 2, 3, 4])
 2-element view(::Vector{Int64}, 2:3) with eltype Int64:
  2
  3
 julia> body(1:4)
-2:3

Handling of discontinuous functions

Discontinuous functions are all over in real world applications. Whether they handle discrete signals sent to controllers or represent a material property change in the solution domain of a heat transfer simulation, they are often represented by a single or a composition of Heaviside step functions. Again, because its implementation is pretty simple and optimization routines require a differentiable form of this function, DryUtilities implements heaviside and interval as proposed in this StackOverflow answer.

julia> heaviside(-1) == 0
+2:3

Handling of discontinuous functions

Discontinuous functions are all over in real world applications. Whether they handle discrete signals sent to controllers or represent a material property change in the solution domain of a heat transfer simulation, they are often represented by a single or a composition of Heaviside step functions. Again, because its implementation is pretty simple and optimization routines require a differentiable form of this function, DryUtilities implements heaviside and interval as proposed in this StackOverflow answer.

julia> heaviside(-1) == 0
 true
 
 julia> heaviside(-1.0) == 0.0
@@ -46,7 +46,7 @@
  0.0
  0.5
  1.0
- 1.0
DryUtilities.heavisideFunction
heaviside(t)

Provides a Heaviside function compatible with automatic differentiation. This is a requirement for conceiving, e.g., model predictive controls with discontinuous functions under ModelingToolkit.

source

By implementation inheritance that is also the case for interval:

julia> interval(0:6; a = 2, b = 5)
+ 1.0
DryUtilities.heavisideFunction
heaviside(t)

Provides a Heaviside function compatible with automatic differentiation. This is a requirement for conceiving, e.g., model predictive controls with discontinuous functions under ModelingToolkit.

source

By implementation inheritance that is also the case for interval:

julia> interval(0:6; a = 2, b = 5)
 7-element Vector{Float64}:
  0.0
  0.0
@@ -54,7 +54,7 @@
  1.0
  1.0
  0.5
- 0.0

As it is the case for representation of specific heats using NASA7/NASA9 or Shomate polynomials, functions defined by parts with an specific change point are also required in physical modeling. To this end, a stepwise function can be established with makestepwise1d. If keyword differentialble = true, then the function makes use of the above interval and remains compatible with ModelingToolkit, for instance.

julia> f = makestepwise1d(x->x, x->x^2, 1.0; differentiable = true);
+ 0.0

As it is the case for representation of specific heats using NASA7/NASA9 or Shomate polynomials, functions defined by parts with an specific change point are also required in physical modeling. To this end, a stepwise function can be established with makestepwise1d. If keyword differentialble = true, then the function makes use of the above interval and remains compatible with ModelingToolkit, for instance.

julia> f = makestepwise1d(x->x, x->x^2, 1.0; differentiable = true);
 
 julia> f(0:0.2:2.0)
 11-element Vector{Float64}:
@@ -76,7 +76,7 @@
 1-element Vector{Num}:
  x
 
-julia> f(x); # Output is too long, try by yourself.
DryUtilities.makestepwise1dFunction
makestepwise1d(lo, hi, xc)

Creates an univariate function that is composed of two parts, the first evaluated before a critical domain point xc, and the second above that value. This is often required, for instance, for the evaluation of NASA polynomials for thermodynamic properties. If differentiable, then the returned function is compatible with symbolic argument as required when using package ModelingToolkit, etc.

source

Rounding numbers and automatic axes

Danger

This section documents functions that are used in a very unstable context.

Simple rounding is not enough. Getting values that are rounded close to a power of a given number and rounded to floor or ceil is often the case. This is standardized in DryTooling through closestpowerofx:

julia> closestpowerofx(10)
+julia> f(x); # Output is too long, try by yourself.
DryUtilities.makestepwise1dFunction
makestepwise1d(lo, hi, xc)

Creates an univariate function that is composed of two parts, the first evaluated before a critical domain point xc, and the second above that value. This is often required, for instance, for the evaluation of NASA polynomials for thermodynamic properties. If differentiable, then the returned function is compatible with symbolic argument as required when using package ModelingToolkit, etc.

source

Rounding numbers and automatic axes

Danger

This section documents functions that are used in a very unstable context.

Simple rounding is not enough. Getting values that are rounded close to a power of a given number and rounded to floor or ceil is often the case. This is standardized in DryTooling through closestpowerofx:

julia> closestpowerofx(10)
 10
 
 julia> closestpowerofx(11)
@@ -99,11 +99,11 @@
     v::Number;
     x::Number = 10,
     roundf::Function = ceil
-)::Int64

Compute the integer power of x closest to v using roundf as rouding method. This might be useful for automatic setting more reasonable limits to plot axis or similar applications. Changing the rouding method through roundf is also possible.

source

Below we illustrate the usage of axesunitscaler.

NOTE: this function is not yet stable. In the future it will instead return labels using symbols like k, M, G, etc., for the units through a flag provided by the user.

julia> axesunitscaler(1)
+)::Int64

Compute the integer power of x closest to v using roundf as rouding method. This might be useful for automatic setting more reasonable limits to plot axis or similar applications. Changing the rouding method through roundf is also possible.

source

Below we illustrate the usage of axesunitscaler.

NOTE: this function is not yet stable. In the future it will instead return labels using symbols like k, M, G, etc., for the units through a flag provided by the user.

julia> axesunitscaler(1)
 ("", 1)
 
 julia> axesunitscaler(1000)
 ("[×1000]", 1000)
 
 julia> axesunitscaler(1000000)
-("[×1000000]", 1000000)
DryUtilities.axesunitscalerFunction
axesunitscaler(x::Number)::Tuple{String, Int64}

Find scaling factor for multiples of 1000 units. Together with closestpowerofx this can be used to produce better automatic plot axes limits. The returned values provide the string for modifying the axis label and the associated scaling factor.

source

Computation of changes and residuals

Danger

This section documents functions that are used in a very unstable context.

Unit conversion

Others

Abstract types

Fixed state materials

Problem solving and physical models

Transport, thermodynamics, and kinetics

Finite volume method and relatives

+("[×1000000]", 1000000)
DryUtilities.axesunitscalerFunction
axesunitscaler(x::Number)::Tuple{String, Int64}

Find scaling factor for multiples of 1000 units. Together with closestpowerofx this can be used to produce better automatic plot axes limits. The returned values provide the string for modifying the axis label and the associated scaling factor.

source

Computation of changes and residuals

Danger

This section documents functions that are used in a very unstable context.

DryUtilities.maxabsolutechangeFunction

Maximum absolute change in a solution array.

source
DryUtilities.maxrelativechangeFunction

Maximum relative change in a solution array.

source

Unit conversion

DryUtilities.nm3_h_to_kg_hFunction

Convert [Nm³/h] to [kg/h].

source
DryUtilities.kg_h_to_nm3_hFunction

Convert [kg/h] to [Nm³/h].

source

Others

DryUtilities.defaultvalueFunction

Syntax sugar for handling a possibly nothing value.

source

Abstract types

Fixed state materials

DryAbstract.AbstractMaterialType

Base type for any material substance.

source
DryAbstract.AbstractSolidMaterialType

Base type for solid materials.

source
DryAbstract.AbstractLiquidMaterialType

Base type for liquid materials.

source
DryAbstract.AbstractGasMaterialType

Base type for gas materials.

source
DryAbstract.AbstractSolidMineralPhaseType

Base type for any mineral material.

source

Problem solving and physical models

DryAbstract.AbstractMatrixProblemType

Base type for linear algebra problems.

source
DryAbstract.AbstractIterativeSolverType

Base type for (nonlinear) iterative solvers.

source
DryAbstract.AbstractSolutionStorageType

Base type for storing simulation solution.

source
DryAbstract.AbstractPhysicalModelType

Base type for physical models.

source

Transport, thermodynamics, and kinetics

DryAbstract.AbstractTransportModelType

Base type for transport models.

source
DryAbstract.AbstractSolidTransportType

Base type for transport models.

source
DryAbstract.AbstractGasThermoType

Base type for thermodynamic models.

source
DryAbstract.AbstractSolidThermoType

Base type for thermodynamic models.

source
DryAbstract.AbstractMixtureSubstanceType

Base type for simplified mixture substances.

source
DryAbstract.AbstractMixturePhaseType

Base type for simplified mixture phases.

source
DryAbstract.AbstractKineticsMechanismType

Base type for coded kinetics mechanisms.

source

Finite volume method and relatives

DryAbstract.AbstractDiffusionModel1DType

Base type for diffusion (heat, species, ...) models.

source
DryAbstract.AbstractGrid1DType

Base type of one-dimensional grids.

source
diff --git a/dev/index.html b/dev/index.html index c8a2b6a86..39e2cb4cb 100644 --- a/dev/index.html +++ b/dev/index.html @@ -1,2 +1,2 @@ -Home · WallyToolbox.jl
+Home · WallyToolbox.jl
diff --git a/dev/objects.inv b/dev/objects.inv index c22673c5afd3f16658172750f2add5709ca89f0e..96af52f719bc3f195c6b2bcc872d75dfd4bca103 100644 GIT binary patch delta 5001 zcmV;46L##QDAXvBhAZPnx_;*>YLGFK%rxz>-RWfVCf~Y^v~9sscYrhwj1pP0I4-g{ zytu6%-*~V->c{-3E2zDi}2@A1jIikPBjCT*}n?Di+5daYj@~)y67W#Ps^5e%w zi0V{Ee|&&IwkEPQv8}yd8GG_id-}I)dXdp(fh5?RoOhN&uV|7mj>Nt<6;YnUyxHH&OxyNF_z;Ji7@bN?|D zW!krvbFeOXDzXA(Yr0|y*tLWrX^n#@4sSBO_Qlc(VN(+T`(^g&m0zq_2J*a4XdDIkE2;8N zFr)&$^{8oOm(Lq`{H4a=dLoUUq@6JBycvyC&cN7c8|w!k-}U~huIwqJu{IeBNi32e z(tFDikRI-*WtNI2lU=__lCNRRf4Sl%f4G994;NR+sIf$2mAoB~lec3JJm$)$DQrv_ zy^PYANkTbT9~_ui!hd?T3cDbt3*6KwL4|_-j|!3W2~D?*OEjvPL3?r-g*1Y>;N@_m zl(P`ky^!YPOuR@Pwq(SRc@xh42(^4k!Kv1{oj*q~=fpMiW`%fSx&JGD?%UVye<>;) zL7Z1nLjOXEB+PTR&I=azE!=ipu6!kym1tHEM-}*GP9MjOTjGes!MNiTTJFiEX*T1~ zCSe%i&OnWq%Vw#P<1+K%&~(v(pX0>Vcmx z`omMxl-Q=;bX}}K2CaD-7i&qdvu)ld8Dxfl7%c{M4Q!fQIzBHSz2KF%6FE@WEl zMaDzDC-Thc9iSgOgME*C4aai0jXi5^UmKi86~I3`OgVE|;^ymyyg; zWMAQ8HLbMHnwB_P@6%jHnWMF*0^6_ZRET%io95^$N>h1c#YKQ`Npj4%m!(QijRcQO z+Z+=?CgPaDll!6gwm)i<&ks(1%%yZDV8csM=70Vb>=H!qQft6)Pwy^vmITL2Dy(SW zfz_KV@&eV!FV<-@xU5)o(~QVwpxVLH{=zHGX7=SHtT21=p+g2jJH}5aBvDB3sw~Qk z`B9u^;+dfyZXKx#%qjfLAR>;fMd1l}0t$^YS z$QJ%c4RcY-H zt6y!mIL7R_H`1$tZvZ?HsSy=$BmY=1(blEr7{=d38x-Gx~b5=%%VA#|k6WP4I< z%V$*kItjrp;zVWPqR~N5<-&nv%>okJQbvLPGUD-`Mye?ZQkud3qK5FT>SDl9H2|!+ zh8PCL=-r5CG@5goJkm_iQ8J;h#9+M-?ew@-3-G;PDd+3C5PTsTbrt#etXwRxl7AHC zV--Xpi9&kdL}cuu>mjB}ko(^qA0M86zoXmgWrfH9dBL-z`;y^}ZeuD5IZ-`(XOv?# zQYXE+50Q^4M(*rP4X4U@a{`>EB#FWu(PXEjT|sTqehC47nu{pJTFXk%zVUXGRnSDD zy;(}LJSx_5Nx@H~n7hNm%&^$pyMO!JSHtkiZE(Cq^LiI7plcL)@STg2%d+FBg0jXF zhi|WqFLPc_*CVS8tz{yP$h*TT?0`&HwyUJM@4&>uBQ#CD{>=Fd5tOz7h-?~7B-*># zWZAy5BJvH*Ri)65D0#rXB2-7tu*DE-%R~(3 zw;$()oWyV%?{!rs!KP5Mf3y(zad5aSL(P>I19PlxCvF205zDIVMUB<_bc4cKl=0}C zvL|Hi;B7;7itK`_ zjP12pV*)EfYbH1o%i=T5HdL$p>Wz*5=u5WzG)ptO9xXWzwO_Guyt~UxV{8?HaZhZe zt>oy=X(8h1%MM4`5>6^`@0OK#EC|8mXOTUr8x9wYrM^+_ovnakCVz%mngV2YS1N3= zS|oTvHl$E(T6$+$2@wdGY%wkv@VzNmCJ{z~-wKzvt)2!F0J^ac88wV|R)_#Hy#o3T z_IwY+QInu~B}3lskptDYd+MFx4Is=z%^e`q%1uwIv&e?b(l&+3(xS|fK)3ThXLu}| z^^z!ryoRJ}yBguWqks7mgdoIB{@y&XTbus1iDduPndV;~2-N>o8^?a#ft} zp1OW0hixkC>L)Ks0v+{7ASxFS_OmI?U>=-Z@iOYWJ~H$^hJWwf(q}A=>!a+QF6z`M z+;yF^GU7#76=M9Y5oFS(30W+9J+4^v+8uB1e5m>Vc$B%P1I&%bmi4+ke%aTlRFxQX z@qBAW=YtPn^r=kuGy=_58N&xiGCS&>wJ}t0uC@${yWuL^;`J65(+=aa{p7;;u2G{? zq0btyMuIo)Ab$hOz$al|wX>(MG0RGcV#CJS25OGptMA@gUo@etOO(j5^(Wc=NthuZn!tM>q2-k)8exop1AhjU0OsjtPXaZ`@KX-0!@WQ#u}DbtSp;rV=K>gP^>T^ zmtTxzDaAbgnj-puK9r&!o07UV)bfC+im>vo6!-XhIR_d1&epLs>tl}a8qNZHmXWaI zs=a&B+Ijchg*3QQUxO@C7ctR8j=k3D-~{1~`+wYNCOT@mJ<)yr8n=OZ@;Vg;%#f}o z#eM?hPdC%)_4)XknMLinU}ky0qFPoTTeVbXpV)AUJ<9-t>%zspE_^m37D!d;abGKM3EefFU9aU}XdGn1PxUJ#n`>j;m)s=-X)xH=vHat{`|j1(eavTa zeC#|Dx`H7NNwxFdGbXQxjk`$zD0%xU_uevLL*oG#O?m<@M^e9MGUfPM4ZgorhW%ck zEkznfG)|>nq4+E>iV8n37X!tr|B%X3;(v`nK^&!LZrc^+THL6$Fqi5q+B=7y)TL*% zP!QIEAaA(VGStQ!TGF8P-c8Td$rkH#BT@$@uB^K!9j!1LB{lDn6e4ZC5Ywp>=H(Fu zQ0J|itlTeb?O%tC?s7>8utZ{OuQPn@ReC2`Q8I2_xD^pU7C5ZKA@EpC0|B-@~@-J9W3Cedq#n+@nl9C#!%p=OeI;~(ulSgLW zc+8`)-1M4a1uTu30_$^C4fdw;mXvz7uM35;T&gJTfzwI^PyRKQe->DO8JE#ZG^wEL zp#XiP5k%5&MJ67a_D4Mx4Nu)&M~Wf6xk`FyKG=*}Zs73+`5XTk56elz1lT1!fR>Z3lG5Oi^Y3b4aO>ex+FnU)#5iPV0$)oo`{)e7n1Zcu%Kj;a4WLQ4?2V_*Vc=P)A0W+(R9Go26xhW#}ps8S%&Gm#u&u9p{o8TS# zjt%SVuZ^->Rjsui210NaK7RyRnad0QJrYqV&TfZSdvd#lcgfK}0kbI>bncd$L&5SQ z*CTSjN_|3O{|aldu=?8!3O~IR{rF>D0)rEzVPL;Y?q?QA3#|>w2Hgq-=me z#{g`w-%T%X@x$5V_V)6=A&zxRRV}d}qT9q;6bqIcyI;5U8 zY=;wENQPFFr)#{6oZ%}DEwOBzN7UB8pb_7)>aOuZgiWdMZyeJXb2&?U`k}}bqt6k9 z9~%)?@;)RHuH}?w0e|DO=nJb@(3aq}oEu(F4Q+dN+_-p1_j z%I$4oAP;GjGXGWy@atEkrMVj{TPFz!*=r?OR+pU&$7X<)={3p`cKPMoUhX3KhPAJG zUl=%59(V`W-2_+7bk`2c_q1oATJ(`^Soaq6EzQ+?Nqr!@3V+5j;i})mP^YS<*t;AS zIH!wJrid5Lsq`(NiQW!%%_`xLHjpH9; zsYNqwLu98EMllv+Z~yhbn`YC6I5@vNn7paWFMVQChU-C&`XYU!(x4&XPJ^o&>6jms zx2-6XjeYE5LVp~e6eGNDrG3@i))sq)S9jt;D_wCqNxxL!}nDCHry|dCCGT0j%(H_khlweBL}vuA33^5LaY4 z2W|7aj!xR+vi9a9<09DPer!uKprM|wp}z9(v#_d;Gy;p7vwC`bSUnWtA&E~PR)f4& zq5Y||wSOJKQis8<-}0mVfBBl6q~1T1aH7X5igy zT^YlR3dq9;6ka_RBN@u8jEgY42w^~V%JynnSB@_jv+#_C_}(o>K^F`Ud()ON-4NFV zT;#ALsrbx5BAYSMb~{QTzj`sZjz$>Z_tD?WD1RKKo6`E|a!=E6ciIlSQ0fZBFA+~* zu}omQX^A?V=SJ1*T9@Gy!!p(+$~I2NjVQo_6Bd+tA>u}vZGZ~&qq`jic&$8zHSdmk zHoLnju*&Xi`gB`8qPmND$$9h)k@CO(@8AFYpP})tMPa~u_T$0j$-z%22Y>ykkxk&u z-hW}1xu(K(UELVM*xpi^a_0{)%ZHr7%)`#L?Xb3e$m-(SiKko?T>f=Ao%eL5r!C2E zIjrINj58`a?tPXAFPklj6POqx$p8lu(>xy%8n|7!1e@@<9uZV#~AuM7hZtaeyT^o8LcmCT|= z(-ZYXkE)uCiZM1oYa%;CH0K`BXl$su4-d5(MBC#mD~Pjoynsaw)L+Kbe`}y=d`32_ zXG~w{LjIw_VKvm&uA0NwjU`7nA$6`32yT{57fXg_?oE8XI8sm8>tVyM_-$Jp)SBKe T`tNSu$mNOh-pK7gJDZiF#7Xp2 delta 4972 zcmV-y6O-)JD5EHlhAZ1hx_;*>YS3eJ_e^My?R2`Q-{f0jbZiTjk^mhX7$ve~aa?3^ zcyX)@`jN2~e*q$i^?h~w?^Se^gzSanMfh_l0^%PN@=nCeyU5m8Tztt_j1@;wvrX-3 z?HdB$W;7`|%{p=RVf725ZfL=>i1NG>=APERc`L?KmgUvf`lloEPJQssX#&k@o7X%r zAH2JiC0BQon|4$C#D4PbX?RZgZP)s^NA9Cnz_UslfB1St=5)as5leC|U<65#d-rU~ zGL{6aV;w5bDxbYMqroal9*@pw9`PuDvLCA8{#HlCd~#I%E75M^mc%~0k^eLDp3yA9 zANpx@(}R=0*v6y@_vTTW`!ostjKxT$cbwA&=S^uwIcMAtM4XldkZl{H{Qz_ZO)T2`2=iS+uLX9pWwhrs zmje4Y7GU%96-^Sxk=Xa9BFb}^H~V|JiOY^=e_j?ssXC5Jfr$Zo7g5X-oHu8A?muRt zO#9Yy4%Q`4MOJ`pO;;=dyOvNSt#J^=;Z3I3zF7J}k(b%>a8>6tmIA=g4i(n4Q{r$k zP8?2P8X#7nz5X&{JRG$o21+E02Gan5|Cb&OeF_Eo%2s?D`f)>=j$f9SKAh}{A zf0~UbHt$T7Nl3G`8tpjQoeBQTGL+mBmK*ypY-$2vzsx?p@{1MAK%UnLjiVrcB~|_j zhE%|}9yP7(@_7S~ztk99Po&Y4v=gSCH=}XN85kRFWBmZ+yWW4*l|5xN)+R$CiA54b zdT&_*(!>3<%u>;0vgY4FIT(-e^+qy;o=GzHI`_slDFe=@^*}C93?2RJtVvA6Msg z?iInD6W7q272=8I{wMm}x6IvBR5*e-uc8zFg_01M=WLx9Ebd#l?W$GzN-QhUf2?jVY{tJ#!Z5;}fi^v!bHrLWvWjD!ic56(4TWI%J9FwTNOo`lU)Q*f8)_(`+SIBueSE=bOW$@;C74tXwft!wy8H= z7b}oKYo5l1J`(I~oA+79d?6r4i$NW^-`%fs@4o3BW323T{i)ev9Na7h%iS{zSVr6A z&wqv>JYJM}vCk;n5V|nD2v%yxX|TthBrmD(nhv!H_sX@8vqp~#i4S{`;Yt3@e>c7v zfuC}^H6+*3M4RZ~`m>}2n|N2E%p!;i(K@5c<*e{!aJCfL?{Kl2R$6CG zOB}8Dc`k##(b`ji?N@aw#JlTFb95D@sXVgcBEYvKIVQl%Qe}%qf=6aij)@=>aZKRJ z{ZM?{AGOKn2PZ$~QaTf`;iV{ZfBy=02?A=VHDI`>cNaTLf@38WRy6Ry>P;4TfokLz z>$DkMRxG+{Mr1Qk?ciyD;gx1H`|=T1n7#PWAp@Zu<0ll7D5Q5)7G=i#C{8o+%uo-v zj#LHa6nAP4EHLAIKGTW=JJRn3Ms7;#%F2De|3>zgx*iD zZ*PqOjxijouy}8yWC zQCUZ5bkI{sa3EPifW)?xQJ}w!c)X{PYD$8XX0X4gA$+U47%)@~0Bf!xhCwlUH{uzM z=A0&vG!t}`OeicdSnoqSJ+9RPeD4$Gd_5O}FT_i|p?rK+E*4nWe~I$33ZjriAw6&+ zGIr7R5K|?{{qK&C4^O|}(QWmzLS%rv;MviA$?!(EF_nazsGhwu%CR`8liu8i$j8(M zcXpGVq z;3rbd-C<#7So`hWfBo&NVR+>>I9{T8y$cr5HHtj=&PB;(6>wC2SL2Dpx7Ws(IWMQ{ zkyVD)G7(4Q-CPdd}ibH>VBwK!-r5Rn1mK=xLuh=-=-DRdRwu->GC$<(=a&)+~5OMT%hqGS^Cl$DN z%St>)gK+PQ$ez@dfD6V_-zfLaRzNWm!z@h!GP^qnf3}<~5r-1~3ZtO!w4da~^B7j`1fPRBLUtDn1Bxv4Ykk?`4K=pN) zdS`fL1~Wx-X~wj2)065fvLUmyO<}UMD03vx?ffqpP19y%RUuIbd2dHoUp2yeNAoAf zxzD2~f9BH+G{Vn$6tpC>V)CjGA|XUWAm3rj5}zbbdGBCUBO)7NRRzM+2=7~biHa2{ zh&x&xkaapZK{#=6cM_7ZC8!cQhu>Ksu?HrOQCCXLKIE!=+&y*uP!8MFz|~J)lmt31 zk3du|ATVcBn!!9cyW(Zkci&>@1qR={rO#Ntf7XZ1JKb!lQMmgpXJy2Tt~$Z^YZl0) ziwClt^Lku4=e0Y4-1*q?|M9SKPe+U!4;Jf{bNsTebE7IT=;Ha-oXZCv!st_(?r8*? ztulrWkOp>CBx_@+UiEAl6n7<5w!NW{CdRbG_-sF0@V#r)=v3&_0IXu*6*b6!GVn>5 ze^>47>1)igmf@HQGJA6ttP;V+<8DKrW&*5Ej2B~`O|Fuf9q8J<>LIei5{;E%h{3vg zVv&KGqxb5&=+zfZDC-g>a%}xcc7GCP2#6-|-bZM8<(Wemo~ zAPNJPgZ&s>>7(*-W3FW?G;wI}D$4Q#(kRw@@3E6f!ia>)AVK8Oe$T-Tqm|NJfS9K1 zeO1*pouS9;GTGXHig@=N8o8KiPOy3FdPtUnr5Y46s)i8cB_T)61~>|_JHcFbe^)nZ z(VoI0V+~6zR#um_#gj)M7tvB?#qx`Z6qI%x|DIa&fIgJA9Gl9swwCf7rHZiei_)Is z@8uk11Ug&C(zcE{>1tSP>{*7Rj;r>@Kx^mS+XB++Nn0Ick-D#lZffl9M+YYeZ`?vo zGtp7{>+KbcPlHVOf2n@)VRM11 z`)amiAPoll5|Mx0cT2nal8X6Ej*p#3LRT=vA*puWd&cA~s&NPIfRdM_a_=n@Ha;D2 zAEPJgaU}KY7*mcfgWy{?W!Ucp+ES!(MB`Nc6N)eLKBe&UaxqY>`cH~1C0?u(#8GsYEf87m63k6{v2=a#8A46@tp(PDk@7?rV9WSvyHzIXl;%cjV z($NZ|QBw2vLm|@EYaE?AVP1Jq0Cg<6$;$o0*8X+K=q`6@081pccI*H5o|sqf`kRyT zdwlH$MIb5T1s<1TUPwV~WRC39mrcha8cQ@*=7knZ5bMq0IeHcUewik)FB{jAd4yZOn zvlH3EGvo9Z_;$!Re>-m99aUKC&gvvpb@ko*P3~?W?T>mY8lJi=GVwLBkxj91P{WOga0$}&}%E+k39JCOkodx zyim0-n^zn@vf_yfu1@w@NeZc{#`h4~WJ)w^bYgqq)jEWX-UjH^=W)+fy zlVdwKMFbx-70j}^p0MZ{4Pkc^ylURDVV(W8QFg1U1<%7k2+qQXAS-iu557ktDizZ0 z@M=$PxA4j}e;O!YHU)#u-Ewm%SYG6MMDACqPiX94VL=pDfBRxoh+u3TR0k*L;7TN& z8o9N_c?vF^=^HR=D3fGe@6(x-4KU~!fDQJ$>E$hcIGfzwUfwsvv2LlVb?!rSn|OIv zDScx}n{{s|`{xh$msbOYzKqj`F``9&hVK^rItxU`f9%@{N()X;UXiL+oSyvl+bc3y z@tfUAweRWBXv^t|+P1n5!LL$>)U$@|aDofT(2DYOjaPOvd=sE0mW@M!+WHqX;#*eT zHC~9YDfRu0WBOulNNG<$6uDybIfC$GBf?7Fha|$aoYE{{d=`CW6${!Dyq0srJDj1- zQ2Sh4e{Fd31)yiTZP{8~*y)6vnA&pYz-zouq{fe|ScY|f?Bmp6Ntpv;J zvXkN146ri2MmfSRzkDgm-M8Mb_BHPd1E3e)f9V|!vg1YQOXqYf5JJHz6CVV+o7&mB^;9cOuV!;zJ3L& zsa)Y8y|R1S6xY_coTyn5pMs=u{PQ8TXr^t5?3BVN#$xR4zy5dAY`PE!=a&bQH+A`? zPfW^iJ;+gCq;FIjG$h<I`veEmTLiT*$v~u#X_e5e*D-YO%rF$?W0$?shhx+|D)a8(a+XkyoQoHHWhrGh!}pT)B?9;UydSA zS%4*g72dEO(7BV(n}^ADGeREXiVWwVZGP9$Nqbz@-h5kiA>cDyqm2nV|Y;kdH8_BtH)v_LwS{P5oQ-545&`oUQO%D z@jYA?p0N;LPsJ$cg5hCr+A^ja;+lYq9CjoXUl>SaGbY+@M=9i2FXrmc2m|~+`g<9L zqjXbRA6@Qg8tzWpVHZkWq4*`@e+ev>32ZklQHS%~sCr%NGJIlK#+pRg#_6~b1$c16 zf-)~e+$ggRP=S7Qx1#{Bm8Y=g-BHhGcUJ{g*_}0eQ*txbH z*0v8>U0gfyl#7DPzlo;vp04z?CHXCfH9VhjMn%WH&+_19vqfz)4vUGtGW=7BS+r<+qMqncRg+OM#s+9jWM_!x+yfeo4OREyp;m)v zdz@tjakh>Zu&9Chdye{*{HF2Qte!D_p$qx<_=eR`Tf1rwUpJN using RadCalNet;\n\njulia> x = Float32[1200.0; 1000.0; 2.0; 1.0; 0.1; 0.2; 0.1];\n\njulia> y = RadCalNet.model(x)\n2-element Vector{Float32}:\n 0.3231391\n 0.6287435","category":"page"},{"location":"RadCalNet/","page":"RadCalNet","title":"RadCalNet","text":"The array of inputs x is defined below, and y provides gas emissitivy and transmissivity, respectively. Notice that x must be a column vector with entries of type Float32.","category":"page"},{"location":"RadCalNet/","page":"RadCalNet","title":"RadCalNet","text":"Index Quantity Units Minimum Maximum\n1 Wall temperature K 300 2500\n2 Gas temperature K 300 2500\n3 Depth m 0.1 3.0\n4 Pressure atm 0.5 1.5\n5 CO2 mole fraction - 0.0 0.25\n6 H2O mole fraction - 0.0 0.30\n7 CO mole fraction - 0.0 0.20","category":"page"},{"location":"RadCalNet/","page":"RadCalNet","title":"RadCalNet","text":"For practical applications, one generally is interested in calling the model with a large inputs set. Belowe we illustrate how to do this with a block of data and verify the predictions are within the model tolerance on average.","category":"page"},{"location":"RadCalNet/","page":"RadCalNet","title":"RadCalNet","text":"using WallyToolbox\nusing RadCalNet\nusing Flux: mae\n\n# Loss after last training.\nLOSS = 0.0022\n\n# Random sample data randomly extracted (20 rows).\nTESTDATA = Float32[\n 1670.0 960.0 1.9 0.5 0.15 0.18 0.03 0.161774 0.820025\n 1230.0 320.0 1.9 1.0 0.04 0.08 0.18 0.20205 0.79694\n 1760.0 770.0 2.1 1.5 0.22 0.24 0.12 0.309017 0.669564\n 1770.0 960.0 1.9 0.5 0.15 0.0 0.13 0.0721235 0.919333\n 350.0 1590.0 1.9 1.0 0.06 0.29 0.12 0.357215 0.169437\n 2330.0 1820.0 1.1 1.5 0.13 0.08 0.13 0.100282 0.840802\n 1220.0 2070.0 0.2 0.5 0.11 0.17 0.09 0.0361672 0.902581\n 760.0 1380.0 1.9 1.5 0.1 0.01 0.10 0.188531 0.69798\n 1870.0 1880.0 0.2 1.5 0.14 0.28 0.17 0.0819803 0.858508\n 1910.0 2220.0 1.3 1.5 0.2 0.3 0.09 0.202592 0.63856\n 2290.0 360.0 1.8 0.5 0.0 0.23 0.07 0.0755366 0.914045\n 1330.0 640.0 1.7 1.5 0.21 0.04 0.06 0.227428 0.764363\n 1090.0 1260.0 1.9 1.5 0.17 0.18 0.18 0.381407 0.501751\n 1250.0 1590.0 0.4 1.5 0.13 0.27 0.18 0.191725 0.688272\n 990.0 2320.0 0.5 1.0 0.23 0.27 0.03 0.118285 0.633932\n 1920.0 720.0 0.3 1.0 0.05 0.03 0.18 0.0496579 0.945693\n 1250.0 310.0 0.6 1.0 0.04 0.18 0.15 0.171857 0.827273\n 1990.0 1020.0 1.3 1.0 0.09 0.11 0.15 0.140596 0.837042\n 1180.0 1830.0 0.3 0.5 0.09 0.29 0.02 0.0682171 0.851304\n 2120.0 1230.0 2.9 1.5 0.03 0.06 0.17 0.168034 0.791942\n]\n\n# Predictors and targets transposed.\nX = transpose(TESTDATA[:, 1:7])\nY = transpose(TESTDATA[:, 8:9])\n\nmae(RadCalNet.model(X), Y) <= LOSS\n\n# output\n\ntrue","category":"page"},{"location":"RadCalNet/","page":"RadCalNet","title":"RadCalNet","text":"The following test can also be seen as a tutorial for data generation, where we make the verification of data generation with provided seed. See RadCalNet.createcustomdatabase for more details. An alternative RadCalNet.datasampler! can be provided for specific problems.","category":"page"},{"location":"RadCalNet/","page":"RadCalNet","title":"RadCalNet","text":"import Random\nusing WallyToolbox\nusing RadCalNet\n\nfunction sampledatabase()\n #XXX: documentation is run from root directory!\n testname = joinpath(joinpath(@__DIR__, \"src/RadCalNet/data/sample.dat\"))\n\n # Provide a seed at start-up for *maybe* reproducible builds.\n Random.seed!(42)\n\n if !isfile(testname)\n RadCalNet.createcustomdatabase(;\n sampler! = RadCalNet.datasampler!,\n repeats = 3,\n samplesize = 3,\n cleanup = true,\n saveas = testname,\n override = true\n )\n end\n\n return RadCalNet.loaddatabase(testname)\nend\n\nA = sampledatabase()[:, end-5:end]\n\n# output\n\n9×6 Matrix{Float32}:\n 0.61 0.0006522 0.00680899 0.127997 1.4369f5 0.784483\n 0.63 0.00147905 0.0163017 0.256072 52761.9 0.493376\n 0.8 0.00181013 0.0525569 0.209679 1712.82 0.743175\n 0.69 0.000962085 0.0317917 0.0917254 3.80101f5 0.88582\n 0.69 0.00246231 0.0538234 0.418247 1442.63 0.479691\n 0.68 0.00210072 0.00470752 0.0997078 71325.7 0.79875\n 0.67 0.000770321 0.0101432 0.0812446 3.0696f5 0.815462\n 0.7 0.00154008 0.0215186 0.253691 24945.7 0.478712\n 0.53 0.00133843 0.0180676 0.234852 21784.6 0.7443","category":"page"},{"location":"RadCalNet/#To-do's","page":"RadCalNet","title":"To-do's","text":"","category":"section"},{"location":"RadCalNet/","page":"RadCalNet","title":"RadCalNet","text":"Broaden sample space over the whole RadCal composition spectrum.\nDefine data loading on GPU/CPU though a flag when recovering model.\nCreate database for testing outside of sampling points.\nImprove model reload and organize a notebook for training.","category":"page"},{"location":"RadCalNet/#Literature-discussion","page":"RadCalNet","title":"Literature discussion","text":"","category":"section"},{"location":"RadCalNet/","page":"RadCalNet","title":"RadCalNet","text":"using DelimitedFiles\nusing HDF5\nusing Plots\nusing Printf\n\nusing WallyToolbox\nimport RadCalNet\n\nfunction gorogcomposition()\n X = zeros(14)\n X[1] = 0.2\n X[2] = 0.2\n X[end] = 1.0 - sum(X[1:2])\n return X\nend\n\nfunction gorogsemissivitydata()\n pr = collect(0.0:0.015:3.2)\n Tg = [830.0, 1110.0, 1390.0]\n\n X = gorogcomposition()\n prod = Iterators.product(pr, Tg)\n samplesize = length(pr) * length(Tg)\n table = zeros(samplesize, 26)\n\n for (k, (p, T)) in enumerate(prod)\n table[k, 1:end] = RadCalNet.runradcalinput(;\n X = X,\n T = T,\n L = p / sum(X[1:2]),\n TWALL = 300.0,\n FV = 1.0e-15\n )\n end\n\n return table\nend\n\nfunction gorogsabsorptivitydata()\n pr = collect(0.0:0.01:1.6)\n Tw = [277.0, 555.0, 833.0]\n\n X = gorogcomposition()\n prod = Iterators.product(pr, Tw)\n samplesize = length(pr) * length(Tw)\n table = zeros(samplesize, 26)\n\n for (k, (p, T)) in enumerate(prod)\n table[k, 1:end] = RadCalNet.runradcalinput(;\n X = X,\n T = 1110.0,\n L = p / sum(X[1:2]),\n TWALL = T,\n FV = 1.0e-15\n )\n end\n\n return table\nend\n\nfunction plotgorogsemissitivity(εdata, εgorog)\n p = plot(dpi = 100, legend = :topleft)\n scatter!(p, εdata[1][:, 1], εdata[1][:, 2],\n markerstrokewidth = 0.0, label = \"Gorog\")\n\n for T in unique(εgorog[:, 4])\n sel = εgorog[εgorog[:, 4] .== T, :]\n pr = sum(sel[:, 8:9], dims = 2) .* sel[:, 5]\n εg = sel[:, 24]\n plot!(p, pr, εg, label = @sprintf(\"%4.0f K\", T))\n end\n\n xlims!(p, 0.0, 3.2)\n ylims!(p, 0.0, 0.7)\n xticks!(p, 0.0:0.4:3.2)\n yticks!(p, 0.0:0.1:0.7)\n\n xlabel!(p, \"Optical thickness [m-atm]\")\n ylabel!(p, \"Emissivity\")\n\n p\nend\n\nfunction plotgorogsabsorptivitydata(αdata, αgorog)\n p = plot(dpi = 100, legend = :topleft)\n scatter!(p, αdata[1][:, 1], αdata[1][:, 2],\n markerstrokewidth = 0.0, label = \"Gorog\")\n\n for T in unique(αgorog[:, 3])\n sel = αgorog[αgorog[:, 3] .== T, :]\n pr = sum(sel[:, 8:9], dims = 2) .* sel[:, 5]\n αg = 1.0 .- sel[:, end]\n plot!(p, pr, αg, label = @sprintf(\"%4.0f K\", T))\n end\n\n xlims!(p, 0.0, 1.6)\n ylims!(p, 0.0, 1.0)\n xticks!(p, 0.0:0.2:1.6)\n yticks!(p, 0.0:0.2:1.0)\n\n xlabel!(p, \"Optical thickness [m-atm]\")\n ylabel!(p, \"Absorptivity\")\n\n p\nend\n\ndatadir = @__DIR__\n\nεfig = joinpath(datadir, \"media/emissivity.png\")\nαfig = joinpath(datadir, \"media/absorptivity.png\")\n\nεfile = joinpath(datadir, \"data/emissivity.csv\")\nαfile = joinpath(datadir, \"data/absorptivity.csv\")\n\nif !isfile(εfig)\n εdata = readdlm(εfile, ',', Float64, header = true)\n εgorog = gorogsemissivitydata()\n p = plotgorogsemissitivity(εdata, εgorog)\n png(p, εfig)\nend\n\nif !isfile(αfig)\n αdata = readdlm(αfile, ',', Float64, header = true)\n αgorog = gorogsabsorptivitydata()\n p = plotgorogsabsorptivitydata(αdata, αgorog)\n png(p, αfig)\nend","category":"page"},{"location":"RadCalNet/#Verification-agains-Gorog's-paper","page":"RadCalNet","title":"Verification agains Gorog's paper","text":"","category":"section"},{"location":"RadCalNet/","page":"RadCalNet","title":"RadCalNet","text":"Below we compare computed values with those by Gorog et al. [4]. Reference paper is found here.","category":"page"},{"location":"RadCalNet/","page":"RadCalNet","title":"RadCalNet","text":"(Image: Emissivity)","category":"page"},{"location":"RadCalNet/","page":"RadCalNet","title":"RadCalNet","text":"(Image: Absorptivity)","category":"page"},{"location":"RadCalNet/","page":"RadCalNet","title":"RadCalNet","text":"At least qualitative agreement is found and orders of magnitude are right. On the other hand, using directly the model parameters from Tam [5] do not produce the expected results (not displayed, work in progress in this draft). It is not clear how the data is pre- and post-processed for use with their network.","category":"page"},{"location":"RadCalNet/#All-interfaces","page":"RadCalNet","title":"All interfaces","text":"","category":"section"},{"location":"RadCalNet/","page":"RadCalNet","title":"RadCalNet","text":"Modules = [ RadCalNet ]","category":"page"},{"location":"RadCalNet/#RadCalNet.ModelData","page":"RadCalNet","title":"RadCalNet.ModelData","text":"ModelData(fpath::String; f_train::Float64 = 0.7)\n\nLoad HDF5 database stored under fpath and performs standardized workflow of data preparation for model training. The data is split under training and testing datasets with a fraction of training data of f_train.\n\nscaler::StatsBase.ZScoreTransform{Float32, Vector{Float32}}: Scaler used for data transformation.\nX_train::Matrix{Float32}: Matrix of training input data.\nY_train::Matrix{Float32}: Matrix of training output data.\nX_tests::Matrix{Float32}: Matrix of testing input data.\nY_tests::Matrix{Float32}: Matrix of testing output data.\nn_inputs::Int64: Number of model inputs.\nn_outputs::Int64: Number of model outputs.\n\n\n\n\n\n","category":"type"},{"location":"RadCalNet/#RadCalNet.ModelTrainer","page":"RadCalNet","title":"RadCalNet.ModelTrainer","text":"ModelTrainer(\n data::ModelData,\n model::Chain;\n batch::Int64=64,\n epochs::Int64=100,\n η::Float64=0.001,\n β::Tuple{Float64,Float64}=(0.9, 0.999),\n ϵ::Float64=1.0e-08\n)\n\nHolds standardized model training parameters and data.\n\nbatch::Int64: Batch size in training loop.\nepochs::Int64: Number of epochs to train each time.\ndata::RadCalNet.ModelData: Database structure used for training/testing.\nmodel::Flux.Chain: Multi-layer perceptron used for modeling.\noptim::NamedTuple: Internal Adam optimizer.\nlosses::Vector{Float32}: History of losses.\n\n\n\n\n\n","category":"type"},{"location":"RadCalNet/#RadCalNet.createcustomdatabase-Tuple{}","page":"RadCalNet","title":"RadCalNet.createcustomdatabase","text":"createcustomdatabase(;\n sampler!::Function,\n repeats::Int64 = 100,\n samplesize::Int64 = 50_000,\n cleanup::Bool = false,\n saveas::String = \"database.h5\",\n OMMIN::Float64 = 50.0,\n OMMAX::Float64 = 10000.0,\n override::Bool = false\n)\n\nCreates a custom database by generating a number repeats of samples of samplesize rows. Inputs for runradcalinput are to be generated by a sampler! user-defined function which modifies in place an array of compositions, and returns T, L, P, FV, TWALL for setting up a simulation. Files are temporarilly stored under data/ with a sequential numbered naming during database creation and aggregated in a HDF5 file named after saveas. The choice to aggregate files after an initial dump is because generation can be interrupted and manually recovered in an easier way and avoiding any risk of data losses - database creation can take a very long time. If cleanup is true, all intermediate files are removed.\n\n\n\n\n\n","category":"method"},{"location":"RadCalNet/#RadCalNet.datasampler!-Tuple{Vector{Float64}}","page":"RadCalNet","title":"RadCalNet.datasampler!","text":"datasampler!(X::Vector{Float64})::Tuple\n\nCustom sample space to generate entries with createcustomdatabase. This function contains the parameter space used for model training.\n\n\n\n\n\n","category":"method"},{"location":"RadCalNet/#RadCalNet.defaultmodel-Tuple{}","page":"RadCalNet","title":"RadCalNet.defaultmodel","text":"defaultmodel()\n\nBuild model structure with which RadCalNet is trained.\n\n\n\n\n\n","category":"method"},{"location":"RadCalNet/#RadCalNet.dumpscaler-Tuple{StatsBase.ZScoreTransform{Float32, Vector{Float32}}, String}","page":"RadCalNet","title":"RadCalNet.dumpscaler","text":"dumpscaler(scaler::ZScoreTransform{Float32,V32}, saveas::String)\n\nWrite z-score scaler mean and scale to provided saveas YAML file.\n\n\n\n\n\n","category":"method"},{"location":"RadCalNet/#RadCalNet.getradcalnet-Tuple{}","page":"RadCalNet","title":"RadCalNet.getradcalnet","text":"getradcalnet(;\n scale = true,\n fscaler = nothing,\n fmstate = nothing\n)\n\nLoad trained model and scaler to compose RadCalNet. If testing new models, it might be useful to use fscaler and fmstate to point to specific versions of scaler and model state files.\n\n\n\n\n\n","category":"method"},{"location":"RadCalNet/#RadCalNet.loaddatabase-Tuple{String}","page":"RadCalNet","title":"RadCalNet.loaddatabase","text":"loaddatabase(fname::String)\n\nRetrieve database from HDF5 file and access table as a matrix.\n\n\n\n\n\n","category":"method"},{"location":"RadCalNet/#RadCalNet.loadscaler-Tuple{String}","page":"RadCalNet","title":"RadCalNet.loadscaler","text":"loadscaler(fname::String)::Function\n\nLoad z-scaler in functional format from YAML fname file.\n\n\n\n\n\n","category":"method"},{"location":"RadCalNet/#RadCalNet.makemodel-Tuple{Vector{Tuple{Int64, Any}}}","page":"RadCalNet","title":"RadCalNet.makemodel","text":"makemodel(layers::Vector{Tuple{Int64, Any}}; bn = false)::Chain\n\nCreate a multi-layer perceptron for learning radiative properties with the provided layers. If bn is true, then batch normalization after each layer. The final layer has by default a sigmoid function to ensure physical outputs in range [0, 1].\n\n\n\n\n\n","category":"method"},{"location":"RadCalNet/#RadCalNet.model","page":"RadCalNet","title":"RadCalNet.model","text":"model(x::Vector{Float32})::Vector{Float32}\n\nMain model interface for emissivity and transmissivity.\n\n\n\n\n\n","category":"function"},{"location":"RadCalNet/#RadCalNet.plottests-Tuple{RadCalNet.ModelTrainer}","page":"RadCalNet","title":"RadCalNet.plottests","text":"plottests(trainer::ModelTrainer; num::Int64)\n\nEvaluate model over num data points and compare the data to the expected values as computed from RadCal. Makes use of test data only - never seem by the model during training.\n\n\n\n\n\n","category":"method"},{"location":"RadCalNet/#RadCalNet.runradcalinput-Tuple{}","page":"RadCalNet","title":"RadCalNet.runradcalinput","text":"runradcalinput(;\n X::Dict{String, Float64} = Dict{String, Float64}(),\n T::Float64 = 300.0,\n L::Float64 = 1.0,\n P::Float64 = 1.0,\n FV::Float64 = 0.0,\n OMMIN::Float64 = 50.0,\n OMMAX::Float64 = 10000.0,\n TWALL::Float64 = 500.0,\n radcalexe::String = \"radcal_win_64.exe\"\n)::Vector{Float64}\n\nCreate RADCAL.IN from template file and dump to disk.\n\nNOTE: the user is responsible to provide a vector X of mole fractions of species that sums up to one. If this is not respected RADCAL fails. The Following list provides the indexes of available species in vector X.\n\nIndex Species Index Species Index Species\n1 CO2 6 C2H6 11 CH3OH\n2 H2O 7 C3H6 12 MMA\n3 CO 8 C3H8 13 O2\n4 CH4 9 C7H8 14 N2\n5 C2H4 10 C7H16 \n\n\n\n\n\n","category":"method"},{"location":"RadCalNet/#RadCalNet.samplecols-Tuple{Int64, Int64}","page":"RadCalNet","title":"RadCalNet.samplecols","text":"Get sample of indexes for data retrieval. \n\n\n\n\n\n","category":"method"},{"location":"RadCalNet/#RadCalNet.tests-Tuple{RadCalNet.ModelData, Int64}","page":"RadCalNet","title":"RadCalNet.tests","text":"Get testing data for data loader construction. \n\n\n\n\n\n","category":"method"},{"location":"RadCalNet/#RadCalNet.train-Tuple{RadCalNet.ModelData, Int64}","page":"RadCalNet","title":"RadCalNet.train","text":"Get training data for data loader construction. \n\n\n\n\n\n","category":"method"},{"location":"RadCalNet/#RadCalNet.trainonce!-Tuple{RadCalNet.ModelTrainer}","page":"RadCalNet","title":"RadCalNet.trainonce!","text":"trainonce!(trainer::ModelTrainer; num = 1_000)\n\nTrain model and keep track of loss for the number of epochs in trainer using its internal data and parameters. Use num data points.\n\n\n\n\n\n","category":"method"},{"location":"References/@Guo2023d/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Guo2023d/","page":"-","title":"-","text":"title: \"Unraveling the design pattern of physics-informed neural networks: Series 04\" authors: Shuai Guo year: 2023 URL: https://towardsdatascience.com/unraveling-the-design-pattern-of-physics-informed-neural-networks-part-04-c778f4829dde –- Discussed [[@Yu2022a]].","category":"page"},{"location":"References/@Arthurs2021a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Arthurs2021a/","page":"-","title":"-","text":"title: Active training of physics-informed neural networks to aggregate and interpolate parametric solutions to the Navier-Stokes equations authors: Christopher J. Arthurs, Andrew P. King year: 2021 URL: https://doi.org/10.1016/j.jcp.2021.110364 Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZla8i8cvFX_ZGzT6Z9A?e=MJdHtJ –-","category":"page"},{"location":"Teaching/OpenFOAM/Cases/aachenBombSteady/#Breakdown-into-sub-models","page":"-","title":"Breakdown into sub-models","text":"","category":"section"},{"location":"Teaching/OpenFOAM/Cases/aachenBombSteady/","page":"-","title":"-","text":"[x] Incompressible flow only for mesh and conditions check with incompressibleFluid:","category":"page"},{"location":"Teaching/OpenFOAM/Cases/aachenBombSteady/","page":"-","title":"-","text":"- After a first run with a system length of 1 m it was decided to increase the domain to 2 m in order to ensure a better development of flow profile (at least 10 times the cross section size) and double the number of cells in transversal directions.\n- It was confirmed that the inlet mean velocity profile respects the expected value from the imposed mass flow rate evaluated during parameters setup, but outlet is controversial. This is probably because the case should be run as turbulent or grid is too coarse.\n- Mass conservation was monitored and confirmed through field `phi`.\n- It must be emphasized that boundary layer resolution is not accurate since no grading is applied and mesh is very coarse, but since the goal is flare development far from the walls this is acceptable at this stage and will be dealt with at a later stage.\n- All residuals are going down adequately, allowing us to move to the next step. \n- Calculation took approximately 10 seconds with 1 core.","category":"page"},{"location":"Teaching/OpenFOAM/Cases/aachenBombSteady/","page":"-","title":"-","text":"[x] Previous case is copied and support to RAS k-varepsilon ([[@Launder1974]]) [6] is implemented:","category":"page"},{"location":"Teaching/OpenFOAM/Cases/aachenBombSteady/","page":"-","title":"-","text":"- With inclusion of turbulence the actual outlet velocity matches the expected value (that was unphysical in the previous simulation), validating the approach.\n- Entry length is verified through velocity and turbulent viscosity, confirming the need to extend the domain for a proper development.\n- The number of iterations was increased to 200 to ensure that everything has properly converged, reaching an extremely low residuals level for all variables.\n- Other previous observations are still valid, allowing us to move to the next step.\n- Calculation took approximately 11 seconds with 1 core to perform 100 iterations. After 100 iterations the step convergence becomes slow because of the already low residuals, leading to a calculation time of 38 seconds.","category":"page"},{"location":"Teaching/OpenFOAM/Cases/aachenBombSteady/","page":"-","title":"-","text":"[x] Adding compressible flow with multicomponentFluid to the above:","category":"page"},{"location":"Teaching/OpenFOAM/Cases/aachenBombSteady/","page":"-","title":"-","text":"- The temperature field is added prior to handling any combustion aspects in this step to avoid having interaction between these elements in convergence checks. \n- Nonetheless, gravity was already added here after a first run without it for a basic check. A vertical pressure profile is observed in the cross-section, showing the expected buoyancy effects.\n- Other Impacted files include physical properties, which now incorporate more detailed thermodynamics, `alphat` and, at least, the main chemical component file with boundary and initial conditions. \n- The mean value of `phi` in the outlet can now be compared to the imposed mass flow rate, validating the boundary condition setup.\n- Calculation took approximately 13 seconds with 1 core to perform 100 iterations. Again an important slow down is observed leading to 125 seconds to perform 300 iterations.","category":"page"},{"location":"Teaching/OpenFOAM/Cases/aachenBombSteady/","page":"-","title":"-","text":"[x] The next logical step is to include evaporation of fuel in the gas, without enabling reactions:","category":"page"},{"location":"Teaching/OpenFOAM/Cases/aachenBombSteady/","page":"-","title":"-","text":"- The simples way of doing so is adding the required chemical and associated initial file without adding any combustion or reaction parameters. It was chosen to use the actual species name instead of simply *fuel* to keep created files compatible with next steps. Simulation was checked before adding the cloud, which exponentially complexifies the setup.\n- A `patchPostProcessing` cloud function was tested at first to check if conditions were leading to complete fuel evaporation. It is kept commented-out for future debug if required. To make results easier to interpret, a fixed size PSD was adopted at this stage.\n- As expected, convergence is bad and the only strategy that seems to work is mesh refinement. Otherwise pressure coupling becomes difficult and trying to change numerical parameters (solver correctors, linear solver, divergence and Laplacian schemes, relaxation level) do not improve anything. Tried to use `SOI` at a later iteration to let flow converge before injection, but apparently the steady solver ignores this. Even with `localEuler` pseudo-time stepping (requires to add residuals for `rho` in `fvSolution`) it does not seem to take `SOI` into account. Also tried deactivating clouds and converging before reactivating it (what would be equivalent to the later `SOI` approach) and that does not work either, confirming it is a physical coupling problem.\n- Because of mesh refinement, now parallelization becomes a requirement unless we work with mesh grading, what is out of the present scope (to be done only in production scenario). Nonetheless, parallelization does not seem to be of great advantage.","category":"page"},{"location":"Teaching/OpenFOAM/Cases/aachenBombSteady/","page":"-","title":"-","text":"[ ] Activation of global chemistry and combustion modeling:","category":"page"},{"location":"Teaching/OpenFOAM/Cases/aachenBombSteady/","page":"-","title":"-","text":"- From now on the level of physics start becoming too complex and pre-computation of fields should be done whenever compatible. That means that prior to chemistry activation it seems a good idea to let evaporation of droplets converge (testing 1000 iterations).\n- To keep things general, instead of setting up the case with a fixed database of species thermodynamics, it is better to convert Chemkin files.\n-","category":"page"},{"location":"Teaching/OpenFOAM/Cases/aachenBombSteady/","page":"-","title":"-","text":"[ ] Add radiation modeling\n[ ] Add arbitrary empirical fuel modeling","category":"page"},{"location":"Teaching/OpenFOAM/Cases/aachenBombSteady/","page":"-","title":"-","text":"After modification the cases were run again getting the following performances, from which it becomes clear that for the present grid size the parallelization saturates quickly.","category":"page"},{"location":"Teaching/OpenFOAM/Cases/aachenBombSteady/","page":"-","title":"-","text":"Step 1 processor 32 processors\n0 77 14\n1 35\n2 80\n3 \n4 ","category":"page"},{"location":"Teaching/OpenFOAM/Cases/aachenBombSteady/#Future-improvements","page":"-","title":"Future improvements","text":"","category":"section"},{"location":"Teaching/OpenFOAM/Cases/aachenBombSteady/","page":"-","title":"-","text":"[ ] Add the following to the parameters file for full turbulence model controls:","category":"page"},{"location":"Teaching/OpenFOAM/Cases/aachenBombSteady/","page":"-","title":"-","text":"Cmu 0.09;\nC1 1.44;\nC2 1.92;\nC3 0;\nsigmak 1;\nsigmaEps 1.3;","category":"page"},{"location":"Teaching/OpenFOAM/Cases/aachenBombSteady/","page":"-","title":"-","text":"[ ] Add convergence criteria PIMPLE: No convergence criteria found.\n[ ] Consider a possible adaptive mesh refinement at case setup (not runtime!).","category":"page"},{"location":"Teaching/OpenFOAM/Cases/aachenBombSteady/#Reminders","page":"-","title":"Reminders","text":"","category":"section"},{"location":"Teaching/OpenFOAM/Cases/aachenBombSteady/","page":"-","title":"-","text":"Because of potentialFlow initialization, a dictionary corresponding to this must be present in fvSolution as well as a solver for Phi (copy defaults for pressure). Because this solver does not have information about temperature or composition of fluid, a field rhoInlet is required in inlets.","category":"page"},{"location":"Teaching/OpenFOAM/Cases/aachenBombSteady/#Initial-tentative-setup","page":"-","title":"Initial tentative setup","text":"","category":"section"},{"location":"Teaching/OpenFOAM/Cases/aachenBombSteady/","page":"-","title":"-","text":"This case aims producing a steady state liquid fuel combustion model using aachenBomb case as a starting point, but does not directly tries to reproduce the results of that case. It was modified so that there is an inlet and an outlet for flame development.\nTo perform the setup we retrieve several modifications from verticalChannelSteady and verticalChannelLTS. The first because it is the only case under multicomponentFluid solver currently using a steadyState time-stepping scheme and the latter due to the use of localEuler, which is often used to produce pseudo-steady solutions when a direct steady state calculations becomes unstable (as it is the case in most combustion calculations).\nModify controlDict to integer steps (that is, each step is an iteration) for both time-step and write controls, and enable purgeWrite to keep case cleaner. Notice that this is also valid if using a localEuler time-stepping scheme. Change time-stepping method accordingly in fvSchemes.\nTo increase robustness of solution, it is recommended to compute a potential flow with potentialFoam as in reference case verticalChannelLTS. This requires a solver control field Phi in fvSolution and a reference rhoInlet value to be provided in inlet flow velocity. Other parameters, but specially maxCo are also copied from reference case.\nSome dictionaries in cloudProperties require steady-state specific commands, such as adding calcFrequency to solution, resetOnStartup to solution.sourceTerms, and injection models must use massFlowRate, what is physically understandable.\nCombustion is quite sensitive and Seulex alone does not seem able to handle it with an EDC approach. First flow was developed further during 100 steps before activating chemistry. For now using a single step infinitelyFastChemistry to try to stabilize the behavior before trying back to use the EDC model.","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Solver-Modules/#multicomponentFluid","page":"-","title":"multicomponentFluid","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Solver-Modules/","page":"-","title":"-","text":"In OpenFOAM v11 solver module multicomponentFluid provides approaches for setting up the simulation of fluids with multiple species, including combustion.","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Solver-Modules/#Tutorial-cases","page":"-","title":"Tutorial cases","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Solver-Modules/","page":"-","title":"-","text":"DLRALTS\nSandiaD_LTS\naachenBomb: global combustion kinetics of droplets released in a box.\ncounterFlowFlame2D\ncounterFlowFlame2DLTS\ncounterFlowFlame2DLTSGRITDAC\ncounterFlowFlame2D_GRI\ncounterFlowFlame2DGRITDAC\nfilter\nlockExchange\nmembrane\nnc7h16: zero dimensional model of homogeneous kinetics.\nparcelInBox: evaporation of a single water particle in a closed box.\nsimplifiedSiwek: co-combustion of coal and limestone clouds in Siwek chamber.\nsmallPoolFire2D\nsmallPoolFire3D\nverticalChannel: water droplet evaporation in a vertical channel.\nverticalChannelLTS: same as verticalChannel but with local time-stepping.\nverticalChannelSteady: same as verticalChannel but at steady state.","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Solver-Modules/#Built-cases","page":"-","title":"Built cases","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Solver-Modules/","page":"-","title":"-","text":"aachenBombSteady: this case was created as a tentative to simulate a steady spray combustion starting from aachenBomb tutorial but after several failures it became a case of its own. The case we have today was built bottom-up, from a simple flow in a box to the level of combustion, including several intermediate steps used to understand how the different options and models interacted. For now its name will remain like this in reference to where it started, but in the future I might come up with a better one.","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Solver-Modules/#incompressibleDenseParticleFluid","page":"-","title":"incompressibleDenseParticleFluid","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Solver-Modules/","page":"-","title":"-","text":"In OpenFOAM v11 solver module incompressibleDenseParticleFluid provides approaches for setting up a transient flow interacting with particles. It handles incompressible isothermal flows with fluid-particle interactions, including cases with dense packing of particles, such as packed beds or initialization of fluidized beds for solution with other approaches.","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Solver-Modules/#Tutorial-cases-2","page":"-","title":"Tutorial cases","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Solver-Modules/","page":"-","title":"-","text":"Goldschmidt\nGoldschmidtMPPIC\ncolumn\ncyclone\ninjectionChannel","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Solver-Modules/#Boundary-fields","page":"-","title":"Boundary fields","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Solver-Modules/","page":"-","title":"-","text":"Boundary fields in general are almost the same as any case in pure fluid simulations but transported quantities must be named by appending the name of the continuous phase specified in constant/physicalProperties as continuousPhaseName . To make it simple let's call this phase air in what follows. Notice that pressure file name remains unchanged since it is not really transported as you don't have an equation in the form of Reynolds transport theorem for it.","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Solver-Modules/","page":"-","title":"-","text":"That said, we have things as k.air and U.air. The particularity here is that you must provide phi for all hydrodynamic solution variables (such as k.air, U.air) in outlets, what is implicit in single phase flow models. That means that an outlet for velocity should include something as","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Solver-Modules/","page":"-","title":"-","text":"outlet\n{\n\ttype pressureInletOutletVelocity;\n\tphi phi.air;\n\tinletValue uniform (0 0 0);\n\tvalue uniform (0 0 0);\n}","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Solver-Modules/#Creating-cloudProperties","page":"-","title":"Creating cloudProperties","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Solver-Modules/","page":"-","title":"-","text":"Most default values in solution dictionary should be fine for typical fluid-particle applications, but for phase interaction it is important to configure coupled as true so that drag forces are applied to the particles and conversely, particles disturb the fluid. ","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Solver-Modules/","page":"-","title":"-","text":"We must also turn on cellValueSourceCorrection, which will correct cell values using latest transfer information. These elements as given in the following block (you can check the full dictionary in the official OpenFOAM tutorials for other details).","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Solver-Modules/","page":"-","title":"-","text":"solution\n{\n\tcoupled                   true;\n\ttransient                 yes;\n\tcellValueSourceCorrection on;\n\tmaxCo                     0.7;\n\n\t...\n}","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Solver-Modules/","page":"-","title":"-","text":"Being a momentum cloud, MPPICCloud makes use only of patchInteractionModel localInteraction for interaction with the environment and collisions between particles are not taken into account (that is not completely true if you consider the packing effects that can be enabled as collisions). Again, it is better to go deeper in the case studies.","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Solver-Modules/","page":"-","title":"-","text":"The main models for setting up a particle simulation in constant/cloudProperties are the [[Physical Models#Injection models|InjectionModel]] and the ParticleForce to be used. Notice that when dealing with incompressibleDenseParticleFluid the main ParticleForce models other than gravity are inherited by DenseDragForce.","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"The following numerical experiments concern the horizontalMixer sample case.","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/#Conceptual-phase","page":"-","title":"Conceptual phase","text":"","category":"section"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"Minimal working examples:","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"000: no models active other than patchInteraction rebound.","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"(Image: Case 000)","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"001: no models active other than patchInteraction standardWallInteraction.","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"(Image: Case 001)","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"002: no models active other than patchInteraction localInteraction.","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"(Image: Case 002)","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"If there are outlets in the system, rebound model is not suitable. Because of this, all the next cases, unless stated otherwise, will use localInteraction given the better control it provides over individual patches with respect to standardWallInteraction (although it is much slower than the latter).","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"007: compare solution for same (approximate) mass flow with using multiple particles per parcel - with respect to the single particle per parcel performed in the reference case 002. The overall cloud shape remains the same but some spatial resolution is lost. For conception studies it seems valid to use a higher number of particles per parcel.","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"(Image: Case 007)","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"Using the basic patchInteraction localInteraction add these variants (notice that the option none for all these models is already covered by the reference case 002. After comparing cases 002 and 007 the following variants were modified to match 007 as a reference case given the much lower computational time (more particles per parcel).","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"003: packingModel explicit.","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"(Image: Case 003)","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"004: packingModel implicit.","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"(Image: Case 004)","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"005: dampingModel relaxation. Particle velocities are relaxed towards the local mean over a time-scale. Notice that reference paper intended to improve MP-PIC for polydisperse sedimenting particle clouds.","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"(Image: Case 005)","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"006 isotropyModel stochastic. According to the reference paper collisions cause numerical particles to scatter in MP-PIC calculations, just as physical particles do in particle/fluid flows, just as the generated animation implies.","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"(Image: Case 006)","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"Implicit packing so far is the only model for which particles left the system and turbulence effects and segregation becomes apparent. In fact without implicit packing the results do not even look physical, so it is probably a requirement to activate this model. Damping and isotropy models produce similar results, with a little more dispersed cloud when isotropy is active, as stated above from its reference.","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"Hypotheses testing cases:","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"008: modify case 004 to test if with rebound patch interaction particles are able to quit the system. Confirmed that this patch interaction does not handle outlets.","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"(Image: Case 008)","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"009: modify case 004 to test if with standardWallInteraction patch interaction particles are able to quit the system. Confirmed that this patch interaction does handle outlets similarly to the localInteraction. It was not possible to confirm if inlets also allow backflow since reporting is not provided by patch.","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"(Image: Case 009)","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"010: check the role of gravity option over implicit packing model. Here we derive a variant of 009 because it runs faster than with localInteraction. ","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"(Image: Case 010)","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"011: in fact the role of gravity in 010 was pretty devastating over the sedimentation rate (quite unexpected given the particle sizes that were used) so a variant of this case was manually initialized from last state and left to run for a much longer physical time (100 s) using maxCo 2.0 for faster execution. CALCULATION DIVERGED, REDO!","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/#Physical-refinement-phase","page":"-","title":"Physical refinement phase","text":"","category":"section"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"Model Takings\nInjectionModel CONFIRM CONCLUSIONS WITH POLYDISTRIBUTED CLOUDS (particles per parcel)!\nPatchInteractionModel This model is key for the simulation of particles coupled to a fluid. Unless different behavior is expected in the different walls so customization of interaction is required, it is much faster to use a standardWallInteraction approach. For understanding the role of parameters e and mu over rebound one can check lines 144-168 of source code and confirm the model is the same as the one implemented in localInteraction in lines 366-391 of sources.\nPackingModel \nDampingModel \nIsotropyModel \nParticleForce This will be discussed in this section.","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"Solution with different drag models:","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"Model Results\nsphereDrag (Image: Case 012) 012\nWenYuDrag (used in injectionChannel) implemented from equation (2.12) of ([[@Gidaspow1994]]) [7]. (Image: Case 013) 013\nErgunWenYuDrag (used in Goldschmidt, cyclone, and column) implemented from equation (5.11) of ([[@Gidaspow1994]]) [7]. (Image: Case 014) 014","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"Other drag models:","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"Model Details\nPlessisMasliyahDrag Used in GoldschmidtMPPIC. Implemented from ([[@Plessis1988]]) [8] is adapted for flow through consolidated isotropic porous media. This is outside the scope of the current study but functionality is tested anyways from a computational point of view and to understand its behavior far from its reference application. Calculation diverged, so no results are available.\ndistortedSphereDrag Not used in any tutorial. Implemented as per ([[@Liu1993]]) [9] is conceived for the simulation of the effects of drop drag and breakup on fuel sprays. This is far from our scope and is not tested.\nnonSphereDrag Not used in any tutorial. Implemented as per ([[@Haider1989]]) [10] is a drag model for non-spherical particles. Its most important parameter is phi, the ratio of the surface area of a sphere with the same volume as the particle to the actual surface area of the particle.\nSchillerNaumannDrag Not used in any tutorial. Implemented according the classical paper by Schiller (1935) for modeling drag over spheres.","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"Solution with different sizeDistribution:","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"[ ] fixedValue\n[ ] normal\n[ ] RosinRammler\n[ ] tabulatedDensity","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"Solution with different cloud types","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"MPPICCloud\ncollidingCloud","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"For the PackingModelone needs to specify the ParticleStressModel among the following:","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"Model Details\nHarrisCrighton \nLun ","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"For both DampingModel and IsotropyModel one needs a TimeScaleModel","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"Option Details\nequilibrium \nisotropic \nnonEquilibrium ","category":"page"},{"location":"References/@Guo2023c/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Guo2023c/","page":"-","title":"-","text":"title: \"Unraveling the design pattern of physics-informed neural networks: Series 03\" authors: Shuai Guo year: 2023 URL: https://towardsdatascience.com/unraveling-the-design-pattern-of-physics-informed-neural-networks-part-03-fe365ef480d9 –- Discussed [[@Krishnapriyan2021a]]","category":"page"},{"location":"References/@Antonelo2021a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Antonelo2021a/","page":"-","title":"-","text":"title: Physics-informed neural nets for control of dynamical systems authors: Eric Aislan Antonelo, Eduardo Camponogara, Laio Oriel Seman, Eduardo Rehbein de Souza, Jean P. Jordanou, Jomi F. Hubner year: 2021 URL: https://doi.org/10.48550/arXiv.2104.02556 –-","category":"page"},{"location":"References/@Pena2001a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Pena2001a/","page":"-","title":"-","text":"title: Stability of Turing patterns in the Brusselator model authors: B. Peña, C. Pérez-García year: 2001 URL: https://doi.org/10.1103/PhysRevE.64.056213 Drive: –-","category":"page"},{"location":"References/@Fang2023a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Fang2023a/","page":"-","title":"-","text":"title: \"Ensemble learning for physics informed neural networks: a gradient boosting approach\" authors: Zhiwei Fang, Sifan Wang, Paris Perdikaris year: 2023 DOI: https://doi.org/10.48550/arXiv.2302.13143 –-","category":"page"},{"location":"References/@Fang2023a/","page":"-","title":"-","text":"Discussed in [[@Guo2023c]].","category":"page"},{"location":"References/@Karniadakis2021a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Karniadakis2021a/","page":"-","title":"-","text":"title: Physics-informed machine learning authors: George Em Karniadakis, Ioannis G. Kevrekidis, Lu Lu, Paris Perdikaris, Sifan Wang, Liu Yang year: 2021 –-","category":"page"},{"location":"References/@Guo2023b/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Guo2023b/","page":"-","title":"-","text":"title: \"Unraveling the design pattern of physics-informed neural networks: Series 02\" authors: Shuai Guo year: 2023 URL: TODO –-","category":"page"},{"location":"References/@Plessis1988/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Plessis1988/","page":"-","title":"-","text":"title: Mathematical modelling of flow through consolidated isotropic porous media authors: J. Prieur Du Plessis, Jacob H. Masliyah year: 1988 URL: TODO –-","category":"page"},{"location":"Teaching/Machine Learning/PINNs/","page":"-","title":"-","text":"Physics-Informed Neural Networks (PINNs) were first introduced by [[@Raissi2017]] in the context of providing data-driven solutions of nonlinear PDE's. In what follows we review the basic concepts and approaches developed in this field during the past few years. Both mathematical and application aspects will be treated in the review.","category":"page"},{"location":"Teaching/Machine Learning/PINNs/#Common-applications","page":"-","title":"Common applications","text":"","category":"section"},{"location":"Teaching/Machine Learning/PINNs/","page":"-","title":"-","text":"As per [[@Guo2024a]] the following common applications arise from PINNs:","category":"page"},{"location":"Teaching/Machine Learning/PINNs/","page":"-","title":"-","text":"Predictive modeling and simulations","category":"page"},{"location":"Teaching/Machine Learning/PINNs/","page":"-","title":"-","text":"- Solution of dynamical systems (even high-dimensional)\n- Acceleration of multi-physics simulations","category":"page"},{"location":"Teaching/Machine Learning/PINNs/","page":"-","title":"-","text":"Optimization and systems control","category":"page"},{"location":"Teaching/Machine Learning/PINNs/","page":"-","title":"-","text":"- Surrogate models for design optimization\n- Inverse design (finding conditions)\n- Model predictive control\n- Optimal sensor placement","category":"page"},{"location":"Teaching/Machine Learning/PINNs/","page":"-","title":"-","text":"Data-driven insights\nData-driven enhancement\nMonitoring, diagnostic, and health assessment","category":"page"},{"location":"Teaching/Machine Learning/PINNs/#Key-Ideas","page":"-","title":"Key Ideas","text":"","category":"section"},{"location":"Teaching/Machine Learning/PINNs/","page":"-","title":"-","text":"Inject the prediction values in the governing equations to compose the loss function, enforcing the NN to obey the underlying physics.\nThere are 2 components in the loss function, the physical loss evaluated from the deviation from training data (as is commonplace in NN training) and the PDE loss, which is further divided into boundary and initial condition losses.\nCollocation points is how we call the temporal and spacial coordinates where evaluation of physical properties are computed, corresponding to nodes or cell centers in classical numerical schemes.","category":"page"},{"location":"Teaching/Machine Learning/PINNs/#Research-opportunities","page":"-","title":"Research opportunities","text":"","category":"section"},{"location":"Teaching/Machine Learning/PINNs/","page":"-","title":"-","text":"Following [[@Guo2023a]] citing the work by [[@Wu2022a]], resampling and refinement methods could be improved by better PDF's and the use of active or reinforcement learning to improve sampling.","category":"page"},{"location":"Teaching/Machine Learning/PINNs/#References","page":"-","title":"References","text":"","category":"section"},{"location":"Teaching/Machine Learning/PINNs/","page":"-","title":"-","text":"Unraveling the design pattern of physics-informed neural networks:","category":"page"},{"location":"Teaching/Machine Learning/PINNs/","page":"-","title":"-","text":"Post Subject Main reference(s)\n[[@Guo2023a]] Resampling of residual points [[@Wu2022a]]\n[[@Guo2023b]] Ensemble learning and dynamic solution interval expansion [[@Haitsiukevich2022a]]\n[[@Guo2023c]] Improving performance through gradient boosting [[@Fang2023a]]\n[[@Guo2023d]] Incorporate the gradient of residual terms as an additional loss term for stiff problems [[@Yu2022a]]\n[[@Guo2023e]] [[@Wang2023a]]\n[[@Guo2023f]] [[@Wang2022a]]\n[[@Guo2023g]] [[@Arthurs2021a]]","category":"page"},{"location":"Teaching/Machine Learning/PINNs/","page":"-","title":"-","text":"Reference Subject\n[[@Lagaris1997a]] Seminal work on PINNs.\n[[@Antonelo2021a]] \n[[@Cai2021a]] \n[[@Cuomo2022a]] \n[[@Haitsiukevich2022a]] \n[[@Karniadakis2021a]] \n[[@Lu2019a]] \n[[@Lu2021a]] \n[[@Nabian2021a]] \n[[@Sanyal2022a]] \n[[@Wurth2023a]] Use of PINNs to solve diffusion equation (heat transfer) during the curing of composites. The paper is more focused in the application than in the implementation. Benchmark against FDM/FEM.","category":"page"},{"location":"Teaching/Machine Learning/PINNs/","page":"-","title":"-","text":"Other current readings:","category":"page"},{"location":"Teaching/Machine Learning/PINNs/","page":"-","title":"-","text":"[ ] Discovering Differential Equations with Physics-Informed Neural Networks and Symbolic Regression\n[ ] Solving Inverse Problems With Physics-Informed DeepONet: A Practical Guide With Code Implementation\n[ ] Introduction to Physics-informed Neural Networks\n[ ] Solving ODE system with PINN\n[ ] Mathematics for Machine Learning and Simulation\n[ ] Physics-Informed Neural Networks (PINNs) - An Introduction - Ben Moseley | The Science Circle\n[ ] Teaching Neural Network to Solve Navier-Stokes Equations\n[ ] Physics-Informed Neural Networks in Julia\n[ ] Scientific AI: Domain Models With Integrated Machine Learning | Chris Rackauckas | JuliaCon 2019","category":"page"},{"location":"References/@Liu1993/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Liu1993/","page":"-","title":"-","text":"title: Modeling the effects of drop drag and breakup on fuel sprays authors: Alex B. Liu, Daniel Mather, Rolf D. Reitz year: 1993 URL: TODO –-","category":"page"},{"location":"References/@Haitsiukevich2022a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Haitsiukevich2022a/","page":"-","title":"-","text":"title: Improved training of physics-informed neural networks with model ensembles authors: Katsiaryna Haitsiukevich, Alexander Ilin year: 2022 URL: https://doi.org/10.48550/arXiv.2204.05108 –-","category":"page"},{"location":"References/@Guo2023e/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Guo2023e/","page":"-","title":"-","text":"title: \"Unraveling the design pattern of physics-informed neural networks: Series 05\" authors: Shuai Guo year: 2023 URL: https://towardsdatascience.com/unraveling-the-design-pattern-of-physics-informed-neural-networks-part-05-67a35a984b23 –-","category":"page"},{"location":"Teaching/Basilisk/Tutorials/#Introductory","page":"-","title":"Introductory","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/#Basilisk-basics","page":"-","title":"Basilisk basics","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/","page":"-","title":"-","text":"Reference Tutorial\nCode 01-Tutorial-Basics\nNotes Basilisk is a conceptual solver for investigating problems in a Cartesian domain.

Different steps of the simulations are set by event's, which use a specific syntax do indicate whether they depend on a time or iteration condition. These steps might include setup of initial conditions, storage of intermediate results or solution, grid refinement, etc.

For iterating over arrays Basilisk provides a foreach()loop extending the C-language.

A standard Makefile is provided by Basilisk for managing common workflows.

Check the tips.","category":"page"},{"location":"Teaching/Basilisk/Tutorials/#Game-of-life","page":"-","title":"Game of life","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/","page":"-","title":"-","text":"Reference Conway’s game of life\nCode 02-Game-of-life\nNotes A simple implementation of Conway's game of life to get used with syntax.","category":"page"},{"location":"Teaching/Basilisk/Tutorials/#Brusselator","page":"-","title":"Brusselator","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/","page":"-","title":"-","text":"Reference Coupled reaction-diffusion equations\nCode 03-Brusselator\nNotes Solves the 2D Brusselator, a theoretical autocatalytic reaction diffusion system. The set of parameters used in the study for the stable Turin points where the ones proposed by ([[@Pena2001a]]) [11]. Interesting material for preparing courses extending this to other oscillating systems can be found here.","category":"page"},{"location":"Teaching/Basilisk/Tutorials/#Ginzburg-Landau","page":"-","title":"Ginzburg-Landau","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/","page":"-","title":"-","text":"Reference The complex Ginzburg-Landau equation\nCode 04-Ginzburg-Landau\nNotes Solves the complex Ginzburg-Landau equation describing the nonlinear evolution of disturbances near the transition from a stable to unstable state of a system. Additional materials are provided here. It would be a good project to include the term alpha in the equation and the Laplacian term that goes with it.","category":"page"},{"location":"Teaching/Basilisk/Tutorials/#Distance-field","page":"-","title":"Distance field","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/","page":"-","title":"-","text":"Reference Distance field computation from a 3D model\nCode 05-Distance-Field\nNotes This can be seen as a particular case of pre-/post-processing. It can prove useful when initializing domains with scanned surfaces in STL or other compatible format. Additional steps must be taken for compilation with rendering (modifications to Makefile). Iteration over dimensions can be done with foreach_dimension().","category":"page"},{"location":"Teaching/Basilisk/Tutorials/#Wavelet-transform","page":"-","title":"Wavelet transform","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/","page":"-","title":"-","text":"Reference Wavelet transforms and filtering\nCode 06-Wavelet-Transform\nNotes Provides a tutorial on wavelet transform and associated filters. It is presented as the basis to understand mesh adaptation in Basilisk. Recommended reading of ([[@Sweldens1998a]]) [12].","category":"page"},{"location":"Teaching/Basilisk/Tutorials/#Navier-Stokes-equation","page":"-","title":"Navier-Stokes equation","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/#Decaying-turbulence","page":"-","title":"Decaying turbulence","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/","page":"-","title":"-","text":"Reference Decaying two-dimensional turbulence\nCode 07-Decaying-Turbulence\nNotes For solving Euler equation with vorticity-stream formulation one uses header file navier-stokes/stream.h. The examples makes a first usage of dimensional quantities for vorticity initialization.","category":"page"},{"location":"Teaching/Basilisk/Tutorials/#Vortex-street","page":"-","title":"Vortex street","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/","page":"-","title":"-","text":"Reference Bénard–von Kármán Vortex Street for flow around a cylinder\nCode 08-Vortex-Street\nNotes Solves the flow around a solid object using the navier-stokes/centered.h solver and introduced the use of passive scalars (tracer). Notice we modify L0, which among many other magic variables is defined in common.h. Illustrates the use of solid and intersection to accomplish complex domains.","category":"page"},{"location":"Teaching/Basilisk/Tutorials/#Vortex-shedding","page":"-","title":"Vortex shedding","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/","page":"-","title":"-","text":"Reference Vortex shedding behind a sphere\nCode 09-Vortex-Shedding\nNotes Solution of Navier-Stokes equations in an adaptive domain embedding an sphere. Vortex detection is made with functionalities from lambda2.h implemented following ([[@Jeong1995a]]) [13].","category":"page"},{"location":"Teaching/Basilisk/Tutorials/#Porous-medium","page":"-","title":"Porous medium","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/","page":"-","title":"-","text":"Reference Stokes flow through a complex 3D porous medium\nCode 10-Porous-Medium\nNotes ","category":"page"},{"location":"Teaching/Basilisk/Tutorials/#Periodic-box","page":"-","title":"Periodic box","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/","page":"-","title":"-","text":"Reference Forced isotropic turbulence in a triply-periodic box\nCode 11-Periodic-Box\nNotes ","category":"page"},{"location":"Teaching/Basilisk/Tutorials/#Two-phase-flows","page":"-","title":"Two-phase flows","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/#Pulsed-atomization","page":"-","title":"Pulsed atomization","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/","page":"-","title":"-","text":"Reference Atomisation of a pulsed liquid jet\nCode 12-Pulsed-Atomisation\nNotes ","category":"page"},{"location":"Teaching/Basilisk/Tutorials/#Bubble-rising","page":"-","title":"Bubble rising","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/","page":"-","title":"-","text":"Reference Bubble rising in a large tank\nCode 13-Bubble-Rising\nNotes ","category":"page"},{"location":"Teaching/Basilisk/Tutorials/#Rotating-cylinder","page":"-","title":"Rotating cylinder","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/","page":"-","title":"-","text":"Reference Flow in a rotating bottom-driven cylindrical container\nCode 14-Rotating-Cylinder\nNotes ","category":"page"},{"location":"Teaching/Basilisk/Tutorials/#Moving-Tangaroa","page":"-","title":"Moving Tangaroa","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/","page":"-","title":"-","text":"Reference Two-phase flow around RV Tangaroa\nCode 15-Moving-Tangaroa\nNotes ","category":"page"},{"location":"Teaching/Basilisk/Tutorials/#Geophysical-applications","page":"-","title":"Geophysical applications","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/#Indian-Tsunami","page":"-","title":"Indian Tsunami","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/","page":"-","title":"-","text":"Reference The 2004 Indian Ocean tsunami\nCode 16-Indian-Tsunami\nNotes ","category":"page"},{"location":"Teaching/Basilisk/Tutorials/#Tohoku-Tsunami","page":"-","title":"Tohoku Tsunami","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/","page":"-","title":"-","text":"Reference The 2011 Tohoku tsunami\nCode 17-Tohoku-Tsunami\nNotes ","category":"page"},{"location":"Teaching/Basilisk/Tutorials/#Train-of-Solitons","page":"-","title":"Train of Solitons","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/","page":"-","title":"-","text":"Reference Breakup of a rectangular perturbation into a train of solitons\nCode 18-Train-of-Solitons\nNotes ","category":"page"},{"location":"Teaching/Basilisk/Tutorials/#Lee-Waves","page":"-","title":"Lee Waves","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/","page":"-","title":"-","text":"Reference Tidally-induced internal lee waves\nCode 19-Lee-Waves\nNotes ","category":"page"},{"location":"Teaching/Basilisk/Tutorials/#Ellipsoidal-Shoal","page":"-","title":"Ellipsoidal Shoal","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/","page":"-","title":"-","text":"Reference Periodic wave propagation over an ellipsoidal shoal\nCode 20-Ellipsoidal-Shoal\nNotes ","category":"page"},{"location":"Teaching/Basilisk/Tutorials/#Ellipsoidal-Shoal-Multilayer","page":"-","title":"Ellipsoidal Shoal Multilayer","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/","page":"-","title":"-","text":"Reference Periodic wave propagation over an ellipsoidal shoal (multilayer)\nCode 21-Ellipsoidal-Shoal-Multilayer\nNotes Check for source code in current version.","category":"page"},{"location":"Teaching/Basilisk/Tutorials/#Stokes-Wave","page":"-","title":"Stokes Wave","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/","page":"-","title":"-","text":"Reference 3D breaking Stokes wave (multilayer solver)\nCode 22-Stokes-Wave\nNotes ","category":"page"},{"location":"Teaching/Basilisk/Tutorials/#Transcritical-Flow","page":"-","title":"Transcritical Flow","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/","page":"-","title":"-","text":"Reference Transcritical flow over a bump\nCode 23-Transcritical-Flow\nNotes ","category":"page"},{"location":"Teaching/Basilisk/Tutorials/#Shock-Instability","page":"-","title":"Shock Instability","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/","page":"-","title":"-","text":"Reference A Shallow Water Analogue for the Standing Accretion Shock Instability\nCode 24-Shock-Instability\nNotes ","category":"page"},{"location":"Teaching/Basilisk/Tutorials/#Python-interface","page":"-","title":"Python interface","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/#Basic-usage","page":"-","title":"Basic usage","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/","page":"-","title":"-","text":"Reference Python interface\nCode 25-Python-Interface\nNotes ","category":"page"},{"location":"Teaching/Basilisk/Tutorials/#Poisson-equation","page":"-","title":"Poisson equation","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/","page":"-","title":"-","text":"Reference Poisson problem with Python\nCode 26-Python-Poisson\nNotes ","category":"page"},{"location":"References/@Balaji2014/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Balaji2014/","page":"-","title":"-","text":"title: Essentials of radiation heat transfer authors: C. Balaji year: 2014 Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZoCdJkJqcjDRZVs9J?e=mbefIU –-","category":"page"},{"location":"References/@Haider1989/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Haider1989/","page":"-","title":"-","text":"title: Drag coefficient and terminal velocity of spherical and nonspherical particles authors: A. Haider, O. Levenspiel year: 1989 URL: TODO –-","category":"page"},{"location":"Teaching/Machine Learning/#Table-of-Contents","page":"Machine Learning","title":"Table of Contents","text":"","category":"section"},{"location":"Teaching/Machine Learning/","page":"Machine Learning","title":"Machine Learning","text":"Notes on Data driven science and engineering\nPhysically informed neural networks","category":"page"},{"location":"References/@Sanchez2023a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Sanchez2023a/","page":"-","title":"-","text":"title: \"Biomass combustion modeling using OpenFOAM: Development of a simple computational model and study of the combustion performance of lippia origanoides bagasse\" authors: Gabriel Fernando García Sánchez, Jorge Luis Chacón Velasco, David Alfredo Fuentes Díaz, Yesid Javier Rueda-Ordóñez, David Patiño, Juan Jesús Rico, Jairo René Martínez Morales year: 2023 URL: https://doi.org/10.3390/en16062932 Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZlbEgWeJ66H4-cfxBiQ?e=YQGseW –-","category":"page"},{"location":"References/@Sweldens1998a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Sweldens1998a/","page":"-","title":"-","text":"title: \"The lifting scheme: A construction of second generation wavelets\" authors: Wim Sweldens year: 1998 URL: https://doi.org/10.1137/S0036141095289051 Drive: –-","category":"page"},{"location":"References/@Tensorflow2015Whitepaper/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Tensorflow2015Whitepaper/","page":"-","title":"-","text":"title: \"TensorFlow: Large-scale machine learning on heterogeneous systems\" authors: Martín Abadi, Ashish Agarwal, Paul Barham, Eugene Brevdo, Zhifeng Chen, Craig Citro, Greg S. Corrado, Andy Davis, Jeffrey Dean, Matthieu Devin, Sanjay Ghemawat, Ian Goodfellow, Andrew Harp, Geoffrey Irving, Michael Isard, Yangqing Jia, Rafal Jozefowicz, Lukasz Kaiser, Manjunath Kudlur, Josh Levenberg, Dandelion Mané, Rajat Monga, Sherry Moore, Derek Murray, Chris Olah, Mike Schuster, Jonathon Shlens, Benoit Steiner, Ilya Sutskever, Kunal Talwar, Paul Tucker, Vincent Vanhoucke, Vijay Vasudevan, Fernanda Viégas, Oriol Vinyals, Pete Warden, Martin Wattenberg, Martin Wicke, Yuan Yu, Xiaoqiang Zheng year: 2015 DOI: https://doi.org/10.5281/zenodo.4724125 –-","category":"page"},{"location":"References/@Aissa2015a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Aissa2015a/","page":"-","title":"-","text":"title: Ranz and Marshall correlations limits on heat flow between a sphere and its surrounding gas at high temperature authors: Abderrahmane Aissa, Mohamed Abdelouahab, Abdelkader Noureddine, Mohammed Elganaoui, Bernard Pateyron year: 2015 –-","category":"page"},{"location":"Teaching/Machine Learning/Data-Driven/","page":"-","title":"-","text":"Notes based on Data-Driven Science and Engineering by Steven L. Brunton and J. Nathan Kurz. Their proposed teaching materials for the book can be found here. Supplementary notes that might be useful for understanding the concepts are provided in course AMATH301. The set of open source materials proposed by Kurz's team is found here.","category":"page"},{"location":"Teaching/Machine Learning/Data-Driven/#Singular-Value-Decomposition","page":"-","title":"Singular Value Decomposition","text":"","category":"section"},{"location":"Teaching/Machine Learning/Data-Driven/#Fourier-and-Wavelet-Transforms","page":"-","title":"Fourier and Wavelet Transforms","text":"","category":"section"},{"location":"Teaching/Machine Learning/Data-Driven/#Sparsity-and-Compressed-Sensing","page":"-","title":"Sparsity and Compressed Sensing","text":"","category":"section"},{"location":"Teaching/Machine Learning/Data-Driven/#Regression-and-Model-Selection","page":"-","title":"Regression and Model Selection","text":"","category":"section"},{"location":"Teaching/Machine Learning/Data-Driven/#Clustering-and-Classification","page":"-","title":"Clustering and Classification","text":"","category":"section"},{"location":"Teaching/Machine Learning/Data-Driven/#Neural-Networks-and-Deep-Learning","page":"-","title":"Neural Networks and Deep Learning","text":"","category":"section"},{"location":"Teaching/Machine Learning/Data-Driven/#Data-Driven-Dynamical-Systems","page":"-","title":"Data-Driven Dynamical Systems","text":"","category":"section"},{"location":"Teaching/Machine Learning/Data-Driven/#Linear-Control-Theory","page":"-","title":"Linear Control Theory","text":"","category":"section"},{"location":"Teaching/Machine Learning/Data-Driven/#Balanced-Models-for-Control","page":"-","title":"Balanced Models for Control","text":"","category":"section"},{"location":"Teaching/Machine Learning/Data-Driven/#Data-Driven-Control","page":"-","title":"Data-Driven Control","text":"","category":"section"},{"location":"Teaching/Machine Learning/Data-Driven/#Reduced-Order-Models-(ROMs)","page":"-","title":"Reduced Order Models (ROMs)","text":"","category":"section"},{"location":"Teaching/Machine Learning/Data-Driven/#POD-for-Partial-Differential-equations-(11.1)","page":"-","title":"POD for Partial Differential equations (11.1)","text":"","category":"section"},{"location":"Teaching/Machine Learning/Data-Driven/","page":"-","title":"-","text":"(Image: )","category":"page"},{"location":"Teaching/Machine Learning/Data-Driven/","page":"-","title":"-","text":"Proxy models are much faster (lower dimensional)\nClassical discretization (FD) lead to high dimensional schemes\nModel expansion can produce much lower dimension problems","category":"page"},{"location":"Teaching/Machine Learning/Data-Driven/","page":"-","title":"-","text":"$$u(x,t) = \\sum_{k=1}^{n}a_{k}(t)\\psi_k(x)$$","category":"page"},{"location":"Teaching/Machine Learning/Data-Driven/","page":"-","title":"-","text":"Idea: plug the modal expansion in the PDE and expand it\nWith modal basis the approximations are non-local (global)\nOption 1: Fourier mode expansion - FFT","category":"page"},{"location":"Teaching/Machine Learning/Data-Driven/","page":"-","title":"-","text":"$$\\psi_k(x)=\\frac{1}{L}\\exp\\left(i\\frac{2\\pi{}kx}{L}\\right)$$","category":"page"},{"location":"Teaching/Machine Learning/Data-Driven/","page":"-","title":"-","text":"Goal: try to approximate with r basis instead of large n\nExample: try to approximate a Gaussian with FME\nLocalized structures require more expansion modes\nConstruction similar to spectral methods","category":"page"},{"location":"Teaching/Machine Learning/Data-Driven/#Optimal-Basis-Elements-(11.2)","page":"-","title":"Optimal Basis Elements (11.2)","text":"","category":"section"},{"location":"Teaching/Machine Learning/Data-Driven/","page":"-","title":"-","text":"(Image: )","category":"page"},{"location":"Teaching/Machine Learning/Data-Driven/","page":"-","title":"-","text":"Key idea: simulate the dynamics of the system and save snapshots of time-step solutions to then identify a modal expansion.\nThe tildeU POD basis psi_k found by truncating the SVD matrix U at rank r is the optimal in the L^2 sense for the given data.\nUse energy accumulated in modes as discussed in Chapter 1 Singular Value Decomposition to define the optimal (or good enough) value of r.\nThe produced ROM is not assured to be safe outside the subspace to which it was identified, though that is fine for several physics.","category":"page"},{"location":"Teaching/Machine Learning/Data-Driven/#POD-and-Soliton-Dynamics-(11.3)","page":"-","title":"POD and Soliton Dynamics (11.3)","text":"","category":"section"},{"location":"Teaching/Machine Learning/Data-Driven/","page":"-","title":"-","text":"(Image: )","category":"page"},{"location":"Teaching/Machine Learning/Data-Driven/#Continuous-Formulation-of-POD","page":"-","title":"Continuous Formulation of POD","text":"","category":"section"},{"location":"Teaching/Machine Learning/Data-Driven/","page":"-","title":"-","text":"(Image: )","category":"page"},{"location":"Teaching/Machine Learning/Data-Driven/#POD-with-Symmetries","page":"-","title":"POD with Symmetries","text":"","category":"section"},{"location":"Teaching/Machine Learning/Data-Driven/","page":"-","title":"-","text":"(Image: )","category":"page"},{"location":"Teaching/Machine Learning/Data-Driven/#Interpolation-for-Parametric-ROMs","page":"-","title":"Interpolation for Parametric ROMs","text":"","category":"section"},{"location":"Teaching/Machine Learning/Data-Driven/#Additional-materials","page":"-","title":"Additional materials","text":"","category":"section"},{"location":"Teaching/Machine Learning/Data-Driven/","page":"-","title":"-","text":"(Image: Professor Nick Trefethen, University of Oxford, Linear Algebra Optimization)","category":"page"},{"location":"References/@Zuo2000a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Zuo2000a/","page":"-","title":"-","text":"title: Modelling superheated fuel sprays and vaproization authors: B. Zuo, A. M. Gomes, C. J. Rutland year: 2000 URL: https://doi.org/10.1243/1468087001545218 –-","category":"page"},{"location":"toc/#Table-of-contents","page":"Table of Contents","title":"Table of contents","text":"","category":"section"},{"location":"toc/","page":"Table of Contents","title":"Table of Contents","text":"Depth = 4","category":"page"},{"location":"DryGranular/#DryGranular","page":"DryGranular","title":"DryGranular","text":"","category":"section"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"CurrentModule = DryGranular\nDocTestSetup = quote\n using Statistics\n using DryGranular\nend","category":"page"},{"location":"DryGranular/#General-porous-media","page":"DryGranular","title":"General porous media","text":"","category":"section"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"Modeling of geometrical characteristics of porous beds is required for including both their thermal effect or role over chemistry in chemical reactors. A classical approach used in several commercial and open source tools is that of Gunn [1]. In what follows we develop the ideas that lead to an analogous model which is implemented by this structure.","category":"page"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"To build the model we will assume a reactor of constant rectangular cross-section A_r=bw and volume V_R=bwh. Its cross-section perimeter is then P_R=2(b+w). Inside this reactor we randomly pack cubic particles beta of surface area A_beta=6l_beta^2 and volume V_beta=l_beta^3 at a porosity level phi. Thus the total volume of solids inside the reactor is V_S=(1-phi)V_R and the approximate number of particles N=fracV_SV_beta. Following a similar reasoning the total surface area of particles is A_S=NA_beta. Performing all the substitutions so far one finds the following expression","category":"page"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"A_S=frac6(1-phi)bwhl_beta","category":"page"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"Since the differential dA=Pdl holds for the surface of a body over its length l, one can divide the above expression by the reactor length to get the perimeter of particles in a cross-section. We can further divide by the cross-section area itself and find the perimeter density which is a more general result, and find the expression proposed by Gunn [1]. This result is summarized in the next equation where the subscript of particle size was dropped for generality.","category":"page"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"P = frac6(1-phi)l","category":"page"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"An estimator of the number of channels per unit cross-section of reactor N can be related to the porosity through NpiR^2=phi. Because the above perimeter is shared between the fluid volume and solids, it holds that N2piR=P. Using these expressions one can solve for the porosity channels characteristic radius R as given below, which is also a result reported by Gunn [1].","category":"page"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"R=fracphil3(1-phi)","category":"page"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"This model is probided in PackedBedPorosityDescriptor.","category":"page"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"DryGranular.PackedBedPorosityDescriptor","category":"page"},{"location":"DryGranular/#DryGranular.PackedBedPorosityDescriptor","page":"DryGranular","title":"DryGranular.PackedBedPorosityDescriptor","text":"Provides description of porosity parameters with stochastic behavior.\n\nϕ::Union{Float64, Vector{Float64}}: Porosity volume fraction in medium [-].\nl::Union{Float64, Vector{Float64}}: Characteristic particle size in medium [m].\nσϕ::Union{Nothing, Float64}: Optional standard deviation of porosity volume fraction [-].\nσl::Union{Nothing, Float64}: Optional standard deviation of characteristic particle size [m].\nP::Union{Float64, Vector{Float64}}: Perimeter in reactor cross-section [m].\nD::Union{Float64, Vector{Float64}}: Characteristic diameter of porosity channels [m].\nA::Float64: Reactor area used for scaling perimeter [m²].\n\n\n\n\n\n","category":"type"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"PackedBedPorosityDescriptor can be used to describe the geometry of exchange section of a packed bed for a single set of arguments.","category":"page"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"julia> PackedBedPorosityDescriptor(; ϕ = 0.65, l = 0.10, area = 1.0)\nPackedBedPorosityDescriptor(P = 21.000000 m, D = 0.123810 m)","category":"page"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"It can also be used to describe randomly varying reactors, what is a more realistic thing to do when using this structure to simulate real world systems.","category":"page"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"julia> PackedBedPorosityDescriptor(;\n ϕ = 0.65, l = 0.10,\n σϕ = 0.03, σl = 0.01,\n N = 2,\n ϕlims = (0.4, 0.8),\n llims = (0.0, 0.3),\n seed = 42,\n area = 1.0\n )\nPackedBedPorosityDescriptor(\n P from 21.455749 m to 24.370742 m\n D from 0.125589 m to 0.102353 m\n)","category":"page"},{"location":"DryGranular/#Rotary-kiln-models","page":"DryGranular","title":"Rotary kiln models","text":"","category":"section"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"In a rotary kiln as proposed by Kramers and Croockewite (1952) [2]. Its goal is to be used as a process support tool or to integrate more complex models requiring integration of the bed profile. In its classical statement, the bed height profile h(z) can be evaluated from volume of flowing material conservation through the following equations. Coordinate z=0 represents the discharge position where initial condition must be applied. This is given by the dam height, if any, or particle size.","category":"page"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"beginaligned\ndfracdhdz = C₁ leftfrachRleft(2 - frachRright)right^-frac32 - C₂6pt\nC₁ = frac34dfracΦtanγπ R^3 ω6pt\nC₂ = dfractanβcosγ\nendaligned","category":"page"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"The structure SymbolicLinearKramersModel implements the Kramers' ordinary differential equation for prediction of bed height profile in a rotary kiln. This equation is implemented under the formalism of ModelingToolkit.","category":"page"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"DryGranular.SymbolicLinearKramersModel","category":"page"},{"location":"DryGranular/#DryGranular.SymbolicLinearKramersModel","page":"DryGranular","title":"DryGranular.SymbolicLinearKramersModel","text":"Creates a reusable linear Kramers model for rotary kiln simulation.\n\nR::Symbolics.Num: Symbolic kiln internal radius\nΦ::Symbolics.Num: Symbolic kiln feed rate\nω::Symbolics.Num: Symbolic kiln rotation rate\nβ::Symbolics.Num: Symbolic kiln slope\nγ::Symbolics.Num: Symbolic solids repose angle\nz::Symbolics.Num: Symbolic kiln axial coordinates\nh::Symbolics.Num: Symbolic bed height profile\nsys::ModelingToolkit.ODESystem: Problem ordinary differential equation\n\n\n\n\n\n","category":"type"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"For integration of this model we implement RotaryKilnBedSolution. It provides the solved description of a rotary kiln bed geometry computed from the solution of bed height along the kiln length. The main goal of the quantities computed here is their use with heat and mass transfer models for the simulation of rotary kiln process. A simple post-processing utilitiy plotlinearkramersmodel is also provided.","category":"page"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"DryGranular.RotaryKilnBedSolution\nDryGranular.plotlinearkramersmodel","category":"page"},{"location":"DryGranular/#DryGranular.RotaryKilnBedSolution","page":"DryGranular","title":"DryGranular.RotaryKilnBedSolution","text":"General geometric description of a bed from Kramers equation solution.\n\nz::Vector{Float64}: Solution coordinates [m]\nh::Vector{Float64}: Solution bed height [m]\nθ::Vector{Float64}: View angle from kiln center [rad]\nl::Vector{Float64}: Bed-freeboard cord length [m]\nA::Vector{Float64}: Local bed cross section area [m²]\nη::Vector{Float64}: Local loading based on height [-]\nηₘ::Float64: Mean loading of kiln [%]\nV::Float64: Bed integral volume [m³]\nτ::Float64: Residence time of particles\nβ::Float64: Kiln slope [rad]\n\nArguments\n\nInternal elements are initialized through the following constructor:\n\nRotaryKilnBedSolution(z, h, β, R, Φ)\n\nWhere parameters are given as:\n\nz: solution coordinates over length, [m].\nh: bed profile solution over length, [m].\nR: kiln internal radius, [m].\nΦ: kiln feed rate, [m³/s].\n\nAn outer constructor is also provided for managing the integration of an instance of SymbolicLinearKramersModel. This is the recommended usage that is illustrated below.\n\nImportant: inputs must be provided in international system (SI) units as a better physical practice. The only exception is the rotation rate ω provided in revolution multiples. If the discharge end is held by a dam, its height must be provided instead of the particle size, as it is used as the ODE initial condition.\n\nmodel: a symbolic kiln model.\nL: kiln length, [m].\nR: kiln internal radius, [m].\nΦ: kiln feed rate, [m³/s].\nω: kiln rotation rate, [rev/s].\nβ: kiln slope, [rad].\nγ: solids repose angle, [rad].\nd: particle size or dam height, [m].\nsolver: Solver for DifferentialEquations. Defaults to Tsit5.\nrtol: Relative integration tolerance. Defaults to 1.0e-08.\natol: Absolute integration tolerance. Defaults to 1.0e-08.\n\n\n\n\n\n","category":"type"},{"location":"DryGranular/#DryGranular.plotlinearkramersmodel","page":"DryGranular","title":"DryGranular.plotlinearkramersmodel","text":"plotlinearkramersmodel(\n model::RotaryKilnBedSolution;\n normz::Bool = false,\n normh::Bool = false\n)::Figure\n\nStandardized plotting of RotaryKilnBedSolution bed profile. It supports normalization of axes throught keywords normz for axial coordinate and normh for bed depth.\n\n\n\n\n\n","category":"function"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"Data in next example is an SI conversion of an example from Kramers and Croockewite (1952) [2].","category":"page"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"julia> L = 13.715999999999998; # Kiln length [m]\n\njulia> D = 1.8897599999999999; # Kiln diameter [m]\n\njulia> β = 2.3859440303888126; # Kiln slope [°]\n\njulia> γ = 45.0; # Repose angle [°]\n\njulia> d = 1.0; # Particle/dam size [mm]\n\njulia> Φ = 10.363965852671996; # Feed rate [m³/h]\n\njulia> ω = 3.0300000000000002; # Rotation rate [rev/min]\n\njulia> bed = RotaryKilnBedSolution(;\n model = SymbolicLinearKramersModel(),\n L = L,\n R = D / 2.0,\n Φ = Φ / 3600.0,\n ω = ω / 60.0,\n β = deg2rad(β),\n γ = deg2rad(γ),\n d = d / 1000.0\n );\n\njulia> bed\nRotaryKilnBedSolution(τ = 13.169938 min, ηₘ = 5.913271 %)\n\njulia> bed.τ\n790.1963002204403","category":"page"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"In the following dummy example we force a very thick analytical bed solution, filling the radius of the rotary drum. ","category":"page"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"julia> R = 1.0e+00;\n\njulia> Φ = 1.0e-02;\n\njulia> z = collect(0.0:0.1:10.0);\n\njulia> h = R * ones(size(z));\n\njulia> Aₐ = π * R^2 / 2;\n\njulia> Vₐ = Aₐ * z[end];\n\njulia> bed = RotaryKilnBedSolution(z, h, 0, R, Φ)\nRotaryKilnBedSolution(τ = 26.179939 min, ηₘ = 50.000000 %)","category":"page"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"Next we confirm the internal evaluations of the model match the expected analytical values.","category":"page"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"julia> mean(bed.θ) ≈ π\ntrue\n\njulia> mean(bed.l) ≈ 2R\ntrue\n\njulia> mean(bed.A) ≈ Aₐ\ntrue\n\njulia> mean(bed.η) ≈ 0.5\ntrue\n\njulia> bed.ηₘ ≈ 50.0\ntrue\n\njulia> bed.V ≈ Vₐ\ntrue\n\njulia> bed.τ ≈ Vₐ / Φ\ntrue","category":"page"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"Validation of Kramers' model is provided here.","category":"page"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"Finally a set of basic equations provided for process analysis.","category":"page"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"DryGranular.sullivansηₘ\nDryGranular.dimlessNΦ\nDryGranular.dimlessNₖ\nDryGranular.perrayresidence\nDryGranular.kramersnlapprox","category":"page"},{"location":"DryGranular/#DryGranular.sullivansηₘ","page":"DryGranular","title":"DryGranular.sullivansηₘ","text":"Sullivans approximation to kiln filling.\n\n\n\n\n\n","category":"function"},{"location":"DryGranular/#DryGranular.dimlessNΦ","page":"DryGranular","title":"DryGranular.dimlessNΦ","text":"Kramers (1952) dimensionless group NΦ.\n\n\n\n\n\n","category":"function"},{"location":"DryGranular/#DryGranular.dimlessNₖ","page":"DryGranular","title":"DryGranular.dimlessNₖ","text":"Kramers (1952) dimensionless group Nₖ.\n\n\n\n\n\n","category":"function"},{"location":"DryGranular/#DryGranular.perrayresidence","page":"DryGranular","title":"DryGranular.perrayresidence","text":"Compute residence time from Peray's equation.\n\n\n\n\n\n","category":"function"},{"location":"DryGranular/#DryGranular.kramersnlapprox","page":"DryGranular","title":"DryGranular.kramersnlapprox","text":"Nonlinear formulation of Kramers model approximate solution.\n\n\n\n\n\n","category":"function"},{"location":"References/@Jeong1995a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Jeong1995a/","page":"-","title":"-","text":"title: On the identification of a vortex authors: Jinhee Jeong, Fazle Hussain year: 1995 URL: https://doi.org/10.1017/S0022112095000462 Drive: –-","category":"page"},{"location":"References/@Wu2022a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Wu2022a/","page":"-","title":"-","text":"title: A comprehensive study of non-adaptive and residual-based adaptive sampling for physics-informed neural networks authors: Chenxi Wu, Min Zhu, Qinyang Tan, Yadhu Kartha, Lu Lu year: 2022 URL: https://doi.org/10.48550/arXiv.2207.10289 Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZla5WOX3yVxsVYZ1BSQ?e=RJSrB2 –-","category":"page"},{"location":"Teaching/Basilisk/Basilisk/","page":"Basilisk","title":"Basilisk","text":"The goal of this material is to provide support to teaching introductory computational fluid mechanics with aid of Basilisk. The studies are based on commented tutorials and a documentation guide extending what is already provided with the package.","category":"page"},{"location":"Teaching/Basilisk/Basilisk/","page":"Basilisk","title":"Basilisk","text":"Before going over the tutorials, you need some C knowledge. In the future I intend to provide a synthetic version applied to Basilisk students only. For now, the referred one is pretty good.","category":"page"},{"location":"Teaching/Basilisk/Basilisk/#First-steps","page":"Basilisk","title":"First steps","text":"","category":"section"},{"location":"Teaching/Basilisk/Basilisk/","page":"Basilisk","title":"Basilisk","text":"The source code for the studies is provided here. The repository keeps a copy of Basilisk at a version that will work with all modified tutorials. It may be eventually updated, but in that case functioning of tutorials will be tested. You will need to clone it then following the steps to compile Basilisk before starting. After building Basilisk, instead of adding variables to your environment, consider sourcing them temporarily with help of source activate.sh using the provided script.","category":"page"},{"location":"Teaching/Basilisk/Basilisk/","page":"Basilisk","title":"Basilisk","text":"All tutorials are found under src. Just enter the tutorials you want to follow using the command line and run make. This not only will compile, but will also run and post-process results.","category":"page"},{"location":"Teaching/Basilisk/Basilisk/#Project-management","page":"Basilisk","title":"Project management","text":"","category":"section"},{"location":"Teaching/Basilisk/Basilisk/","page":"Basilisk","title":"Basilisk","text":"Although Basilisk is a very interesting dialect of C, its documentation is still old-fashioned and lack some structuration. Also sample programs are not written to be easily managed and extended for use in variant cases. Here we propose a structure for creating better projects with Basilisk:","category":"page"},{"location":"Teaching/Basilisk/Basilisk/","page":"Basilisk","title":"Basilisk","text":"A Basilisk project lives in its own folder: one executable means one directory.\nA simpler Makefile than Basilisk's default one is used for project building.\nThe main file is called app.c and contains a very simple structure as provided in the dummy listing bellow. All the logic of a project, i.e. the events, is implemented in separate header files that are included after Basilisk includes.","category":"page"},{"location":"Teaching/Basilisk/Basilisk/","page":"Basilisk","title":"Basilisk","text":"// Definitions\n#define LEVEL 7\n#define ...\n\n// Basilisk includes.\n#include \"grid/multigrid.h\"\n#include \"run.h\"\n#include ... \n\n// Project includes.\n#include \"project-base.h\"\n#include \"project-init.h\"\n#include \"project-post.h\"\n#include \"project-exec.h\"\n\nint main() {\n\tinit_grid(1 << LEVEL);\n\t...\n\trun();\n}","category":"page"},{"location":"Teaching/Basilisk/Basilisk/#Parallel-computing","page":"Basilisk","title":"Parallel computing","text":"","category":"section"},{"location":"Teaching/Basilisk/Basilisk/","page":"Basilisk","title":"Basilisk","text":"Currently I have not tried Basilisk in parallel (actually I did so a few years back but don't really remember the steps). Since there is no dedicated tutorial for going parallel, here are the notes I am taking for writing something in that sense:","category":"page"},{"location":"Teaching/Basilisk/Basilisk/","page":"Basilisk","title":"Basilisk","text":"Tutorial isotropic.c has notes on how to run parallel in some of its parent universities supercomputers. Probably some steps there might be recycled here.","category":"page"},{"location":"References/@Haghighat2021sciann/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Haghighat2021sciann/","page":"-","title":"-","text":"title: \"SciANN: A Keras/TensorFlow wrapper for scientific computations and physics-informed deep learning using artificial neural networks\" authors: Ehsan Haghighat, Ruben Juanes year: 2021 DOI: https://doi.org/10.48550/arXiv.2005.08803 –-","category":"page"},{"location":"References/@Guo2023g/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Guo2023g/","page":"-","title":"-","text":"title: \"Unraveling the design pattern of physics-informed neural networks: Series 07\" authors: Shuai Guo year: 2023 URL: https://towardsdatascience.com/unraveling-the-design-pattern-of-physics-informed-neural-networks-part-07-4ecb543b616a –-","category":"page"},{"location":"References/@Garaniya2012a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Garaniya2012a/","page":"-","title":"-","text":"title: CFD modelling of heavy fuel oil spray combustion authors: V. Garaniya, L. Goldsworthy year: 2012 URL: https://flair.monash.edu/intranet/proceedings/18afmc/Documents/400%20-%20Garaniya.pdf Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZlbEh7jKBqcgTdikWRQ?e=Zima6B –-","category":"page"},{"location":"References/@Guo2024a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Guo2024a/","page":"-","title":"-","text":"title: \"Physics-informed neural networks: An application-centric guide\" authors: Shuai Guo year: 2024 URL: https://towardsdatascience.com/physics-informed-neural-networks-an-application-centric-guide-dc1013526b02 –-","category":"page"},{"location":"References/@Krishnapriyan2021a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Krishnapriyan2021a/","page":"-","title":"-","text":"title: Characterizing possible failure modes in physics-informed neural networks authors: Aditi S. Krishnapriyan, Amir Gholami, Shandian Zhe, Robert M. Kirby, Michael W. Mahoney year: 2021 DOI: https://doi.org/10.48550/arXiv.2109.01050 Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZla8bwpowG74YkMl_tA?e=DmUIjw –-","category":"page"},{"location":"OpenFOAM/#OpenFOAM","page":"OpenFOAM","title":"OpenFOAM","text":"","category":"section"},{"location":"OpenFOAM/","page":"OpenFOAM","title":"OpenFOAM","text":"CurrentModule = OpenFOAM","category":"page"},{"location":"OpenFOAM/","page":"OpenFOAM","title":"OpenFOAM","text":"Modules = [ OpenFOAM ]","category":"page"},{"location":"OpenFOAM/#OpenFOAM.OPENFOAMBANNER","page":"OpenFOAM","title":"OpenFOAM.OPENFOAMBANNER","text":"Banner for all OpenFOAM files with right version.\n\n\n\n\n\n","category":"constant"},{"location":"OpenFOAM/#OpenFOAM.AbstractFlowRateProfile","page":"OpenFOAM","title":"OpenFOAM.AbstractFlowRateProfile","text":"Abstract type for flow rate profile distributions.\n\n\n\n\n\n","category":"type"},{"location":"OpenFOAM/#OpenFOAM.AbstractInjectionModel","page":"OpenFOAM","title":"OpenFOAM.AbstractInjectionModel","text":"Abstract type for injection models.\n\n\n\n\n\n","category":"type"},{"location":"OpenFOAM/#OpenFOAM.AbstractSizeDistribution","page":"OpenFOAM","title":"OpenFOAM.AbstractSizeDistribution","text":"Abstract type for particle size distributions.\n\n\n\n\n\n","category":"type"},{"location":"OpenFOAM/#OpenFOAM.ConstantFlowRateProfile","page":"OpenFOAM","title":"OpenFOAM.ConstantFlowRateProfile","text":"Constant flow rate profile.\n\n\n\n\n\n","category":"type"},{"location":"OpenFOAM/#OpenFOAM.InjectionModel","page":"OpenFOAM","title":"OpenFOAM.InjectionModel","text":"Represents a generic particle injection model.\n\nConstraints imposed by OpenFOAM:\n\nnParticle makes massFlowRate and massTotal to be ignored.\nmassTotal cannot be used in steady state simulations.\nif flowRateProfile is not found a constant massFlowRate profile is computed from the ratio of massTotal and duration.\n\nTo-do:\n\nCheck if parcelBasisType from is applicable to derived types.\n\nmassFlowRate::Number: Particles mass flow rate if nParticle is not provided.\nmassTotal::Number: Total mass to be injected if nParticle is not provided.\nSOI::Number: Start of injection in seconds (base).\nduration::Number: Duration of injection in seconds (base).\nnParticle::Number: Number of particles per parcel.\nuniformParcelSize::UniformParcelSize: Quantity that is constant in parcels (base).\nflowRateProfile::OpenFOAM.AbstractFlowRateProfile: Type of flow rate profile to apply.\n\n\n\n\n\n","category":"type"},{"location":"OpenFOAM/#OpenFOAM.PatchInjection","page":"OpenFOAM","title":"OpenFOAM.PatchInjection","text":"Represents a patch injection model.\n\nname::String: Name to use in injection models list.\npatchName::String: Patch where injection is applied.\ninjectionModel::InjectionModel: Object pointing to general injection model.\nU0::Velocity: Particles injection velocity vector.\nparcelsPerSecond::Number: Number of parcels injected per second.\nsizeDistribution::OpenFOAM.AbstractSizeDistribution: Particle size distribution.\n\n\n\n\n\n","category":"type"},{"location":"OpenFOAM/#OpenFOAM.TableFlowRateProfile","page":"OpenFOAM","title":"OpenFOAM.TableFlowRateProfile","text":"Table flow rate profile.\n\n\n\n\n\n","category":"type"},{"location":"OpenFOAM/#OpenFOAM.TabulatedDensity","page":"OpenFOAM","title":"OpenFOAM.TabulatedDensity","text":"Tabulated density size distribution.\n\n\n\n\n\n","category":"type"},{"location":"OpenFOAM/#OpenFOAM.UniformParcelSize","page":"OpenFOAM","title":"OpenFOAM.UniformParcelSize","text":"Types of uniform parcel sizes.\n\n\n\n\n\n","category":"type"},{"location":"OpenFOAM/#OpenFOAM.Velocity","page":"OpenFOAM","title":"OpenFOAM.Velocity","text":"Simple wraper velocity vector.\n\n\n\n\n\n","category":"type"},{"location":"OpenFOAM/#OpenFOAM.asint-Tuple{Any}","page":"OpenFOAM","title":"OpenFOAM.asint","text":"Round and convert number to an integer.\n\n\n\n\n\n","category":"method"},{"location":"OpenFOAM/#OpenFOAM.parcels_per_second-Tuple{}","page":"OpenFOAM","title":"OpenFOAM.parcels_per_second","text":"parcelstoinject2d(;\n mdot::Float64,\n rhop::Float64,\n diam::Float64,\n nParticle::Int64 = 1\n)\n\nComputes the flow rate of parcels for a given mean particle size and number of particles per parcels. This is inteded as a helper to create a patchInjection element in the injectionModels of cloudProperties file.\n\n\n\n\n\n","category":"method"},{"location":"OpenFOAM/#OpenFOAM.spheremass-Tuple{Any, Any}","page":"OpenFOAM","title":"OpenFOAM.spheremass","text":"The mass of a sphere of density rho and diameter diam.\n\n\n\n\n\n","category":"method"},{"location":"OpenFOAM/#OpenFOAM.spherevolume-Tuple{Any}","page":"OpenFOAM","title":"OpenFOAM.spherevolume","text":"The volume of a sphere of diameter diam.\n\n\n\n\n\n","category":"method"},{"location":"OpenFOAM/#OpenFOAM.tabulate-Tuple{Any, Any}","page":"OpenFOAM","title":"OpenFOAM.tabulate","text":"Compose table entries in typical OpenFOAM format.\n\n\n\n\n\n","category":"method"},{"location":"#WallyToolbox","page":"Home","title":"WallyToolbox","text":"","category":"section"},{"location":"DryMaterials/#DryMaterials","page":"DryMaterials","title":"DryMaterials","text":"","category":"section"},{"location":"DryMaterials/","page":"DryMaterials","title":"DryMaterials","text":"CurrentModule = DryMaterials","category":"page"},{"location":"DryMaterials/","page":"DryMaterials","title":"DryMaterials","text":"Modules = [ DryMaterials ]","category":"page"},{"location":"DryMaterials/#DryMaterials.H_AIR","page":"DryMaterials","title":"DryMaterials.H_AIR","text":"Coefficients for air enthalpy polynomial [J/kg].\n\n\n\n\n\n","category":"constant"},{"location":"DryMaterials/#DryMaterials.PureAir","page":"DryMaterials","title":"DryMaterials.PureAir","text":"Simple implementation of pure air for illustration purposes.\n\n\n\n\n\n","category":"type"},{"location":"DryMaterials/#DryMaterials.PureMineral","page":"DryMaterials","title":"DryMaterials.PureMineral","text":"Simple solid mineral material for illustration purposes.\n\n\n\n\n\n","category":"type"},{"location":"DryMaterials/#DryMaterials.PureWater","page":"DryMaterials","title":"DryMaterials.PureWater","text":"Simple implementation of liquid water for illustration purposes.\n\n\n\n\n\n","category":"type"},{"location":"DryMaterials/#DryMaterials.SolidMineralPhase","page":"DryMaterials","title":"DryMaterials.SolidMineralPhase","text":"Represents a solid mineral phase for thermodynamic calculations.\n\nname: Name of phase.\nρ: Specific mass of phase [kg/m³].\nM: Molecular mass of phase [kg/mol].\np: Polynomial properties of phase.\n\n\n\n\n\n","category":"type"},{"location":"DryMaterials/#DryMaterials.SolidPolynomialProperties","page":"DryMaterials","title":"DryMaterials.SolidPolynomialProperties","text":"Arbitrary Laurent polynomial specific heat and enthalpy of materials.\n\nc: Polynomial representation of specific heat [J/(kg.K)].\nh: Polynomial representation of enthalpy [J/kg].\nhₒ: Reference state enthalpy [J/kg].\n\n\n\n\n\n","category":"type"},{"location":"DryMaterials/#DryMaterials.density","page":"DryMaterials","title":"DryMaterials.density","text":"Evaluates the density of material [kg/m³].\n\n\n\n\n\n","category":"function"},{"location":"DryMaterials/#DryMaterials.enthalpy","page":"DryMaterials","title":"DryMaterials.enthalpy","text":"Evaluates the enthalpy of material [J/kg].\n\n\n\n\n\n","category":"function"},{"location":"DryMaterials/#DryMaterials.getamorphoussilica-Tuple{}","page":"DryMaterials","title":"DryMaterials.getamorphoussilica","text":"Representation of amorphous silica SiO_2(a).\n\nTODO recover missing defaults in Schieltz (1964).\n\n\n\n\n\n","category":"method"},{"location":"DryMaterials/#DryMaterials.getkaolinite-Tuple{}","page":"DryMaterials","title":"DryMaterials.getkaolinite","text":"Representation of Kaolinite Al_2Si_2O_5(OH)_4.\n\nTODO recover missing defaults in Schieltz (1964).\n\n\n\n\n\n","category":"method"},{"location":"DryMaterials/#DryMaterials.getmetakaolin-Tuple{}","page":"DryMaterials","title":"DryMaterials.getmetakaolin","text":"Representation of metakaolin Al_2Si_2O_7.\n\nTODO recover missing defaults in Schieltz (1964).\n\n\n\n\n\n","category":"method"},{"location":"DryMaterials/#DryMaterials.getspinel-Tuple{}","page":"DryMaterials","title":"DryMaterials.getspinel","text":"Representation of spinel Al_4Si_3O_12.\n\nTODO recover missing defaults (somewhere else, not in Schieltz (1964)).\n\n\n\n\n\n","category":"method"},{"location":"DryMaterials/#DryMaterials.molecularmass","page":"DryMaterials","title":"DryMaterials.molecularmass","text":"Retrieve molecular mass of materials [kg/mol].\n\n\n\n\n\n","category":"function"},{"location":"DryMaterials/#DryMaterials.specificheat","page":"DryMaterials","title":"DryMaterials.specificheat","text":"Evaluates the specific heat of materials [J/(kg.K)].\n\n\n\n\n\n","category":"function"},{"location":"Teaching/Transport Phenomena/#Dimensionless-groups","page":"-","title":"Dimensionless groups","text":"","category":"section"},{"location":"Teaching/Transport Phenomena/","page":"-","title":"-","text":"Knudsen: Particles mean free path over system characteristic dimension. Division between rarefied gas (Boltzmann) and continuum mechanics (Navier-Stokes).","category":"page"},{"location":"Teaching/Transport Phenomena/","page":"-","title":"-","text":"Prandtl: Ratio of momentum diffusivity to thermal diffusivity mathrmPr=fracnualpha. High mathrmPr indicates that momentum transfer is more effective than heat transfer (oils), while low values (liquid metals) indicate thermal boundary layer is more important than viscous one.","category":"page"},{"location":"Teaching/Transport Phenomena/","page":"-","title":"-","text":"Nusselt: Ratio of convective to conductive heat transfer at a boundary in a fluid, defined as mathrmNu=frachLk. Often in buoyancy-driven flow analysis it is correlated as mathrmNu=amathrmRa^b. A Nusselt number of value one represents heat transfer by pure conduction. Increasing this number implies a laminar conductive-dominant flow and then a convective dominant turbulent flow.","category":"page"},{"location":"Teaching/Transport Phenomena/","page":"-","title":"-","text":"Sherwood: Also called the mass transfer Nusselt number) is a dimensionless number used in mass-transfer operation. It represents the ratio of the total mass transfer rate (convection + diffusion) to the rate of diffusive mass transport, and is named in honor of Thomas Kilgore Sherwood.","category":"page"},{"location":"Teaching/Transport Phenomena/","page":"-","title":"-","text":"Grashof: Ratio of buoyancy to viscous forces defined as mathrmGr=fracgbeta(T_s-T_infty)L^3nu^2 and is analogous to Reynolds number in natural convection. Increasing the value of this number above a given threshold promotes buoyancy driven flow.","category":"page"},{"location":"Teaching/Transport Phenomena/","page":"-","title":"-","text":"Rayleigh: Product of Grashof mathrmGr and Prandtl mathrmPr numbers. Related to the transition from laminar to turbulent in buoyancy-driven flows. Laminar to turbulent is assumed to take place at 10^9 ([[@Balaji2014]]) [14].","category":"page"},{"location":"Teaching/Transport Phenomena/","page":"-","title":"-","text":"Péclet: provides the ratio of advective per diffusive transport of a substance. For mass transport this is given by the product of Reynolds and Schmidt numbers mathrmRemathrmSc while for thermal energy it is the product of Reynolds and Prandtl numbers mathrmRemathrmPr.","category":"page"},{"location":"Teaching/Transport Phenomena/#Granular-flows","page":"-","title":"Granular flows","text":"","category":"section"},{"location":"Teaching/Transport Phenomena/","page":"-","title":"-","text":"Parcel is a computational particle unit that may be composed of several particles which are all identical sharing a state, which include velocity, size, temperature, etc. See ([[@ORourke2010]]) [15] for details.\nCloud is the term OpenFOAM uses to describe particle flows. Here we will use both MPPICCloud andcollidingCloud, other types being available for reacting or multiphase solvers, such as thermoCloud.","category":"page"},{"location":"Teaching/Transport Phenomena/#Technological","page":"-","title":"Technological","text":"","category":"section"},{"location":"Teaching/Transport Phenomena/","page":"-","title":"-","text":"Siwek chamber is a reactor often used to determine the dispersion of solid fuels for combustion. Validation of simulations can be done through this and this paper. Other than the OpenFOAM case there is also this setup available on Fetch CFD.","category":"page"},{"location":"Teaching/Transport Phenomena/#Mathematical","page":"-","title":"Mathematical","text":"","category":"section"},{"location":"Teaching/Transport Phenomena/","page":"-","title":"-","text":"Hopf bifurcation  is a critical point where, as a parameter changes, a system's stability switches and a periodic solution arises. (see this).","category":"page"},{"location":"Teaching/Transport Phenomena/#Combustion","page":"-","title":"Combustion","text":"","category":"section"},{"location":"Teaching/Transport Phenomena/","page":"-","title":"-","text":"HyChem is an approach for modeling combustion of real liquid fuels by decomposing the problem into a lumped parameter model of evaporation/devolatilization and a detailed or simplified chemical kinetics approach applied to the gas phase. It is available for high-end fuels such as jet fuel and gasoline.","category":"page"},{"location":"Teaching/Transport Phenomena/#Condensate-fuel-combustion","page":"-","title":"Condensate fuel combustion","text":"","category":"section"},{"location":"Teaching/Transport Phenomena/","page":"-","title":"-","text":"This matter enters a intrinsically multiphysics domain and problem formulation needs to take into account at what level the model is required to act. For liquids, that might include spray droplets formation, evaporation, devolatilization, mass transfer to gas phase, and finally, oxidation kinetics of gas products. In the case of solids, due to high uncertainty and variability in material properties, and complex mass transfer phenomena, one must expect qualitative or semi-quantitative agreement of models and measurements. Furthermore, lumped-parameter modeling is a requirement in the field, making it difficult to be generalized to a physical level as of today.","category":"page"},{"location":"Teaching/Transport Phenomena/","page":"-","title":"-","text":"[[@Saario2005a]] used Ansys Fluent to simulate HFO (heavy-fuel oil) combustion using the standard mixture fraction approach coupled to a Lagrangian particle tracking for evaporating droplets and k-epsilon turbulence modeling. This is a highly standard industrial application of global combustion simulation from an energy standpoint but lacks the generality of considering a detailed chemistry of gas phase (for instance, for coupling with solid calcination reactions, if that is the case).","category":"page"},{"location":"Teaching/Transport Phenomena/","page":"-","title":"-","text":"[[@Garaniya2012a]] used StarCD to simulate HFO in the context of ship engines. From the same authors ([[@Garaniya2012b]]), we also have the the thermodynamic formulation of the problem.","category":"page"},{"location":"Teaching/Transport Phenomena/","page":"-","title":"-","text":"[[@Nowruzi2014]] successfully simulated a spray jet of HFO with OpenFOAM without accounting for chemistry and combustion. In the absence of a proper PSD (particle size-distribution) this step is required to initialize a simulation, but can hardly be integrated in a reacting flow simulation, which would become overly complex. ","category":"page"},{"location":"Teaching/Transport Phenomena/","page":"-","title":"-","text":"[[@Sanchez2023a]] studied the combustion of biomass with help of OpenFOAM with some semi-quantitative results within 13% from the measurements, what is already considered a very good agreement in the field.","category":"page"},{"location":"Teaching/Transport Phenomena/","page":"-","title":"-","text":"[ ] Continue the research here.","category":"page"},{"location":"Teaching/Basilisk/Draft/#Planned-studies","page":"-","title":"Planned studies","text":"","category":"section"},{"location":"Teaching/Basilisk/Draft/","page":"-","title":"-","text":"Learning steps","category":"page"},{"location":"Teaching/Basilisk/Draft/","page":"-","title":"-","text":"- [x] [Base tutorial](http://basilisk.fr/Tutorial)\n- [ ] [Review of main examples](http://basilisk.fr/src/examples/README)\n- [ ] [Review of extra examples (1)](http://basilisk.fr/sandbox/Antoonvh/README)\n- [ ] [Review of extra examples (2)](http://basilisk.fr/sandbox/M1EMN/README)\n- [ ] [Review of main tests](http://basilisk.fr/src/test/README)\n- [ ] [Review of built-it solvers](http://basilisk.fr/src/README)\n- [ ] [Dimensional analysis tutorial](http://basilisk.fr/Tutorial.dimensions)\n- [ ] [Basilisk C](http://basilisk.fr/Basilisk%20C)\n- [ ] [Past papers](http://basilisk.fr/Bibliography)","category":"page"},{"location":"Teaching/Basilisk/Draft/","page":"-","title":"-","text":"Concluding projects","category":"page"},{"location":"Teaching/Basilisk/Draft/","page":"-","title":"-","text":"- [ ] Convection equation ([samples](http://basilisk.fr/sandbox/M1EMN/README))\n- [ ] Diffusion equation ([samples](http://basilisk.fr/sandbox/M1EMN/README))\n- [ ] Burgers equation\n- [ ] Cavity flow Navier-Stokes","category":"page"},{"location":"Teaching/Basilisk/Draft/","page":"-","title":"-","text":"Advanced projects","category":"page"},{"location":"Teaching/Basilisk/Draft/","page":"-","title":"-","text":"- [ ] Carbonitriding of low alloy steels\n- [ ] JMAK kinetics and heat transfer\n- [ ] Drag-out flow in plate coating\n- [ ] Graf's acetylene decomposition flow\n- [ ] Rising bubble in fluid","category":"page"},{"location":"Teaching/Basilisk/Draft/","page":"-","title":"-","text":"Things to check","category":"page"},{"location":"Teaching/Basilisk/Draft/","page":"-","title":"-","text":"- [ ] Running simulations in parallel\n- [ ] Evaporation and combustion in sandbox\n- [ ] Examples with [granular flows](http://basilisk.fr/sandbox/M1EMN/README#examples-of-granular-flows) and [silos](http://basilisk.fr/sandbox/M1EMN/Exemples/granular_sandglass.c)\n- [ ] Rising bubble with granular flow","category":"page"},{"location":"Teaching/Basilisk/Draft/#Commented-examples##-Teaching-plan","page":"-","title":"Commented examples## Teaching plan","text":"","category":"section"},{"location":"Teaching/Basilisk/Draft/#Week-1","page":"-","title":"Week 1","text":"","category":"section"},{"location":"Teaching/Basilisk/Draft/","page":"-","title":"-","text":"In-class: Fundamentals of scientific computing (history, basics of hardware, number representations, numerical solvers, parallel computing, etc.)\nTutorial: Basics of Linux command line, VIM text editor, programming in C (with mini-projects), and Basilisk C.","category":"page"},{"location":"Teaching/Basilisk/Draft/#Week-2","page":"-","title":"Week 2","text":"","category":"section"},{"location":"Teaching/Basilisk/Draft/","page":"-","title":"-","text":"In-class: \nTutorial: ","category":"page"},{"location":"Teaching/Basilisk/Draft/#Week-3","page":"-","title":"Week 3","text":"","category":"section"},{"location":"Teaching/Basilisk/Draft/","page":"-","title":"-","text":"In-class: \nTutorial: ","category":"page"},{"location":"Teaching/Basilisk/Draft/#Week-4","page":"-","title":"Week 4","text":"","category":"section"},{"location":"Teaching/Basilisk/Draft/","page":"-","title":"-","text":"In-class: \nTutorial: ","category":"page"},{"location":"Teaching/Basilisk/Draft/#Week-5","page":"-","title":"Week 5","text":"","category":"section"},{"location":"Teaching/Basilisk/Draft/","page":"-","title":"-","text":"In-class: \nTutorial: ","category":"page"},{"location":"Teaching/Basilisk/Draft/#Week-6","page":"-","title":"Week 6","text":"","category":"section"},{"location":"Teaching/Basilisk/Draft/","page":"-","title":"-","text":"In-class: \nTutorial: ","category":"page"},{"location":"Cantera/samples/#Cantera-samples","page":"Cantera samples","title":"Cantera samples","text":"","category":"section"},{"location":"Cantera/samples/","page":"Cantera samples","title":"Cantera samples","text":"# cantera = \"C:\\\\Program Files\\\\Cantera\\\\bin\\\\cantera_shared.dll\"\n#\n# ENV[\"CANTERA_SHARED\"] = cantera\n# @assert haskey(ENV, \"CANTERA_SHARED\")\n#\n# FIXME: how to run this in GitHub???\n#\n# @assert ct.appdelete()\n# @assert ct.resetstorage()\n# @assert ct.clearstorage()\n# @assert ct.suppress_thermo_warnings(true)\n# @assert ct.use_legacy_rate_constants(false)\n#\n# sol = ct.Solution(\"gri30.yaml\", \"gri30\", \"mixture-averaged\")\n# gas = ct.Solution(\"gri30.yaml\", \"gri30\", \"mixture-averaged\")\n#\n# Xᵣ = zeros(sol.nspecies)\n# Xᵣ[1] = 1.0\n#\n# Tᵣ = 3500.0\n# Pᵣ = 50000.0\n#\n# ct.set_TPX!(sol, Tᵣ, Pᵣ, Xᵣ; norm = true)\n#\n# @assert ct.gettemperature(sol) ≈ Tᵣ\n# @assert ct.getpressure(sol) ≈ Pᵣ\n# @assert all(ct.getmolefractions(sol) ≈ Xᵣ)\n#\n# ct.equilibrate!(sol, \"HP\", print_results = true)","category":"page"},{"location":"References/@Launder1974/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Launder1974/","page":"-","title":"-","text":"title: The numerical computation of turbulent flows authors: B. E. Launder, D. B. Spalding year: 1974 –-","category":"page"},{"location":"References/@Ranz1952/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Ranz1952/","page":"-","title":"-","text":"title: Evaporation from drops authors: W. Ranz, W. Marshall year: 1952 –-","category":"page"},{"location":"References/@Garaniya2012b/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Garaniya2012b/","page":"-","title":"-","text":"title: Heavy fuel oil combustion modelling using continuous thermodynamics authors: Vikram Garaniya, Laurie Goldsworthy year: 2012 DOI: https://doi.org/10.5988/jime.47.871 Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZlbEigrD3idko7FKcyQ?e=lNld2R –-","category":"page"},{"location":"References/@Wang2023a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Wang2023a/","page":"-","title":"-","text":"title: \"Auto-PINN: Understanding and optimizing physics-informed neural architecture\" authors: Yicheng Wang, Xiaotian Han, Chia-Yuan Chang, Daochen Zha, Ulisses Braga-Neto, Xia Hu year: 2023 URL: https://doi.org/10.48550/arXiv.2205.13748 Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZla8gKwrbEVbpOVfBQg?e=5kcaTy –-","category":"page"},{"location":"References/@Yu2022a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Yu2022a/","page":"-","title":"-","text":"title: Gradient-enhanced physics-informed neural networks for forward and inverse PDE problems authors: Jeremy Yu, Lu Lu, Xuhui Meng, George Em Karniadakis year: 2022 URL: https://doi.org/10.48550/arXiv.2111.02801 Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZla8fqTeJApcwO8Ng?e=lpsaxB –-","category":"page"},{"location":"References/@Wurth2023a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Wurth2023a/","page":"-","title":"-","text":"title: Physics-informed neural networks for data-free surrogate modelling and engineering optimization – An example from composite manufacturing authors: Tobias Würth, Constantin Krauß, Clemens Zimmerling, Luise Kärger year: 2023 URL: https://doi.org/10.5445/IR/1000159290 Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZla5XEQtEiYnlp5ggtA?e=6TW8va –-","category":"page"},{"location":"References/@Wurth2023a/","page":"-","title":"-","text":"PINNs are alternative to SBO methods\nReference 6: one NN per output\nUsed same weight for all losses (domain, B.C., I.C.)\nNNs provide automatic jacobian and hessian evaluations, what can be used for great benefit of optimization algorithms\nImplemented in SciANN [[@Haghighat2021sciann]] wrapper to [[@Tensorflow2015Whitepaper]]\nSolves the diffusion equation\nKamal-Malkin model can be seem as a more general parametrization as JMKA rightarrow maybe useful in cement hydration modeling?\nInteresting to write a tutorial about!","category":"page"},{"location":"References/#References","page":"References","title":"References","text":"","category":"section"},{"location":"References/","page":"References","title":"References","text":"D. J. Gunn. Transfer of heat or mass to particles in fixed and fluidised beds. International Journal of Heat and Mass Transfer 21, 467–476 (1978).\n\n\n\nH. Kramers and P. Croockewit. The passage of granular solids through inclined rotary kilns. Chemical Engineering Science 1, 259–265 (1952).\n\n\n\nW. L. Grosshandler. Radcal – a narrow-band model for radiation calculations in a combustion environment (National Institute of Standards and Technology, 1993).\n\n\n\nJ. P. Gorog, J. K. Brimacombe and T. N. Adams. Radiative heat transfer in rotary kilns. Metallurgical Transactions B 12, 55–70 (1981).\n\n\n\nW. C. Tam and W. W. Yuen. OpenSC: an open-source calculation tool for combustion mixture emissivity/absorptivity (National Institute of Standards and Technology, 2019).\n\n\n\nB. E. Launder and D. B. Spalding. The numerical computation of turbulent flows. Computer Methods in Applied Mechanics and Engineering 3, 269–289 (1974).\n\n\n\nD. Gidaspow. Multiphase flow and fluidization: continuum and kinetic theory descriptions with applications (Academic Press, 1994).\n\n\n\nJ. P. Du Plessis and J. H. Masliyah. Mathematical modelling of flow through consolidated isotropic porous media. Transport in Porous Media 3, 145–161 (1988).\n\n\n\nA. B. Liu, D. Mather and R. D. Reitz. Modeling the Effects of Drop Drag and Breakup on Fuel Sprays. In: SAE Technical Paper Series, ANNUAL (SAE International, Mar 1993).\n\n\n\nA. Haider and O. Levenspiel. Drag coefficient and terminal velocity of spherical and nonspherical particles. Powder Technology 58, 63–70 (1989).\n\n\n\nB. Peña and C. Pérez-García. Stability of Turing patterns in the Brusselator model. Physical Review E 64, 056213 (2001).\n\n\n\nW. Sweldens. The Lifting Scheme: A Construction of Second Generation Wavelets. SIAM Journal on Mathematical Analysis 29, 511–546 (1998).\n\n\n\nJ. Jeong and F. Hussain. On the identification of a vortex. Journal of Fluid Mechanics 285, 69–94 (1995).\n\n\n\nC. Balaji. Essentials of radiation heat transfer (Wiley, Chichester, 2014).\n\n\n\nP. J. O'Rourke and D. M. Snider. An improved collision damping time for MP-PIC calculations of dense particle flows with applications to polydisperse sedimenting beds and colliding particle jets. Chemical Engineering Science 65, 6014–6028 (2010).\n\n\n\nW. Ranz and W. Marshall. Evaporation from drops. Chemical Engineering Progress 48, 141–146 (1952).\n\n\n\nA. Aissa, M. Abdelouahab, A. Noureddine, M. Elganaoui and B. Pateyron. Ranz and Marshall correlations limits on heat flow between a sphere and its surrounding gas at high temperature. Thermal Science 19, 1521–1528 (2015).\n\n\n\nB. Zuo, A. M. Gomes and C. J. Rutland. Modelling superheated fuel sprays and vaproization. International Journal of Engine Research 1, 321–336 (2000).\n\n\n\n","category":"page"},{"location":"References/@Cuomo2022a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Cuomo2022a/","page":"-","title":"-","text":"title: \"Scientific machine learning through physics-informed neural networks: Where we are and what's next\" authors: Salvatore Cuomo, Vincenzo Schiano di Cola, Fabio Giampaolo, Gianluigi Rozza, Maziar Raissi, Francesco Piccialli year: 2022 DOI: https://doi.org/10.48550/arXiv.2201.05624 –-","category":"page"},{"location":"References/@Nowruzi2014/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Nowruzi2014/","page":"-","title":"-","text":"title: Numerical simulation of non-evaporating and non-reacting heavy fuel oil injection spray in medium speed engines using OpenFOAM authors: Hashem Nowruzi, Parviz Ghadimi, Mehdi Yousefifard, Mohammad A. Feiz Chekab year: 2014 URL: https://doi.org/10.14810/ijmech.2014.3206 Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZlbEf-L95SgshO8_Nhg?e=jKpxyO –-","category":"page"},{"location":"References/@Sanyal2022a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Sanyal2022a/","page":"-","title":"-","text":"title: \"RAMP-Net: A robust adaptive MPC for quadrotors via physics-informed neural network\" authors: Sourav Sanyal, Kaushik Roy year: 2022 URL: https://doi.org/10.48550/arXiv.2209.09025 –-","category":"page"},{"location":"Teaching/Basilisk/Documentation/#Built-in-solvers","page":"-","title":"Built-in solvers","text":"","category":"section"},{"location":"Teaching/Basilisk/Documentation/","page":"-","title":"-","text":"Basic component solvers:","category":"page"},{"location":"Teaching/Basilisk/Documentation/","page":"-","title":"-","text":"advection.h\ndiffusion.h\npoisson.h","category":"page"},{"location":"Teaching/Basilisk/Documentation/","page":"-","title":"-","text":"It is upon these that the Navier-Stokes equation can be assembled in:","category":"page"},{"location":"Teaching/Basilisk/Documentation/","page":"-","title":"-","text":"Header Description\nnavier-stokes/stream.h Solves a 2D incompressible, constant density, constant viscosity Navier-Stokes equation formulated in the vorticity omega. This is and advection-diffusion equation solved with a flux-based advection scheme in advection.h. Given its form, the stream function psi is solver through the poisson.h solver.\nnavier-stokes/centered.h \nnavier-stokes/perfs.h Not a solver by itself, it supports other headers under the Navier-Stokes family to follow performance during solution.","category":"page"},{"location":"Teaching/Basilisk/Documentation/","page":"-","title":"-","text":"Other equations:","category":"page"},{"location":"Teaching/Basilisk/Documentation/","page":"-","title":"-","text":"saint-venant.h","category":"page"},{"location":"Teaching/Basilisk/Documentation/#Headers-files","page":"-","title":"Headers files","text":"","category":"section"},{"location":"Teaching/Basilisk/Documentation/","page":"-","title":"-","text":"File Usage\ncommon.h \ndistance.h \nembed.h Allow the creation of general shape boundary conditions inside the domain.\nfractions.h \nlambda2.h Detection of vortex using the criteria by [[@Jeong1995a]] [13]\nrun.h A generic time loop which executes until termination (to be avoided!).\ntracer.h Provides an event to integrate the advection of tracer elements.\nutils.h \nview.h ","category":"page"},{"location":"Teaching/Basilisk/Documentation/","page":"-","title":"-","text":"File Usage\ngrid/cartesian.h \ngrid/multigrid.h \ngrid/octree.h \ngrid/bitree.h ","category":"page"},{"location":"Teaching/Basilisk/Documentation/#Data-types","page":"-","title":"Data types","text":"","category":"section"},{"location":"Teaching/Basilisk/Documentation/","page":"-","title":"-","text":"scalar\nvector\nface\nmsgstats convergence statistics of (multigrid?) solver.","category":"page"},{"location":"Teaching/Basilisk/Documentation/#Functions","page":"-","title":"Functions","text":"","category":"section"},{"location":"Teaching/Basilisk/Documentation/","page":"-","title":"-","text":"Function Definition Uses\norigin common.h Set the origin of cartesian system.\ninit_grid grid/ (overloaded) Level of refinement (size) of initial grid.\nsize \nperiodic Set periodic boundary conditions.\nstatsf utils.h Retrieve statistics of a scalar field.\noutput_ppm output.h Generate a image and video output.\nadapt_wavelet grid/tree-common.h Adaptive grid refinement routine.\nrun run.h (overloaded) Generic time loop for events execution.\nnoise Generate random noise in -1 1.\nswap Swap values of two scalar arrays.\ninput_stl distance.h Read an STL file as an array of triplets.\nbounding_box distance.h Determines the bounding box of inputs (segments or triangles).\ndistance distance.h Distance to coordinate.\nview draw.h Setup of viewing (camera) parameters.\nisosurface draw.h Displays an isosurface of a field.\ndraw_vof draw.h Display VOF reconstructed interfaces.\nclear draw.h Removes previous objects.\nsave view.h Dumps image(s) to file.\nrefine_biquadradic grid/multigrid-common.h \nwavelet grid/multigrid-common.h \ninverse_wavelet grid/multigrid-common.h \nboundary_level \nunrefine \nvorticity utils.h Computes the vorticity from a velocity field.","category":"page"},{"location":"References/@Wang2022a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Wang2022a/","page":"-","title":"-","text":"title: Respecting causality is all you need for training physics-informed neural networks authors: Sifan Wang, Shyam Sankaran, Paris Perdikaris year: 2022 URL: https://doi.org/10.48550/arXiv.2203.07404 Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZla8hHROyjqNuK7otnA?e=U8kabk –-","category":"page"},{"location":"References/@Wang2022a/","page":"-","title":"-","text":"Supporting materials at GitHub.","category":"page"},{"location":"Cantera/#Cantera","page":"Cantera","title":"Cantera","text":"","category":"section"},{"location":"Cantera/","page":"Cantera","title":"Cantera","text":"This page documents the wrapper written around the C-API of Cantera. The status of development is documented here. Its goal is not to mimic the original API or provide an interface equivalent to the Python package, but something in line with the functioning of the parent toolbox.","category":"page"},{"location":"Cantera/#Status-of-Cantera-wrapper","page":"Cantera","title":"Status of Cantera wrapper","text":"","category":"section"},{"location":"Cantera/","page":"Cantera","title":"Cantera","text":"This is an experimental interface to Cantera library based on its C-API version 3.0. This interface is at its early days and has developped for Julia >= 1.9.0 under Windows 10/11. When it is stable enough it will be published as a package and tested under other platforms.","category":"page"},{"location":"Cantera/#Useful-links","page":"Cantera","title":"Useful links","text":"","category":"section"},{"location":"Cantera/","page":"Cantera","title":"Cantera","text":"Source files\nHeader files","category":"page"},{"location":"Cantera/#API-of-ct.h","page":"Cantera","title":"API of ct.h","text":"","category":"section"},{"location":"Cantera/","page":"Cantera","title":"Cantera","text":"Documentation here.","category":"page"},{"location":"Cantera/","page":"Cantera","title":"Cantera","text":"Status Header Function Module\nTested ct.h ct_appdelete inlined\nStruct ct.h soln_newSolution wrapped\n ct.h soln_newInterface waitlist\nTested ct.h soln_del inlined\nTested ct.h soln_name inlined\nStruct ct.h soln_thermo inlined\nStruct ct.h soln_kinetics inlined\nStruct ct.h soln_transport inlined\nTested ct.h soln_setTransportModel wrapped\nTested ct.h soln_nAdjacent inlined\n ct.h soln_adjacent waitlist\nTested ct.h thermo_newFromFile wrapped\nTested ct.h thermo_del inlined\nStruct ct.h thermo_nElements inlined\nStruct ct.h thermo_nSpecies inlined\nTested ct.h thermo_temperature inlined\nStruct ct.h thermo_setTemperature inlined\nTested ct.h thermo_density inlined\nTested ct.h thermo_setDensity inlined\nTested ct.h thermo_molarDensity inlined\nTested ct.h thermo_setMolarDensity inlined\nTested ct.h thermo_meanMolecularWeight inlined\nTested ct.h thermo_moleFraction inlined\nTested ct.h thermo_massFraction inlined\nStruct ct.h thermo_getMoleFractions inlined\nTested ct.h thermo_getMassFractions inlined\nStruct ct.h thermo_setMoleFractions inlined\nTested ct.h thermo_setMassFractions inlined\n ct.h thermo_setMoleFractionsByName \n ct.h thermo_setMassFractionsByName \n ct.h thermo_getAtomicWeights \n ct.h thermo_getMolecularWeights \n ct.h thermo_getCharges \n ct.h thermo_getElementName \n ct.h thermo_getSpeciesName \n ct.h thermo_getName \n ct.h thermo_setName \n ct.h thermo_elementIndex \n ct.h thermo_speciesIndex \n ct.h thermo_report \nTested ct.h thermo_print \n ct.h thermo_nAtoms \n ct.h thermo_addElement \n ct.h thermo_getEosType \nTo test ct.h thermo_refPressure inlined\nTo test ct.h thermo_minTemp inlined\nTo test ct.h thermo_maxTemp inlined\nTo test ct.h thermoenthalpymole inlined\nTo test ct.h thermointEnergymole inlined\nTo test ct.h thermoentropymole inlined\nTo test ct.h thermogibbsmole inlined\nTo test ct.h thermocpmole inlined\nTo test ct.h thermocvmole inlined\nTo test ct.h thermo_pressure inlined\nStruct ct.h thermo_setPressure inlined\nTo test ct.h thermoenthalpymass inlined\nTo test ct.h thermointEnergymass inlined\nTo test ct.h thermoentropymass inlined\nTo test ct.h thermogibbsmass inlined\nTo test ct.h thermocpmass inlined\nTo test ct.h thermocvmass inlined\nTo test ct.h thermo_electricPotential inlined\nTo test ct.h thermo_thermalExpansionCoeff inlined\nTo test ct.h thermo_isothermalCompressibility inlined\n ct.h thermo_chemPotentials \n ct.h thermogetEnthalpiesRT \n ct.h thermogetEntropiesR \n ct.h thermogetCpR \n ct.h thermo_setElectricPotential \n ct.h thermosetTP \n ct.h thermosetTD \n ct.h thermosetRP \n ct.h thermosetDP \n ct.h thermosetHP \n ct.h thermosetUV \n ct.h thermosetSV \n ct.h thermosetSP \n ct.h thermosetST \n ct.h thermosetTV \n ct.h thermosetPV \n ct.h thermosetUP \n ct.h thermosetVH \n ct.h thermosetTH \n ct.h thermosetSH \nTested ct.h thermo_equilibrate \nTo test ct.h thermo_critTemperature inlined\nTo test ct.h thermo_critPressure inlined\nTo test ct.h thermo_critDensity inlined\nTo test ct.h thermo_vaporFraction inlined\n ct.h thermo_satTemperature \n ct.h thermo_satPressure \n ct.h thermosetStatePsat \n ct.h thermosetStateTsat \n ct.h kin_newFromFile \nTo test ct.h kin_del inlined\nTo test ct.h kin_nSpecies inlined\nTo test ct.h kin_nReactions inlined\nTo test ct.h kin_nPhases inlined\n ct.h kin_phaseIndex \nTo test ct.h kin_reactionPhaseIndex inlined\n ct.h kin_reactantStoichCoeff \n ct.h kin_productStoichCoeff \n ct.h kin_getReactionType \n ct.h kin_getFwdRatesOfProgress \n ct.h kin_getRevRatesOfProgress \n ct.h kin_getNetRatesOfProgress \n ct.h kin_getEquilibriumConstants \n ct.h kin_getFwdRateConstants \n ct.h kin_getRevRateConstants \n ct.h kin_getDelta \n ct.h kin_getCreationRates \n ct.h kin_getDestructionRates \n ct.h kin_getNetProductionRates \n ct.h kin_getSourceTerms \nTo test ct.h kin_multiplier inlined\n ct.h kin_getReactionString \n ct.h kin_setMultiplier \nTo test ct.h kin_isReversible inlined\n ct.h kin_getType \nTo test ct.h kin_start inlined\n ct.h kin_speciesIndex \nTo test ct.h kin_advanceCoverages inlined\nTo test ct.h kin_phase inlined\nTo test ct.h trans_newDefault inlined\n ct.h trans_new \nTo test ct.h trans_del inlined\nTo test ct.h trans_transportModel inlined\nTo test ct.h trans_viscosity inlined\nTo test ct.h trans_electricalConductivity inlined\n ct.h trans_thermalConductivity \n ct.h trans_getThermalDiffCoeffs \n ct.h trans_getMixDiffCoeffs \n ct.h trans_getBinDiffCoeffs \n ct.h trans_getMultiDiffCoeffs \n ct.h trans_setParameters \n ct.h trans_getMolarFluxes \n ct.h trans_getMassFluxes \n ct.h ct_getCanteraError \n ct.h ct_setLogWriter \n ct.h ct_setLogCallback \n ct.h ct_addCanteraDirectory \n ct.h ct_getDataDirectories \n ct.h ct_getCanteraVersion \n ct.h ct_getGitCommit \nTested ct.h ctsuppressthermo_warnings inlined\nTested ct.h ctuselegacyrateconstants inlined\nTested ct.h ct_clearStorage inlined\nTested ct.h ct_resetStorage inlined","category":"page"},{"location":"Cantera/#API-of-ctfunc.h","page":"Cantera","title":"API of ctfunc.h","text":"","category":"section"},{"location":"Cantera/","page":"Cantera","title":"Cantera","text":"Documentation here.","category":"page"},{"location":"Cantera/","page":"Cantera","title":"Cantera","text":"Status Header Function Module\n ctfunc.h func_new \n ctfunc.h funcnewbasic \n ctfunc.h funcnewadvanced \n ctfunc.h funcnewcompound \n ctfunc.h funcnewmodified \nTo test ctfunc.h func_del inlined\n ctfunc.h func_type \nTo test ctfunc.h func_value inlined\nTo test ctfunc.h func_derivative inlined\nTo test ctfunc.h func_duplicate inlined\n ctfunc.h func_write \nTo test ctfunc.h ct_clearFunc inlined","category":"page"},{"location":"Cantera/#API-of-ctmultiphase.h","page":"Cantera","title":"API of ctmultiphase.h","text":"","category":"section"},{"location":"Cantera/","page":"Cantera","title":"Cantera","text":"Documentation here.","category":"page"},{"location":"Cantera/","page":"Cantera","title":"Cantera","text":"Status Header Function Module\nTo test ctmultiphase.h mix_new inlined\nTo test ctmultiphase.h mix_del inlined\nTo test ctmultiphase.h ct_clearMix inlined\n ctmultiphase.h mix_addPhase \nTo test ctmultiphase.h mix_init inlined\nTo test ctmultiphase.h mix_updatePhases inlined\nTo test ctmultiphase.h mix_nElements inlined\n ctmultiphase.h mix_elementIndex \n ctmultiphase.h mix_speciesIndex \nTo test ctmultiphase.h mix_nSpecies inlined\nTo test ctmultiphase.h mix_setTemperature inlined\nTo test ctmultiphase.h mix_temperature inlined\nTo test ctmultiphase.h mix_minTemp inlined\nTo test ctmultiphase.h mix_maxTemp inlined\nTo test ctmultiphase.h mix_charge inlined\nTo test ctmultiphase.h mix_phaseCharge inlined\nTo test ctmultiphase.h mix_setPressure inlined\nTo test ctmultiphase.h mix_pressure inlined\nTo test ctmultiphase.h mix_nAtoms inlined\nTo test ctmultiphase.h mix_nPhases inlined\nTo test ctmultiphase.h mix_phaseMoles inlined\n ctmultiphase.h mix_setPhaseMoles \n ctmultiphase.h mix_setMoles \n ctmultiphase.h mix_setMolesByName \nTo test ctmultiphase.h mix_speciesMoles inlined\nTo test ctmultiphase.h mix_elementMoles inlined\n ctmultiphase.h mix_equilibrate \n ctmultiphase.h mix_getChemPotentials \nTo test ctmultiphase.h mix_enthalpy inlined\nTo test ctmultiphase.h mix_entropy inlined\nTo test ctmultiphase.h mix_gibbs inlined\nTo test ctmultiphase.h mix_cp inlined\nTo test ctmultiphase.h mix_volume inlined\nTo test ctmultiphase.h mix_speciesPhaseIndex inlined\nTo test ctmultiphase.h mix_moleFraction inlined","category":"page"},{"location":"Cantera/#API-of-ctonedim.h","page":"Cantera","title":"API of ctonedim.h","text":"","category":"section"},{"location":"Cantera/","page":"Cantera","title":"Cantera","text":"Documentation here.","category":"page"},{"location":"Cantera/","page":"Cantera","title":"Cantera","text":"Status Header Function Module\nTo test ctonedim.h ct_clearOneDim inlined\n ctonedim.h domain_new \nTo test ctonedim.h domain_del inlined\nTo test ctonedim.h domain_type inlined\n ctonedim.h domain_type3 \nTo test ctonedim.h domain_index inlined\nTo test ctonedim.h domain_nComponents inlined\nTo test ctonedim.h domain_nPoints inlined\n ctonedim.h domain_componentName \n ctonedim.h domain_componentIndex \n ctonedim.h domain_setBounds \nTo test ctonedim.h domain_lowerBound inlined\nTo test ctonedim.h domain_upperBound inlined\n ctonedim.h domain_setSteadyTolerances \n ctonedim.h domain_setTransientTolerances \nTo test ctonedim.h domain_rtol inlined\nTo test ctonedim.h domain_atol inlined\n ctonedim.h domain_setupGrid \n ctonedim.h domain_setID \nTo test ctonedim.h domain_grid inlined\nTo test ctonedim.h bdry_setMdot inlined\nTo test ctonedim.h bdry_setTemperature inlined\nTo test ctonedim.h bdry_setSpreadRate inlined\n ctonedim.h bdry_setMoleFractions \nTo test ctonedim.h bdry_temperature inlined\nTo test ctonedim.h bdry_spreadRate inlined\nTo test ctonedim.h bdry_massFraction inlined\nTo test ctonedim.h bdry_mdot inlined\nTo test ctonedim.h reactingsurf_setkineticsmgr inlined\nTo test ctonedim.h reactingsurf_enableCoverageEqs inlined\nTo test ctonedim.h inlet_new inlined\nTo test ctonedim.h outlet_new inlined\nTo test ctonedim.h outletres_new inlined\nTo test ctonedim.h symm_new inlined\nTo test ctonedim.h surf_new inlined\nTo test ctonedim.h reactingsurf_new inlined\nTo test ctonedim.h inlet_setSpreadRate inlined\n ctonedim.h stflow_new \nTo test ctonedim.h stflow_setTransport inlined\nTo test ctonedim.h stflow_enableSoret inlined\nTo test ctonedim.h stflow_setPressure inlined\nTo test ctonedim.h stflow_pressure inlined\n ctonedim.h stflow_setFixedTempProfile \nTo test ctonedim.h stflow_solveEnergyEqn inlined\n ctonedim.h sim1D_new \nTo test ctonedim.h sim1D_del inlined\n ctonedim.h sim1D_setValue \n ctonedim.h sim1D_setProfile \n ctonedim.h sim1D_setFlatProfile \n ctonedim.h sim1D_show \n ctonedim.h sim1D_showSolution \n ctonedim.h sim1D_setTimeStep \nTo test ctonedim.h sim1D_getInitialSoln inlined\n ctonedim.h sim1D_solve \nTo test ctonedim.h sim1D_refine inlined\n ctonedim.h sim1D_setRefineCriteria \n ctonedim.h sim1D_setGridMin \n ctonedim.h sim1D_save \n ctonedim.h sim1D_restore \nTo test ctonedim.h sim1D_writeStats inlined\n ctonedim.h sim1D_domainIndex \n ctonedim.h sim1D_value \n ctonedim.h sim1D_workValue \nTo test ctonedim.h sim1D_eval inlined\nTo test ctonedim.h sim1D_setMaxJacAge inlined\nTo test ctonedim.h sim1D_setFixedTemperature inlined","category":"page"},{"location":"Cantera/#API-of-ctreactor.h","page":"Cantera","title":"API of ctreactor.h","text":"","category":"section"},{"location":"Cantera/","page":"Cantera","title":"Cantera","text":"Documentation here.","category":"page"},{"location":"Cantera/","page":"Cantera","title":"Cantera","text":"Status Header Function Module\n ctreactor.h reactor_new \nTo test ctreactor.h reactor_del inlined\nTo test ctreactor.h reactor_setInitialVolume inlined\nTo test ctreactor.h reactor_setChemistry inlined\nTo test ctreactor.h reactor_setEnergy inlined\nTo test ctreactor.h reactor_setThermoMgr inlined\nTo test ctreactor.h reactor_setKineticsMgr inlined\nTo test ctreactor.h reactor_insert inlined\nTo test ctreactor.h reactor_mass inlined\nTo test ctreactor.h reactor_volume inlined\nTo test ctreactor.h reactor_density inlined\nTo test ctreactor.h reactor_temperature inlined\nTo test ctreactor.h reactorenthalpymass inlined\nTo test ctreactor.h reactorintEnergymass inlined\nTo test ctreactor.h reactor_pressure inlined\nTo test ctreactor.h reactor_massFraction inlined\nTo test ctreactor.h reactor_nSensParams inlined\nTo test ctreactor.h reactor_addSensitivityReaction inlined\nTo test ctreactor.h flowReactor_setMassFlowRate inlined\nTo test ctreactor.h reactornet_new inlined\nTo test ctreactor.h reactornet_del inlined\nTo test ctreactor.h reactornet_setInitialTime inlined\nTo test ctreactor.h reactornet_setMaxTimeStep inlined\nTo test ctreactor.h reactornet_setTolerances inlined\nTo test ctreactor.h reactornet_setSensitivityTolerances inlined\nTo test ctreactor.h reactornet_addreactor inlined\nTo test ctreactor.h reactornet_advance inlined\nTo test ctreactor.h reactornet_step inlined\nTo test ctreactor.h reactornet_time inlined\nTo test ctreactor.h reactornet_rtol inlined\nTo test ctreactor.h reactornet_atol inlined\n ctreactor.h reactornet_sensitivity \n ctreactor.h flowdev_new \nTo test ctreactor.h flowdev_del inlined\nTo test ctreactor.h flowdev_install inlined\nTo test ctreactor.h flowdev_setMaster inlined\nTo test ctreactor.h flowdev_setPrimary inlined\nTo test ctreactor.h flowdev_massFlowRate inlined\nTo test ctreactor.h flowdev_setMassFlowCoeff inlined\nTo test ctreactor.h flowdev_setValveCoeff inlined\nTo test ctreactor.h flowdev_setPressureCoeff inlined\nTo test ctreactor.h flowdev_setPressureFunction inlined\nTo test ctreactor.h flowdev_setTimeFunction inlined\n ctreactor.h wall_new \nTo test ctreactor.h wall_del inlined\nTo test ctreactor.h wall_install inlined\nTo test ctreactor.h wall_vdot inlined\nTo test ctreactor.h wall_expansionRate inlined\nTo test ctreactor.h wall_Q inlined\nTo test ctreactor.h wall_heatRate inlined\nTo test ctreactor.h wall_area inlined\nTo test ctreactor.h wall_setArea inlined\nTo test ctreactor.h wall_setThermalResistance inlined\nTo test ctreactor.h wall_setHeatTransferCoeff inlined\nTo test ctreactor.h wall_setHeatFlux inlined\nTo test ctreactor.h wall_setExpansionRateCoeff inlined\nTo test ctreactor.h wall_setVelocity inlined\nTo test ctreactor.h wall_setEmissivity inlined\nTo test ctreactor.h wall_ready inlined\nTo test ctreactor.h reactorsurface_new inlined\nTo test ctreactor.h reactorsurface_del inlined\nTo test ctreactor.h reactorsurface_install inlined\nTo test ctreactor.h reactorsurface_setkinetics inlined\nTo test ctreactor.h reactorsurface_area inlined\nTo test ctreactor.h reactorsurface_setArea inlined\nTo test ctreactor.h reactorsurface_addSensitivityReaction inlined\nTo test ctreactor.h ct_clearReactors inlined","category":"page"},{"location":"Cantera/#API-of-ctrpath.h","page":"Cantera","title":"API of ctrpath.h","text":"","category":"section"},{"location":"Cantera/","page":"Cantera","title":"Cantera","text":"Documentation here.","category":"page"},{"location":"Cantera/","page":"Cantera","title":"Cantera","text":"Status Header Function Module\nTo test ctrpath.h rdiag_new inlined\nTo test ctrpath.h rdiag_del inlined\nTo test ctrpath.h rdiag_detailed inlined\nTo test ctrpath.h rdiag_brief inlined\nTo test ctrpath.h rdiag_setThreshold inlined\n ctrpath.h rdiag_setBoldColor \n ctrpath.h rdiag_setNormalColor \n ctrpath.h rdiag_setDashedColor \n ctrpath.h rdiag_setDotOptions \nTo test ctrpath.h rdiag_setBoldThreshold inlined\nTo test ctrpath.h rdiag_setNormalThreshold inlined\nTo test ctrpath.h rdiag_setLabelThreshold inlined\nTo test ctrpath.h rdiag_setScale inlined\nTo test ctrpath.h rdiag_setFlowType inlined\nTo test ctrpath.h rdiag_setArrowWidth inlined\n ctrpath.h rdiag_setTitle \n ctrpath.h rdiag_write \nTo test ctrpath.h rdiag_add inlined\n ctrpath.h rdiag_findMajor \n ctrpath.h rdiag_setFont \nTo test ctrpath.h rdiag_displayOnly inlined\nTo test ctrpath.h rbuild_new inlined\nTo test ctrpath.h rbuild_del inlined\n ctrpath.h rbuild_init \n ctrpath.h rbuild_build \nTo test ctrpath.h ct_clearReactionPath inlined","category":"page"},{"location":"Cantera/#API-of-ctsurf.h","page":"Cantera","title":"API of ctsurf.h","text":"","category":"section"},{"location":"Cantera/","page":"Cantera","title":"Cantera","text":"Documentation here.","category":"page"},{"location":"Cantera/","page":"Cantera","title":"Cantera","text":"Status Header Function Module\n ctsurf.h surf_setCoverages \n ctsurf.h surf_getCoverages \n ctsurf.h surf_setConcentrations \n ctsurf.h surf_getConcentrations \nTo test ctsurf.h surf_setSiteDensity inlined\nTo test ctsurf.h surf_siteDensity inlined\n ctsurf.h surf_setCoveragesByName ","category":"page"},{"location":"DryGranular/kramers/#Kramers'-model","page":"Kramers' model","title":"Kramers' model","text":"","category":"section"},{"location":"DryGranular/kramers/","page":"Kramers' model","title":"Kramers' model","text":"using CairoMakie\nusing CSV\nusing DataFrames\nusing Latexify\nusing Printf\nusing DryGranular\n\n\"Partial data from Kramers (1952) Table 3\"\nconst DATA_TABLE3 = \"\"\"\\\nρ,γ,tan(β),n,ṁ,prod_dimless,η̄ᵣ,hold_real\n1480.0,36.0,0.0094,0.059,5.15e-03,18.3,0.111,8.10\n1480.0,36.0,0.0094,0.090,2.68e-03,6.25,0.054,5.00\n1480.0,36.0,0.0094,0.195,1.32e-02,14.2,0.088,7.75\n1480.0,36.0,0.0094,0.232,7.24e-03,6.55,0.043,3.85\n1480.0,36.0,0.0100,0.040,6.38e-03,29.7,0.169,13.3\n1480.0,36.0,0.0100,0.040,5.00e-03,23.2,0.144,11.2\n1480.0,36.0,0.0100,0.069,9.20e-03,24.8,0.150,10.6\n1480.0,36.0,0.0100,0.069,6.53e-03,17.6,0.113,8.50\n1480.0,36.0,0.0100,0.106,1.50e-02,27.8,0.162,12.2\n1480.0,36.0,0.0100,0.159,1.20e-02,14.0,0.092,7.49\n1480.0,36.0,0.0100,0.238,1.55e-02,12.1,0.083,7.48\n1480.0,36.0,0.0100,0.238,1.19e-02,9.22,0.068,6.13\n\"\"\"\n\n\"Compares approximate analytical to numerical solution.\"\nfunction solvekiln(; L, D, Φ, ω, β, γ, d, show = true)\n model = RotaryKilnBedSolution(;\n model = SymbolicLinearKramersModel(),\n L = L,\n R = D / 2.0,\n Φ = Φ / 3600.0,\n ω = ω / 60.0,\n β = deg2rad(β),\n γ = deg2rad(γ),\n d = d / 1000.0\n )\n\n optim = kramersnlapprox(;\n z = model.z,\n R = D / 2.0,\n Φ = Φ / 3600.0,\n ω = ω / 60.0,\n β = deg2rad(β),\n γ = deg2rad(γ),\n d = d / 1000.0\n )\n\n f = nothing\n ax = nothing\n\n if show\n f = Figure()\n ax = Axis(f[1, 1])\n\n lines!(ax, 100model.z/L, 100model.h, linewidth = 3, label = \"Numerical\")\n lines!(ax, 100optim.z/L, 100optim.h, linewidth = 3, label = \"Analytical\")\n\n a = @sprintf(\"%.1f\", model.ηₘ)\n b = @sprintf(\"%.1f\", optim.ηₘ)\n title = \"Loading: $(a)% (numerical) | $(b)% (analytical)\"\n\n ax.title = title\n ax.xlabel = \"Coordinate [%]\"\n ax.ylabel = \"Bed height [cm]\"\n ax.xticks = 0.0:20.0:100.0\n xlims!(ax, extrema(ax.xticks.val))\n end\n\n return model, optim, f, ax\nend\n\n\"Reference case for alumina kiln testing.\"\nfunction aluminakiln(ṁ, ω; show = false)\n # Density of bed [kg/m³]\n ρ = 800.0\n L = 34.0\n D = 1.5\n β = atan(0.025)\n\n model, optim, f, ax = solvekiln(\n L = L,\n D = D,\n Φ = (1000// 24) * ṁ / ρ,\n ω = ω,\n β = rad2deg(β),\n γ = 33.0,\n d = 0.050,\n show = show\n )\n\n τₚ = perrayresidence(L, ω, D, β)\n\n return model, optim, f, ax, τₚ\nend\n\n\"Run `aluminakiln` against some known conditions.\"\nfunction scanaluminakiln()\n ṁlist = [33.6, 43.2]\n ωlist = [0.85, 1.20]\n\n df = DataFrame(\n ṁ = Float64[],\n ω = Float64[],\n η̄ = Float64[],\n τᵢ = Float64[],\n τₚ = Float64[]\n )\n\n for ṁ ∈ ṁlist, ω ∈ ωlist\n model, _, _, _, τ = aluminakiln(ṁ, ω, show = false)\n η̄ = round(model.ηₘ, digits = 0)\n τᵢ = round(model.τ / 60.0, digits = 0)\n τₚ = round(τ, digits = 0)\n push!(df, [ṁ ω η̄ τᵢ τₚ])\n end\n\n return df\nend\n\nlet\n # @info(\"Solution of reference case\")\n\n in1_to_m1(v) = 0.0254 * v\n ft1_to_m1(v) = in1_to_m1(12.0) * v\n ft3_to_m3(v) = ft1_to_m1(1.0)^3 * v\n\n # Kiln length [m]\n L = ft1_to_m1(45.0)\n\n # Kiln diameter [m]\n D = 2 * ft1_to_m1(3.1)\n\n # Volume flow rate [m³/h]\n Φ = ft3_to_m3(6.1) * 60\n\n # Rotation rate (+0.0005) [rev/min]\n ω = 0.0505 * 60.0\n\n # Kiln slope (0.5in/ft) [°]\n β = rad2deg(atan(0.5 / 12))\n\n # Repose angle [°]\n γ = 45.0\n\n # Particle size [mm]\n d = 0.050\n\n # Conversions to match model inputs.\n R = D / 2.0\n Φ = Φ / 3600.0\n ω = ω / 60.0\n β = deg2rad(β)\n γ = deg2rad(γ)\n d = d / 1000.0\n\n # Create problem container.\n kramers = RotaryKilnBedSolution(;\n model = SymbolicLinearKramersModel(),\n L = L,\n R = R,\n Φ = Φ,\n ω = ω,\n β = β,\n γ = γ,\n d = d\n )\n\n optim = kramersnlapprox(;\n z = kramers.z,\n R = R,\n Φ = Φ,\n ω = ω,\n β = β,\n γ = γ,\n d = d\n )\n\n global kramers_NΦ = dimlessNΦ(R, β, ω, Φ, γ)\n global kramers_Nₖ = dimlessNₖ(L, R, β, γ)\n global kramers_η̄ₛ = sullivansηₘ(R, β, ω, Φ, γ)\n global kramers_ref = kramers\n global optim_ref = optim\n\n global RESULTS_TABLE = DataFrame(\n Quantity = [\n \"NΦ\",\n \"Nₖ\",\n \"η̄ᵣ\",\n \"η̄ᵢ\",\n ],\n Reference = [\n \"1.15\",\n \"1.17\",\n \"5.65\",\n @sprintf(\"%.2f\", optim_ref.ηₘ)\n ],\n Computed = [\n @sprintf(\"%.2f\", kramers_NΦ),\n @sprintf(\"%.2f\", kramers_Nₖ),\n @sprintf(\"%.2f\", kramers_η̄ₛ),\n @sprintf(\"%.2f\", kramers_ref.ηₘ)\n ]\n )\nend\n\nconst TABLE3 = let\n # @info(\"Verification of *Table 3*\")\n\n Dₖ = 0.197\n Lₖ = 1.780\n dₖ = 0.0012\n\n table3 = DataFrame(CSV.File(IOBuffer(DATA_TABLE3)))\n table3[!, \"η̄ᵢ\"] = zeros(length(table3[!, \"η̄ᵣ\"]))\n table3[!, \"η̄ᵣ\"] *= 100\n\n model = SymbolicLinearKramersModel()\n\n for (i, row) in enumerate(eachrow(table3))\n Φ = 3600.0 * row[\"ṁ\"] / row[\"ρ\"]\n ω = row[\"n\"] * 60.0\n β = rad2deg(atan(row[\"tan(β)\"]))\n γ = row[\"γ\"]\n\n kramers = RotaryKilnBedSolution(;\n model = model,\n L = Lₖ,\n R = Dₖ / 2.0,\n Φ = Φ / 3600.0,\n ω = ω / 60.0,\n β = deg2rad(β),\n γ = deg2rad(γ),\n d = dₖ / 1000.0\n )\n\n table3[i, \"η̄ᵢ\"] = round(kramers.ηₘ, digits = 1)\n end\n\n exclude = [\"ρ\", \"γ\", \"prod_dimless\", \"hold_real\"]\n select(table3, Not(exclude))\nend\n\nconst DIMLESSPLOT = let\n @info(\"Dimensionless profiles solution\")\n\n ρ = 1480.0\n L = 20.0\n D = 0.197\n Φ = 5.15e-03 / ρ * 3600\n ω = 0.059 * 60\n β = rad2deg(atan(0.0094))\n γ = 36.0\n\n # Conversions to match model inputs.\n R = D / 2.0\n Φ = Φ / 3600.0\n ω = ω / 60.0\n β = deg2rad(β)\n γ = deg2rad(γ)\n\n # Things held constant in loop.\n NΦ = dimlessNΦ(R, β, ω, Φ, γ)\n Nₖ = dimlessNₖ(L, R, β, γ)\n model = SymbolicLinearKramersModel()\n\n f = Figure()\n ax = Axis(f[1, 1])\n\n for d in [0.05, 0.10, 0.15, 0.193, 0.25]\n kramers = RotaryKilnBedSolution(;\n model = model,\n L = L,\n R = R,\n Φ = Φ,\n ω = ω,\n β = β,\n γ = γ,\n d = d * R * NΦ\n )\n\n # Dimensionless axes.\n z = kramers.z\n h = kramers.h / (R * NΦ)\n z = @. (L - z) / L * 1 / (NΦ * Nₖ)\n z = @. z[1] - z\n\n label = @sprintf(\"%.3f\", d)\n lines!(ax, z, h; linewidth = 2, label = label)\n end\n\n ax.title = \"Dimensionless loading curves\"\n ax.xlabel = \"Coordinate\"\n ax.ylabel = \"Bed height\"\n ax.xticks.val = 0.0:0.1:0.5\n ax.yticks.val = 0.05:0.05:0.25\n xlims!(ax, extrema(ax.xticks.val))\n ylims!(ax, extrema(ax.yticks.val))\n axislegend(ax; position = :rb)\n\n f\nend","category":"page"},{"location":"DryGranular/kramers/#Sample-reference-case","page":"Kramers' model","title":"Sample reference case","text":"","category":"section"},{"location":"DryGranular/kramers/","page":"Kramers' model","title":"Kramers' model","text":"Here we make use of the current implementation to check if it correctly approximates the last example provided in reference paper from [2]. To minimize rounding errors causes by unit conversions, we provide the required functions to convert from imperial to international system in the solution process.","category":"page"},{"location":"DryGranular/kramers/","page":"Kramers' model","title":"Kramers' model","text":"The next table summarizes the results. It is seen that the dimensionless numbers are well approximated. It must be emphasized that the reference estimates η̄ᵣ by a graphical method – it was 1952 – and the current value is considered a good enough approximation. Additionally, the equation was not integrated numerically as done here, but engineering relationships were used in the approximation. That said, the proper loading to be considered in our days is η̄ᵢ.","category":"page"},{"location":"DryGranular/kramers/","page":"Kramers' model","title":"Kramers' model","text":"mdtable(RESULTS_TABLE, latex=false) # hide","category":"page"},{"location":"DryGranular/kramers/","page":"Kramers' model","title":"Kramers' model","text":"Note: the last value in column Reference above is not provided in Kramers' paper but computed from the approximate analytical solution provided by the authors. As we see here, it may get >20% error under some circumstances.","category":"page"},{"location":"DryGranular/kramers/#Verification-of-*Table-3*","page":"Kramers' model","title":"Verification of Table 3","text":"","category":"section"},{"location":"DryGranular/kramers/","page":"Kramers' model","title":"Kramers' model","text":"In the next cell we provide the kiln dimensions used by Kramers (1952) to experimentally validate the model. Some data from their Tab. 3 is then loaded and all rows are simulated with current model. Fractional hold-up seems to be well correlated at least to a few percent of the reference value.","category":"page"},{"location":"DryGranular/kramers/","page":"Kramers' model","title":"Kramers' model","text":"mdtable(TABLE3, latex=false) # hide","category":"page"},{"location":"DryGranular/kramers/#Dimensionless-profiles","page":"Kramers' model","title":"Dimensionless profiles","text":"","category":"section"},{"location":"DryGranular/kramers/","page":"Kramers' model","title":"Kramers' model","text":"Next step in validation is to check profiles in dimensionless format, as done by Kramers in their Fig. 3. Notice that here we used the numerical integration curves instead of the analytical approximation of profiles, so reproduction and consequences of results are not exactly the same.","category":"page"},{"location":"DryGranular/kramers/","page":"Kramers' model","title":"Kramers' model","text":"DIMLESSPLOT # hide","category":"page"},{"location":"DryGranular/kramers/#Comparison-with-analytical","page":"Kramers' model","title":"Comparison with analytical","text":"","category":"section"},{"location":"DryGranular/kramers/","page":"Kramers' model","title":"Kramers' model","text":"The final step in model validation is to compare the approximate analytical solution proposed by Kramers and the results of numerical integration. It is worth mentioning that numerical integration remains the recommended method because one does not need to verify the ranges of validity of analytical approximation for every use case.","category":"page"},{"location":"DryGranular/kramers/","page":"Kramers' model","title":"Kramers' model","text":"let # hide\n _, _, f, ax = solvekiln( # hide\n L = 10.0, # hide\n D = 1.0, # hide\n Φ = 1.0, # hide\n ω = 1.0, # hide\n β = 3.0, # hide\n γ = 45.0, # hide\n d = 0.001 # hide\n ) # hide\n # hide\n ax.yticks = 0.0:4.0:20.0 # hide\n ylims!(ax, extrema(ax.yticks.val)) # hide\n f # hide\nend # hide","category":"page"},{"location":"DryGranular/kramers/#Industrial-cases","page":"Kramers' model","title":"Industrial cases","text":"","category":"section"},{"location":"DryGranular/kramers/","page":"Kramers' model","title":"Kramers' model","text":"The following illustrates a practical use case of the model. Next we scan a parameter space to confirm once again the model suitability as an alternative to analytical engineering estimations as per Peray's notebook.","category":"page"},{"location":"DryGranular/kramers/","page":"Kramers' model","title":"Kramers' model","text":"let # hide\n ṁ = 33.6 # hide\n ω = 0.85 # hide\n _, _, f, ax, _ = aluminakiln(ṁ, ω, show = true) # hide\n ax.yticks = 0.0:6.0:30.0 # hide\n ylims!(ax, extrema(ax.yticks.val)) # hide\n f # hide\nend # hide","category":"page"},{"location":"DryGranular/kramers/","page":"Kramers' model","title":"Kramers' model","text":"The following table confirms the expected values as per Peray.","category":"page"},{"location":"DryGranular/kramers/","page":"Kramers' model","title":"Kramers' model","text":"mdtable(scanaluminakiln(), latex=false) # hide","category":"page"},{"location":"Teaching/","page":"-","title":"-","text":"Notes related to my learning and teaching interests in several fields related to scientific computing (mostly applied mathematics and machine learning) and related applications. This home page is the entry point with interesting links and an index to the materials.","category":"page"},{"location":"Teaching/#HPC-related","page":"-","title":"HPC-related","text":"","category":"section"},{"location":"Teaching/","page":"-","title":"-","text":"Top 500: the most powerful computers on Earth\nSpecification benchmarking: check of hardware specification\nSlurm: job management for multi-user systems","category":"page"},{"location":"Teaching/#Software","page":"-","title":"Software","text":"","category":"section"},{"location":"Teaching/","page":"-","title":"-","text":"Basilisk\nOpenFOAM","category":"page"},{"location":"Teaching/#OpenSmoke","page":"-","title":"OpenSmoke++","text":"","category":"section"},{"location":"Teaching/","page":"-","title":"-","text":"OpenSmoke++ is a framework for detailed kinetics modeling of large reacting systems. This paper might be of interest: Dalili (2020) - modeling of a single droplet evaporation and combustion.","category":"page"},{"location":"Teaching/#DWSIM","page":"-","title":"DWSIM","text":"","category":"section"},{"location":"Teaching/","page":"-","title":"-","text":"Curso (Pr. Felix Monteiro Pereira)\nCurso (Pr. Delano Mendes de Santana)\nYouTube Playlist","category":"page"},{"location":"References/@Nabian2021a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Nabian2021a/","page":"-","title":"-","text":"title: Efficient training of physics-informed neural networks via importance sampling authors: Mohammad Amin Nabian, Rini Jasmine Gladstone, Hadi Meidani year: 2021 URL: https://doi.org/10.48550/arXiv.2104.12325 –-","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/#Combustion-models","page":"-","title":"Combustion models","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/","page":"-","title":"-","text":"Models inheriting from combustionModel base class. If you are reading this section you might also be interested in building the case and testing the combustion with OpenSmoke++ or Cantera.","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/","page":"-","title":"-","text":"Type Group Description\nEDC Turbulent Eddy Dissipation Concept turbulent combustion model. Probably the most popular approach for simulation of gas combustion in industrial processes.\nlaminar Laminar \nPaSR Laminar \nFDS Single-step \ninfinitelyFastChemistry Single-step \ndiffusion Single-step \nzoneCombustion Filter Enable the reactions within the specified list of cell-zones and set to zero elsewhere.\nnoCombustion Dummy Dummy combustion model for 'no combustion'.","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/#Cloud-models","page":"-","title":"Cloud models","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/","page":"-","title":"-","text":"In OpenFOAM, a cloud designate the injection of a secondary phase, generally solid particles or droplets, in a primary continuous carrier phase. The dictionary cloudProperties is identified in tutorials related to the following solver modules:","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/","page":"-","title":"-","text":"incompressibleDenseParticleFluid\nincompressibleFluid\nmulticomponentFluid\nmultiRegion","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/","page":"-","title":"-","text":"The default version of the dictionary provided here is not yet documented as of OpenFOAM v11 and does not contain any solver specific configurations, so the users must refer to the tutorial cases for setting up their studies. A post-processing particle tracking function associated to the dictionary is provided here (untested).","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/","page":"-","title":"-","text":"Currently OpenFOAM implements the following cloud types:","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/","page":"-","title":"-","text":"Cloud Description\nCollidingCloud Adds collisions to clouds.\nMomentumCloud Templated base class for momentum cloud. Adds particle forces and dispersion, injection, patch interaction, stochastic collision, and surface film models to clouds.\nParcelCloud Outermost template for parcel clouds.\nThermoCloud Templated base class for thermodynamic cloud. Adds heat transfer.\nMPPICCloud Adds MPPIC modelling to clouds.\nReactingCloud Templated base class for reacting cloud. Supports single phase with variable composition and phase change modeling.\nReactingMultiphaseCloud Templated base class for multiphase reacting cloud. Supports multiphase composition, devolatilization, and surface reactions.\nSprayCloud Templated base class for spray cloud. Supports atomization and break-up models.","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/#[CollidingCloud](https://cpp.openfoam.org/v11/classFoam_1_1CollidingCloud.html)-models","page":"-","title":"CollidingCloud models","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/#Collision-models","page":"-","title":"Collision models","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/","page":"-","title":"-","text":"These inherit from CollisionModel.","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/","page":"-","title":"-","text":"Type Description\nNoCollision Dummy class for the none option.\nPairCollision Material properties can be set in detail in sub-dictionary constantProperties. Notice that this is computationally expensive","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/#[MomentumCloud](https://cpp.openfoam.org/v11/classFoam_1_1MomentumCloud.html)-models","page":"-","title":"MomentumCloud models","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/#Dispersion-models","page":"-","title":"Dispersion models","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/#Injection-models","page":"-","title":"Injection models","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/","page":"-","title":"-","text":"These inherit from InjectionModel and implement how particles are injected into a continuous medium. The following table summarizes some of the available models.","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/","page":"-","title":"-","text":"Type Description\nconeInjection Inject particles in a number of oriented cones. Particles can be generated from a single point or over a disk. Injection can be made at constant velocity, pressure, or with a flow rate and discharge coefficient.","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/#Patch-interaction-models","page":"-","title":"Patch interaction models","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/#Stochastic-collision-models","page":"-","title":"Stochastic collision models","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/#Surface-film-models","page":"-","title":"Surface film models","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/#[ThermoCloud](https://cpp.openfoam.org/v11/classFoam_1_1ThermoCloud.html)-models","page":"-","title":"ThermoCloud models","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/#Heat-transfer-models","page":"-","title":"Heat transfer models","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/","page":"-","title":"-","text":"These inherit from HeatTransferModel. It is possible to provide a Stefan flow approximation to the models by using flag BirdCorrection in the models dictionaries.","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/","page":"-","title":"-","text":"Type Description\nNoHeatTransfer Dummy class for the none option.\nRanzMarshall The Ranz-Marshall ([[@Ranz1952]]) [16] correlation for heat transfer. For a more recent review, see e.g. ([[@Aissa2015a]]) [17].","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/#[MPPICCloud](https://cpp.openfoam.org/v11/classFoam_1_1MPPICCloud.html)-models","page":"-","title":"MPPICCloud models","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/#Packing-models","page":"-","title":"Packing models","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/#Isotropy-models","page":"-","title":"Isotropy models","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/#Damping-models","page":"-","title":"Damping models","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/#[ReactingCloud](https://cpp.openfoam.org/v11/classFoam_1_1ReactingCloud.html)-models","page":"-","title":"ReactingCloud models","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/#Phase-change-models","page":"-","title":"Phase change models","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/","page":"-","title":"-","text":"These inherit from PhaseChangeModel. ","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/","page":"-","title":"-","text":"Type Description\nNoPhaseChange Dummy class for the none option.\nLiquidEvaporation Liquid evaporation model using ideal gas assumption.\nLiquidEvaporationBoil Liquid evaporation model using ideal gas assumption and includes boiling model based on ([[@Zuo2000a]]) [18].","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/#[ReactingMultiphaseCloud](https://cpp.openfoam.org/v11/classFoam_1_1ReactingMultiphaseCloud.html)-models","page":"-","title":"ReactingMultiphaseCloud models","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/#Devolatilization-models","page":"-","title":"Devolatilization models","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/#Surface-reaction-models","page":"-","title":"Surface reaction models","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/#[SprayCloud](https://cpp.openfoam.org/v11/classFoam_1_1SprayCloud.html)-models","page":"-","title":"SprayCloud models","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/#Atomization-models","page":"-","title":"Atomization models","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/#Breakup-models","page":"-","title":"Breakup models","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/","page":"-","title":"-","text":"These inherit from BreakupModel for handling particle breakup.","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/","page":"-","title":"-","text":"Type Description\nNoBreakup \nPilchErdman \nReitzDiwakar Secondary breakup model adapted to high pressure fuel sprays.\nReitzKHRT Secondary breakup model which uses the Kelvin-Helmholtz instability theory to predict the stripped droplets and the Raleigh-Taylor instability as well.\nSHF \nETAB Enhanced TAB model for non-evaporating fuel sprays.\nTAB ","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/#Composition-models","page":"-","title":"Composition models","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/","page":"-","title":"-","text":"These inherit from CompositionModel and consists of carrier species (via thermo package), and additional liquids and solids. They are not attached to a type of cloud and each model supports their own cloud types.","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/","page":"-","title":"-","text":"Type Description Support\nNoComposition Dummy class for the none option. \nSingleMixtureFraction Templated parcel multi-phase, multi-component class. ReactingMultiphaseCloud\nSinglePhaseMixture Templated parcel single phase, multi-component class. SprayCloud, ReactingCloud","category":"page"},{"location":"References/@Guo2023a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Guo2023a/","page":"-","title":"-","text":"title: \"Unraveling the design pattern of physics-informed neural networks: Series 01\" authors: Shuai Guo year: 2023 URL: https://towardsdatascience.com/unraveling-the-design-pattern-of-physics-informed-neural-networks-series-01-8190df459527 –-","category":"page"},{"location":"References/@Guo2023a/","page":"-","title":"-","text":"In this post, the author discusses the work by [[@Wu2022a]] in what concerns the adaptive (resampling and refinement) residual point distribution to boost training and accuracy.","category":"page"},{"location":"References/@Guo2023a/","page":"-","title":"-","text":"Approaches:","category":"page"},{"location":"References/@Guo2023a/","page":"-","title":"-","text":"RAD: residual-based adaptive distribution (more expensive)\nRAR-D: residual-based adaptive refinement with distribution (robust)\nBoth are less useful under smooth solutions (activate when required)","category":"page"},{"location":"References/@Guo2023a/","page":"-","title":"-","text":"Key idea: resample with a probability proportional to residual","category":"page"},{"location":"References/@Guo2023a/","page":"-","title":"-","text":"$","category":"page"},{"location":"References/@Guo2023a/","page":"-","title":"-","text":"p(x) \\propto \\frac{\\varepsilon^k(x)}{𝔼[\\varepsilon^k(x)]}+C $","category":"page"},{"location":"References/@Guo2023a/","page":"-","title":"-","text":"Other references of interest are:","category":"page"},{"location":"References/@Guo2023a/","page":"-","title":"-","text":"[[@Lu2019a]]: residual-based adaptive refinement (RAR-D with high k)\n[[@Nabian2021a]]: importance sampling (RAD with k=1 and c=0)","category":"page"},{"location":"References/@Guo2023f/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Guo2023f/","page":"-","title":"-","text":"title: \"Unraveling the design pattern of physics-informed neural networks: Series 06\" authors: Shuai Guo year: 2023 URL: https://towardsdatascience.com/unraveling-the-design-pattern-of-physics-informed-neural-networks-part-06-bcb3557199e2 –-","category":"page"},{"location":"References/@Lagaris1997a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Lagaris1997a/","page":"-","title":"-","text":"title: Artificial neural networks for solving ordinary and partial differential equations authors: I. E. Lagaris, A. Likas, D. I. Fotiadis year: 1997 –-","category":"page"},{"location":"References/@Gidaspow1994/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Gidaspow1994/","page":"-","title":"-","text":"title: \"Multiphase flow and fluidization: continuum and kinetic theory descriptions with applications\" authors: Dimitri Gidaspow year: 1994 URL: TODO –-","category":"page"},{"location":"References/@Saario2005a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Saario2005a/","page":"-","title":"-","text":"title: Heavy fuel oil combustion in a cylindrical laboratory furnace: measurements and modeling authors: A. Saario, A. Rebola, P. Coelho, M. Costa, A. Oksanen year: 2005 –-","category":"page"},{"location":"Teaching/OpenFOAM/Cases/injectionChannel/#Verification","page":"-","title":"Verification","text":"","category":"section"},{"location":"Teaching/OpenFOAM/Cases/injectionChannel/","page":"-","title":"-","text":"Using the base package provided here we can verify the computation of number of parcels per second of sample case injectionChannel. Notice that the value of mdot has been reversed engineered so that it matches the expected value.","category":"page"},{"location":"Teaching/OpenFOAM/Cases/injectionChannel/","page":"-","title":"-","text":"import OpenFOAM as OF\n\nOF.parcels_per_second(; mdot = 0.2, rhop = 1000.0, diam = 650.0e-06, nParticle = 1)\n# Output: 1390885","category":"page"},{"location":"References/@Lu2019a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Lu2019a/","page":"-","title":"-","text":"title: \"DeepXDE: A deep learning library for solving differential equations\" authors: Lu Lu, Xuhui Meng, Zhiping Mao, George E. Karniadakis year: 2019 URL: https://doi.org/10.48550/arXiv.1907.04502 Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZla8eg-cL7mDKg_muqQ?e=hcIqTb –-","category":"page"},{"location":"DryFlowsheet/#DryFlowsheet","page":"DryFlowsheet","title":"DryFlowsheet","text":"","category":"section"},{"location":"DryFlowsheet/","page":"DryFlowsheet","title":"DryFlowsheet","text":"CurrentModule = DryFlowsheet","category":"page"},{"location":"DryFlowsheet/","page":"DryFlowsheet","title":"DryFlowsheet","text":"Modules = [ DryFlowsheet ]","category":"page"},{"location":"DryFlowsheet/#DryFlowsheet.CooledCrushingMill","page":"DryFlowsheet","title":"DryFlowsheet.CooledCrushingMill","text":"Represents a crushing device with cooling system.\n\nModels\n\n:TARGET_COOLANT_TEMP evaluates the heat transfer lost to coolant provided a target final stream temperature given by keyword argument temp_out. Product temperature is updated through an EnergyStream built with energy exchange computed through exchanged_heat, so that numerical value can be slightly different from target value.\n:USING_GLOBAL_HTC makes use of a global heat transfer coefficient to evaluate heat flux across the cooling stream.\n\nAttributes\n\nrawmeal: The input meal applied to crushing process.\nproduct: The output material stream at the end of product pipeline.\ncoolant: The output material stream at the end of cooling pipeline.\npower: The power applied to the crushing process [W]\nloss: The heat exchanged in between product and cooling pipelines [W].\nglobalhtc: Global heat transfer coefficient [W/K].\n\n\n\n\n\n","category":"type"},{"location":"DryFlowsheet/#DryFlowsheet.EnergyStream","page":"DryFlowsheet","title":"DryFlowsheet.EnergyStream","text":"Represents an energy stream.\n\nAttributes\n\nḣ: Energy flow provided by stream [W].\n\n\n\n\n\n","category":"type"},{"location":"DryFlowsheet/#DryFlowsheet.MaterialStream","page":"DryFlowsheet","title":"DryFlowsheet.MaterialStream","text":"Represents a material stream.\n\nAttributes\n\nṁ: Material mass flow rate [kg/s].\nT: Stream temperature [K].\nP: Stream pressure [Pa].\nY: Components mass fractions [-].\npipeline: Materials pipeline associated to Y.\n\n\n\n\n\n","category":"type"},{"location":"DryFlowsheet/#DryFlowsheet.SolidsSeparator","page":"DryFlowsheet","title":"DryFlowsheet.SolidsSeparator","text":"Represents a solids separator with efficiency η.\n\nTo-do's\n\nAdd inverse model to automatically tune efficiency η.\n\nAttributes\n\nη: Solids separation efficiency [-].\nsource: The stream to be separated into solids and others.\nsolids: The output solids stream.\nothers: The output remaining stream.\n\n\n\n\n\n","category":"type"},{"location":"DryFlowsheet/#DryFlowsheet.StreamPipeline","page":"DryFlowsheet","title":"DryFlowsheet.StreamPipeline","text":"Array of materials to include in a stream.\n\n\n\n\n\n","category":"type"},{"location":"DryFlowsheet/#DryFlowsheet.TransportPipeline","page":"DryFlowsheet","title":"DryFlowsheet.TransportPipeline","text":"Represents a pipeline with heat transfer.\n\nModels\n\n:TARGET_EXIT_TEMP evaluates the heat transfer lost to environment provided a target final stream temperature given by keyword argument temp_out. Product temperature is updated through an EnergyStream built with energy exchange computed through exchanged_heat, so that numerical value can be slightly different from target value.\n:USING_GLOBAL_HTC makes use of a global heat transfer coefficient to evaluate heat flux across the pipe.\n\nTo-do's\n\nImplement heat transfer losses through a convective heat transfer coefficient (HTC) computed from a suitable Nusselt number, for use of pipeline in simulation mode.\n\nAttributes\n\nproduct: The output material stream at the end of pipeline.\npower: The heat exchanged in pipeline [W].\n\n\n\n\n\n","category":"type"},{"location":"DryFlowsheet/#DryFlowsheet.cooled_crushing-Tuple{}","page":"DryFlowsheet","title":"DryFlowsheet.cooled_crushing","text":"Manage use of CooledCrushingMill with different models.\n\n\n\n\n\n","category":"method"},{"location":"DryFlowsheet/#DryFlowsheet.enthalpyflowrate","page":"DryFlowsheet","title":"DryFlowsheet.enthalpyflowrate","text":"Enthalpy flow rate of given stream [W].\n\n\n\n\n\n","category":"function"},{"location":"DryFlowsheet/#DryFlowsheet.exchanged_heat-Tuple{MaterialStream, Any}","page":"DryFlowsheet","title":"DryFlowsheet.exchanged_heat","text":"Heat exchanged with stream to match outlet temperature.\n\n\n\n\n\n","category":"method"},{"location":"DryFlowsheet/#DryFlowsheet.transport_pipe-NTuple{4, Any}","page":"DryFlowsheet","title":"DryFlowsheet.transport_pipe","text":"Manage use of TransportPipeline with different models.\n\n\n\n\n\n","category":"method"},{"location":"References/@ORourke2010/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@ORourke2010/","page":"-","title":"-","text":"title: An improved collision damping time for MP-PIC calculations of dense particle flows with applications to polydisperse sedimenting beds and colliding particle jets authors: Peter J. O’Rourke, Dale M. Snider year: 2010 URL: https://doi.org/10.1016/j.ces.2010.08.032 –-","category":"page"},{"location":"References/@Cai2021a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Cai2021a/","page":"-","title":"-","text":"title: Physics-informed neural networks for heat transfer problems authors: Shengze Cai, Zhicheng Wang, Sifan Wang, Paris Perdikaris, George Em Karniadakis year: 2021 URL: https://doi.org/10.1115/1.4050542 –-","category":"page"},{"location":"helpers/#Helpers","page":"Helpers","title":"Helpers","text":"","category":"section"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"The core packages of WallyToolbox ecosystem provide shared functionalities and types that are used in several other more specialized packages. This allows for standardization of interfaces, employed quantities, and avoid boilerplate code. This page organizes everything to facilitate the understanding of the end-user. Knowing the base helper packages DryConstants and DryUtilities is key for proper usage of WallyToolbox.","category":"page"},{"location":"helpers/#DryConstants","page":"Helpers","title":"DryConstants","text":"","category":"section"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"CurrentModule = DryConstants","category":"page"},{"location":"helpers/#Physical-constants","page":"Helpers","title":"Physical constants","text":"","category":"section"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"DryConstants.GAS_CONSTANT\nDryConstants.STEFAN_BOLTZMANN","category":"page"},{"location":"helpers/#DryConstants.GAS_CONSTANT","page":"Helpers","title":"DryConstants.GAS_CONSTANT","text":"Ideal gas constant [J/(mol.K)].\n\n\n\n\n\n","category":"constant"},{"location":"helpers/#DryConstants.STEFAN_BOLTZMANN","page":"Helpers","title":"DryConstants.STEFAN_BOLTZMANN","text":"Stefan-Boltzmann constant [W/(m².K⁴)].\n\n\n\n\n\n","category":"constant"},{"location":"helpers/#Reference-states","page":"Helpers","title":"Reference states","text":"","category":"section"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"DryConstants.T_REF\nDryConstants.P_REF\nDryConstants.C_REF","category":"page"},{"location":"helpers/#DryConstants.T_REF","page":"Helpers","title":"DryConstants.T_REF","text":"Normal atmospheric temperature [K].\n\n\n\n\n\n","category":"constant"},{"location":"helpers/#DryConstants.P_REF","page":"Helpers","title":"DryConstants.P_REF","text":"Reference atmospheric pressure [Pa].\n\n\n\n\n\n","category":"constant"},{"location":"helpers/#DryConstants.C_REF","page":"Helpers","title":"DryConstants.C_REF","text":"Normal state concentration [mol/m³]. \n\n\n\n\n\n","category":"constant"},{"location":"helpers/#Other-constants","page":"Helpers","title":"Other constants","text":"","category":"section"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"DryConstants.ZERO_CELSIUS\nDryConstants.ONE_ATM\nDryConstants.M_AIR","category":"page"},{"location":"helpers/#DryConstants.ZERO_CELSIUS","page":"Helpers","title":"DryConstants.ZERO_CELSIUS","text":"Zero degrees Celsius in Kelvin [273.15 K].\n\n\n\n\n\n","category":"constant"},{"location":"helpers/#DryConstants.ONE_ATM","page":"Helpers","title":"DryConstants.ONE_ATM","text":"Atmospheric pressure at sea level [101325.0 Pa].\n\n\n\n\n\n","category":"constant"},{"location":"helpers/#DryConstants.M_AIR","page":"Helpers","title":"DryConstants.M_AIR","text":"Air mean molecular mass [kg/mol].\n\n\n\n\n\n","category":"constant"},{"location":"helpers/#DryUtilities","page":"Helpers","title":"DryUtilities","text":"","category":"section"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"CurrentModule = DryUtilities\nDocTestSetup = quote\n using DryUtilities\n using DryUtilities: heaviside, interval, makestepwise1d\n using DryUtilities: closestpowerofx, axesunitscaler\n using DryUtilities: maxrelativechange, maxabsolutechange\nend","category":"page"},{"location":"helpers/#Haskell-like-array-slicing","page":"Helpers","title":"Haskell-like array slicing","text":"","category":"section"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"Those who know Haskell probably started learning it by manipulating lists with head and tail. Those functionalities are not available in Julia by default and array slicing - with an ugly syntax - is required. Since this is done often in the fields of application of DryTooling, both head and tail together with a body functions are available in its core. They are simple wrapers over the @view macro and work with both iterable types and arrays. The following snippet illustrates their usage.","category":"page"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"julia> v = collect(1:4);\n\njulia> head(v) == [1; 2; 3]\ntrue\n\njulia> tail(v) == [2; 3; 4]\ntrue\n\njulia> body(v) == [2; 3]\ntrue","category":"page"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"More examples are provided in the following documentation ahead of each of the functions.","category":"page"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"julia> head(1:4)\n1:3\n\njulia> head([1, 2, 3, 4])\n3-element view(::Vector{Int64}, 1:3) with eltype Int64:\n 1\n 2\n 3\n","category":"page"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"DryUtilities.head","category":"page"},{"location":"helpers/#DryUtilities.head","page":"Helpers","title":"DryUtilities.head","text":"head(z)\n\nAccess view of array head. See also tail and body.\n\n\n\n\n\n","category":"function"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"julia> tail([1, 2, 3, 4])\n3-element view(::Vector{Int64}, 2:4) with eltype Int64:\n 2\n 3\n 4\njulia> tail(1:4)\n2:4","category":"page"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"DryUtilities.tail","category":"page"},{"location":"helpers/#DryUtilities.tail","page":"Helpers","title":"DryUtilities.tail","text":"tail(z)\n\nAccess view of array tail. See also head and body.\n\n\n\n\n\n","category":"function"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"julia> body([1, 2, 3, 4])\n2-element view(::Vector{Int64}, 2:3) with eltype Int64:\n 2\n 3\njulia> body(1:4)\n2:3","category":"page"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"DryUtilities.body","category":"page"},{"location":"helpers/#DryUtilities.body","page":"Helpers","title":"DryUtilities.body","text":"body(z)\n\nAccess view of array body. See also head and tail.\n\n\n\n\n\n","category":"function"},{"location":"helpers/#Handling-of-discontinuous-functions","page":"Helpers","title":"Handling of discontinuous functions","text":"","category":"section"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"Discontinuous functions are all over in real world applications. Whether they handle discrete signals sent to controllers or represent a material property change in the solution domain of a heat transfer simulation, they are often represented by a single or a composition of Heaviside step functions. Again, because its implementation is pretty simple and optimization routines require a differentiable form of this function, DryUtilities implements heaviside and interval as proposed in this StackOverflow answer.","category":"page"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"julia> heaviside(-1) == 0\ntrue\n\njulia> heaviside(-1.0) == 0.0\ntrue\n\njulia> heaviside(0.0) == 0.5\ntrue\n\njulia> heaviside(1.0) == 1.0\ntrue\n\njulia> interval(10; a = 0, b = 10) == 0.5\ntrue","category":"page"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"We see below that heaviside also works on ranges","category":"page"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"julia> heaviside(-2:2)\n5-element Vector{Float64}:\n 0.0\n 0.0\n 0.5\n 1.0\n 1.0","category":"page"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"DryUtilities.heaviside","category":"page"},{"location":"helpers/#DryUtilities.heaviside","page":"Helpers","title":"DryUtilities.heaviside","text":"heaviside(t)\n\nProvides a Heaviside function compatible with automatic differentiation. This is a requirement for conceiving, e.g., model predictive controls with discontinuous functions under ModelingToolkit.\n\n\n\n\n\n","category":"function"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"By implementation inheritance that is also the case for interval:","category":"page"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"julia> interval(0:6; a = 2, b = 5)\n7-element Vector{Float64}:\n 0.0\n 0.0\n 0.5\n 1.0\n 1.0\n 0.5\n 0.0","category":"page"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"DryUtilities.interval","category":"page"},{"location":"helpers/#DryUtilities.interval","page":"Helpers","title":"DryUtilities.interval","text":"interval(x; a=-Inf, b=Inf)\n\nReturns 1 if x (a b), 1/2 for x = a x = b, or 0.\n\n\n\n\n\n","category":"function"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"As it is the case for representation of specific heats using NASA7/NASA9 or Shomate polynomials, functions defined by parts with an specific change point are also required in physical modeling. To this end, a stepwise function can be established with makestepwise1d. If keyword differentialble = true, then the function makes use of the above interval and remains compatible with ModelingToolkit, for instance.","category":"page"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"julia> f = makestepwise1d(x->x, x->x^2, 1.0; differentiable = true);\n\njulia> f(0:0.2:2.0)\n11-element Vector{Float64}:\n 0.0\n 0.2\n 0.4\n 0.6\n 0.8\n 1.0\n 1.44\n 1.9599999999999997\n 2.5600000000000005\n 3.24\n 4.0\n\njulia> using ModelingToolkit\n\njulia> @variables x\n1-element Vector{Num}:\n x\n\njulia> f(x); # Output is too long, try by yourself.","category":"page"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"DryUtilities.makestepwise1d","category":"page"},{"location":"helpers/#DryUtilities.makestepwise1d","page":"Helpers","title":"DryUtilities.makestepwise1d","text":"makestepwise1d(lo, hi, xc)\n\nCreates an univariate function that is composed of two parts, the first evaluated before a critical domain point xc, and the second above that value. This is often required, for instance, for the evaluation of NASA polynomials for thermodynamic properties. If differentiable, then the returned function is compatible with symbolic argument as required when using package ModelingToolkit, etc.\n\n\n\n\n\n","category":"function"},{"location":"helpers/#Rounding-numbers-and-automatic-axes","page":"Helpers","title":"Rounding numbers and automatic axes","text":"","category":"section"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"danger: Danger\nThis section documents functions that are used in a very unstable context.","category":"page"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"Simple rounding is not enough. Getting values that are rounded close to a power of a given number and rounded to floor or ceil is often the case. This is standardized in DryTooling through closestpowerofx:","category":"page"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"julia> closestpowerofx(10)\n10\n\njulia> closestpowerofx(11)\n20\n\njulia> closestpowerofx(11, roundf = floor)\n10\n\njulia> closestpowerofx(11, x = 5, roundf = floor)\n10\n\njulia> closestpowerofx(12.0; x = 10)\n20\n\njulia> closestpowerofx(12.0; x = 10, roundf = floor)\n10\n\njulia> closestpowerofx(12.0; x = 10, roundf = round)\n10","category":"page"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"DryUtilities.closestpowerofx","category":"page"},{"location":"helpers/#DryUtilities.closestpowerofx","page":"Helpers","title":"DryUtilities.closestpowerofx","text":"closestpowerofx(\n v::Number;\n x::Number = 10,\n roundf::Function = ceil\n)::Int64\n\nCompute the integer power of x closest to v using roundf as rouding method. This might be useful for automatic setting more reasonable limits to plot axis or similar applications. Changing the rouding method through roundf is also possible.\n\n\n\n\n\n","category":"function"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"Below we illustrate the usage of axesunitscaler.","category":"page"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"NOTE: this function is not yet stable. In the future it will instead return labels using symbols like k, M, G, etc., for the units through a flag provided by the user.","category":"page"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"julia> axesunitscaler(1)\n(\"\", 1)\n\njulia> axesunitscaler(1000)\n(\"[×1000]\", 1000)\n\njulia> axesunitscaler(1000000)\n(\"[×1000000]\", 1000000)","category":"page"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"DryUtilities.axesunitscaler","category":"page"},{"location":"helpers/#DryUtilities.axesunitscaler","page":"Helpers","title":"DryUtilities.axesunitscaler","text":"axesunitscaler(x::Number)::Tuple{String, Int64}\n\nFind scaling factor for multiples of 1000 units. Together with closestpowerofx this can be used to produce better automatic plot axes limits. The returned values provide the string for modifying the axis label and the associated scaling factor.\n\n\n\n\n\n","category":"function"},{"location":"helpers/#Computation-of-changes-and-residuals","page":"Helpers","title":"Computation of changes and residuals","text":"","category":"section"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"danger: Danger\nThis section documents functions that are used in a very unstable context.","category":"page"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"DryUtilities.maxabsolutechange\nDryUtilities.maxrelativechange","category":"page"},{"location":"helpers/#DryUtilities.maxabsolutechange","page":"Helpers","title":"DryUtilities.maxabsolutechange","text":"Maximum absolute change in a solution array.\n\n\n\n\n\n","category":"function"},{"location":"helpers/#DryUtilities.maxrelativechange","page":"Helpers","title":"DryUtilities.maxrelativechange","text":"Maximum relative change in a solution array.\n\n\n\n\n\n","category":"function"},{"location":"helpers/#Unit-conversion","page":"Helpers","title":"Unit conversion","text":"","category":"section"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"DryUtilities.nm3_h_to_kg_h\nDryUtilities.kg_h_to_nm3_h","category":"page"},{"location":"helpers/#DryUtilities.nm3_h_to_kg_h","page":"Helpers","title":"DryUtilities.nm3_h_to_kg_h","text":"Convert [Nm³/h] to [kg/h].\n\n\n\n\n\n","category":"function"},{"location":"helpers/#DryUtilities.kg_h_to_nm3_h","page":"Helpers","title":"DryUtilities.kg_h_to_nm3_h","text":"Convert [kg/h] to [Nm³/h].\n\n\n\n\n\n","category":"function"},{"location":"helpers/#Others","page":"Helpers","title":"Others","text":"","category":"section"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"DryUtilities.defaultvalue","category":"page"},{"location":"helpers/#DryUtilities.defaultvalue","page":"Helpers","title":"DryUtilities.defaultvalue","text":"Syntax sugar for handling a possibly nothing value.\n\n\n\n\n\n","category":"function"},{"location":"helpers/#Abstract-types","page":"Helpers","title":"Abstract types","text":"","category":"section"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"CurrentModule = DryAbstract","category":"page"},{"location":"helpers/#Fixed-state-materials","page":"Helpers","title":"Fixed state materials","text":"","category":"section"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"DryAbstract.AbstractMaterial\nDryAbstract.AbstractSolidMaterial\nDryAbstract.AbstractLiquidMaterial\nDryAbstract.AbstractGasMaterial\nDryAbstract.AbstractSolidMineralPhase","category":"page"},{"location":"helpers/#DryAbstract.AbstractMaterial","page":"Helpers","title":"DryAbstract.AbstractMaterial","text":"Base type for any material substance.\n\n\n\n\n\n","category":"type"},{"location":"helpers/#DryAbstract.AbstractSolidMaterial","page":"Helpers","title":"DryAbstract.AbstractSolidMaterial","text":"Base type for solid materials.\n\n\n\n\n\n","category":"type"},{"location":"helpers/#DryAbstract.AbstractLiquidMaterial","page":"Helpers","title":"DryAbstract.AbstractLiquidMaterial","text":"Base type for liquid materials.\n\n\n\n\n\n","category":"type"},{"location":"helpers/#DryAbstract.AbstractGasMaterial","page":"Helpers","title":"DryAbstract.AbstractGasMaterial","text":"Base type for gas materials.\n\n\n\n\n\n","category":"type"},{"location":"helpers/#DryAbstract.AbstractSolidMineralPhase","page":"Helpers","title":"DryAbstract.AbstractSolidMineralPhase","text":"Base type for any mineral material.\n\n\n\n\n\n","category":"type"},{"location":"helpers/#Problem-solving-and-physical-models","page":"Helpers","title":"Problem solving and physical models","text":"","category":"section"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"DryAbstract.AbstractMatrixProblem\nDryAbstract.AbstractIterativeSolver\nDryAbstract.AbstractSolutionStorage\nDryAbstract.AbstractPhysicalModel","category":"page"},{"location":"helpers/#DryAbstract.AbstractMatrixProblem","page":"Helpers","title":"DryAbstract.AbstractMatrixProblem","text":"Base type for linear algebra problems.\n\n\n\n\n\n","category":"type"},{"location":"helpers/#DryAbstract.AbstractIterativeSolver","page":"Helpers","title":"DryAbstract.AbstractIterativeSolver","text":"Base type for (nonlinear) iterative solvers.\n\n\n\n\n\n","category":"type"},{"location":"helpers/#DryAbstract.AbstractSolutionStorage","page":"Helpers","title":"DryAbstract.AbstractSolutionStorage","text":"Base type for storing simulation solution.\n\n\n\n\n\n","category":"type"},{"location":"helpers/#DryAbstract.AbstractPhysicalModel","page":"Helpers","title":"DryAbstract.AbstractPhysicalModel","text":"Base type for physical models.\n\n\n\n\n\n","category":"type"},{"location":"helpers/#Transport,-thermodynamics,-and-kinetics","page":"Helpers","title":"Transport, thermodynamics, and kinetics","text":"","category":"section"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"DryAbstract.AbstractTransportModel\nDryAbstract.AbstractSolidTransport\nDryAbstract.AbstractGasThermo\nDryAbstract.AbstractSolidThermo\nDryAbstract.AbstractMixtureSubstance\nDryAbstract.AbstractMixturePhase\nDryAbstract.AbstractKineticsMechanism","category":"page"},{"location":"helpers/#DryAbstract.AbstractTransportModel","page":"Helpers","title":"DryAbstract.AbstractTransportModel","text":"Base type for transport models.\n\n\n\n\n\n","category":"type"},{"location":"helpers/#DryAbstract.AbstractSolidTransport","page":"Helpers","title":"DryAbstract.AbstractSolidTransport","text":"Base type for transport models.\n\n\n\n\n\n","category":"type"},{"location":"helpers/#DryAbstract.AbstractGasThermo","page":"Helpers","title":"DryAbstract.AbstractGasThermo","text":"Base type for thermodynamic models.\n\n\n\n\n\n","category":"type"},{"location":"helpers/#DryAbstract.AbstractSolidThermo","page":"Helpers","title":"DryAbstract.AbstractSolidThermo","text":"Base type for thermodynamic models.\n\n\n\n\n\n","category":"type"},{"location":"helpers/#DryAbstract.AbstractMixtureSubstance","page":"Helpers","title":"DryAbstract.AbstractMixtureSubstance","text":"Base type for simplified mixture substances.\n\n\n\n\n\n","category":"type"},{"location":"helpers/#DryAbstract.AbstractMixturePhase","page":"Helpers","title":"DryAbstract.AbstractMixturePhase","text":"Base type for simplified mixture phases.\n\n\n\n\n\n","category":"type"},{"location":"helpers/#DryAbstract.AbstractKineticsMechanism","page":"Helpers","title":"DryAbstract.AbstractKineticsMechanism","text":"Base type for coded kinetics mechanisms.\n\n\n\n\n\n","category":"type"},{"location":"helpers/#Finite-volume-method-and-relatives","page":"Helpers","title":"Finite volume method and relatives","text":"","category":"section"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"DryAbstract.AbstractDiffusionModel1D\nDryAbstract.AbstractGrid1D","category":"page"},{"location":"helpers/#DryAbstract.AbstractDiffusionModel1D","page":"Helpers","title":"DryAbstract.AbstractDiffusionModel1D","text":"Base type for diffusion (heat, species, ...) models.\n\n\n\n\n\n","category":"type"},{"location":"helpers/#DryAbstract.AbstractGrid1D","page":"Helpers","title":"DryAbstract.AbstractGrid1D","text":"Base type of one-dimensional grids.\n\n\n\n\n\n","category":"type"},{"location":"References/@Lu2021a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Lu2021a/","page":"-","title":"-","text":"title: Physics-informed neural networks with hard constraints for inverse design authors: Lu Lu, Raphael Pestourie, Wenjie Yao, Zhicheng Wang, Francesc Verdugo, Steven G. Johnson year: 2021 URL: https://doi.org/10.48550/arXiv.2102.04626 –-","category":"page"},{"location":"Teaching/Ansys Fluent/UDF/#General-purpose","page":"-","title":"General purpose","text":"","category":"section"},{"location":"Teaching/Ansys Fluent/UDF/","page":"-","title":"-","text":"Macro Notes\nData_Valid_P Test if parameters required by UDF have been initialized. It is a good practice to use this macro on top of UDF's to avoid crashes.\nMessage Displays a message, to be used from host.\nError Display and throw an error message. Compiled only.","category":"page"},{"location":"Teaching/Ansys Fluent/UDF/#Macro-parallelization","page":"-","title":"Macro parallelization","text":"","category":"section"},{"location":"Teaching/Ansys Fluent/UDF/","page":"-","title":"-","text":"Macro Notes\nPRINCIPAL_FACE_P When looping across faces in a thread using begin_f_loop (or another equivalent macro) in a parallel setting, we might access elements that actually belong to other nodes (because of how MPI works). This macro allows us to check the current face is part of the chunk belonging to current node, what allows us to avoid computing a quantity multiple times, leading to wrong results. Compiled only.\nRP_HOST Used in #if directives to tell code must be evaluated only in host.\nRP_NODE Used in #if directives to tell code must be evaluated only in nodes.\nPRF_GRSUM1 Performs aggregation of real R values through sum SUM1. This function is called in nodes and there are other cousins for different aggregations.\nnode_to_host_{type}_{n} Pass n values of type from node to host. It is called after, e.g. aggregations such as PRF_GRSUM1 are used in node. There is also an equivalent host_to_node_{type}_{n}.","category":"page"},{"location":"Teaching/OpenFOAM/#OpenFOAM-11","page":"OpenFOAM","title":"OpenFOAM 11","text":"","category":"section"},{"location":"Teaching/OpenFOAM/#Table-of-Contents","page":"OpenFOAM","title":"Table of Contents","text":"","category":"section"},{"location":"Teaching/OpenFOAM/","page":"OpenFOAM","title":"OpenFOAM","text":"Solver Modules\nPhysical Models","category":"page"},{"location":"Teaching/OpenFOAM/#Tips-and-reminders","page":"OpenFOAM","title":"Tips and reminders","text":"","category":"section"},{"location":"Teaching/OpenFOAM/#General-topics","page":"OpenFOAM","title":"General topics","text":"","category":"section"},{"location":"Teaching/OpenFOAM/","page":"OpenFOAM","title":"OpenFOAM","text":"When converting to OpenFOAM v11 viscosityModel instead of transportModel in physicalProperties files. Currently setting transportModel Newtonian does not raise any errors.\nWhen working with a 2-D extruded mesh (1-cell in thickness), the mass flow rate must be scaled by the width of the domain to keep consistency with what would be expected in 3-D.","category":"page"},{"location":"Teaching/OpenFOAM/#Granular-flows","page":"OpenFOAM","title":"Granular flows","text":"","category":"section"},{"location":"Teaching/OpenFOAM/","page":"OpenFOAM","title":"OpenFOAM","text":"It is a good idea to set SOI to a value higher than zero (dimensioned to match the global time-scale of the problem) so that flow is fully developed before particles arrive.\nIf it makes sense to do so, make parameter U0 in the entries of injectionModels of cloudProperties identical to the velocity specified for the corresponding path. In most cases this applies, except when modeling a particle jet that originates from another source outside of the computational domain.","category":"page"},{"location":"References/@Raissi2017/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Raissi2017/","page":"-","title":"-","text":"title: \"Physics informed deep learning (part I): Data-driven solutions of nonlinear partial differential equations\" authors: Maziar Raissi, Paris Perdikaris, George Em Karniadakis year: 2017 DOI: https://doi.org/10.48550/arXiv.1711.10561 Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZla5YwhmbwapFcSs-8A?e=XiDCyF –-","category":"page"},{"location":"Teaching/OpenFOAM/Cases/sedimentationBox/","page":"-","title":"-","text":"The goal of this study is to verify the role of some drag models over particle drop dynamics. Other than the drag models, particle size and role of parameter applyGravity in implicit packing model. The later was added because of unexpected results found in some cases of horizontalMixer and dustCollector.","category":"page"},{"location":"Teaching/OpenFOAM/Cases/sedimentationBox/#Analytical-solution","page":"-","title":"Analytical solution","text":"","category":"section"}] +[{"location":"RadCalNet/#RadCalNet","page":"RadCalNet","title":"RadCalNet","text":"","category":"section"},{"location":"RadCalNet/","page":"RadCalNet","title":"RadCalNet","text":"Radiation properties machine learning model trained on RadCal.","category":"page"},{"location":"RadCalNet/","page":"RadCalNet","title":"RadCalNet","text":"In this project we use the re-implementation of RadCal [3] to generate data and train a machine learning model for the prediction of radiative properties, i.e. emissivity and transmissivity, of common combustion flue gases.","category":"page"},{"location":"RadCalNet/","page":"RadCalNet","title":"RadCalNet","text":"This is done because for real-time calls of RADCAL might be computationally prohibitive, for instance in CFD applications. Thus, a neural network is trained with Flux based on the simulated data and this module provides an interface to call the network from external programs (Ansys Fluent, OpenFOAM, ...).","category":"page"},{"location":"RadCalNet/","page":"RadCalNet","title":"RadCalNet","text":"For details of validity ranges and sample space, please check function RadCalNet.datasampler!, where random sampling is provided. Indexing of species array is documented at RadCalNet.runradcalinput.","category":"page"},{"location":"RadCalNet/","page":"RadCalNet","title":"RadCalNet","text":"Below we display the quality of fitting of model. One must notice that fitting of emissivity still needs a few adjustments, while transmissivity is well predicted over the whole range.","category":"page"},{"location":"RadCalNet/","page":"RadCalNet","title":"RadCalNet","text":"(Image: Model testing)","category":"page"},{"location":"RadCalNet/#Usage","page":"RadCalNet","title":"Usage","text":"","category":"section"},{"location":"RadCalNet/","page":"RadCalNet","title":"RadCalNet","text":"CurrentModule = RadCalNet","category":"page"},{"location":"RadCalNet/","page":"RadCalNet","title":"RadCalNet","text":"The following snippet illustrates everything the model was designed to do.","category":"page"},{"location":"RadCalNet/","page":"RadCalNet","title":"RadCalNet","text":"julia> using RadCalNet;\n\njulia> x = Float32[1200.0; 1000.0; 2.0; 1.0; 0.1; 0.2; 0.1];\n\njulia> y = RadCalNet.model(x)\n2-element Vector{Float32}:\n 0.3231391\n 0.6287435","category":"page"},{"location":"RadCalNet/","page":"RadCalNet","title":"RadCalNet","text":"The array of inputs x is defined below, and y provides gas emissitivy and transmissivity, respectively. Notice that x must be a column vector with entries of type Float32.","category":"page"},{"location":"RadCalNet/","page":"RadCalNet","title":"RadCalNet","text":"Index Quantity Units Minimum Maximum\n1 Wall temperature K 300 2500\n2 Gas temperature K 300 2500\n3 Depth m 0.1 3.0\n4 Pressure atm 0.5 1.5\n5 CO2 mole fraction - 0.0 0.25\n6 H2O mole fraction - 0.0 0.30\n7 CO mole fraction - 0.0 0.20","category":"page"},{"location":"RadCalNet/","page":"RadCalNet","title":"RadCalNet","text":"For practical applications, one generally is interested in calling the model with a large inputs set. Belowe we illustrate how to do this with a block of data and verify the predictions are within the model tolerance on average.","category":"page"},{"location":"RadCalNet/","page":"RadCalNet","title":"RadCalNet","text":"using WallyToolbox\nusing RadCalNet\nusing Flux: mae\n\n# Loss after last training.\nLOSS = 0.0022\n\n# Random sample data randomly extracted (20 rows).\nTESTDATA = Float32[\n 1670.0 960.0 1.9 0.5 0.15 0.18 0.03 0.161774 0.820025\n 1230.0 320.0 1.9 1.0 0.04 0.08 0.18 0.20205 0.79694\n 1760.0 770.0 2.1 1.5 0.22 0.24 0.12 0.309017 0.669564\n 1770.0 960.0 1.9 0.5 0.15 0.0 0.13 0.0721235 0.919333\n 350.0 1590.0 1.9 1.0 0.06 0.29 0.12 0.357215 0.169437\n 2330.0 1820.0 1.1 1.5 0.13 0.08 0.13 0.100282 0.840802\n 1220.0 2070.0 0.2 0.5 0.11 0.17 0.09 0.0361672 0.902581\n 760.0 1380.0 1.9 1.5 0.1 0.01 0.10 0.188531 0.69798\n 1870.0 1880.0 0.2 1.5 0.14 0.28 0.17 0.0819803 0.858508\n 1910.0 2220.0 1.3 1.5 0.2 0.3 0.09 0.202592 0.63856\n 2290.0 360.0 1.8 0.5 0.0 0.23 0.07 0.0755366 0.914045\n 1330.0 640.0 1.7 1.5 0.21 0.04 0.06 0.227428 0.764363\n 1090.0 1260.0 1.9 1.5 0.17 0.18 0.18 0.381407 0.501751\n 1250.0 1590.0 0.4 1.5 0.13 0.27 0.18 0.191725 0.688272\n 990.0 2320.0 0.5 1.0 0.23 0.27 0.03 0.118285 0.633932\n 1920.0 720.0 0.3 1.0 0.05 0.03 0.18 0.0496579 0.945693\n 1250.0 310.0 0.6 1.0 0.04 0.18 0.15 0.171857 0.827273\n 1990.0 1020.0 1.3 1.0 0.09 0.11 0.15 0.140596 0.837042\n 1180.0 1830.0 0.3 0.5 0.09 0.29 0.02 0.0682171 0.851304\n 2120.0 1230.0 2.9 1.5 0.03 0.06 0.17 0.168034 0.791942\n]\n\n# Predictors and targets transposed.\nX = transpose(TESTDATA[:, 1:7])\nY = transpose(TESTDATA[:, 8:9])\n\nmae(RadCalNet.model(X), Y) <= LOSS\n\n# output\n\ntrue","category":"page"},{"location":"RadCalNet/","page":"RadCalNet","title":"RadCalNet","text":"The following test can also be seen as a tutorial for data generation, where we make the verification of data generation with provided seed. See RadCalNet.createcustomdatabase for more details. An alternative RadCalNet.datasampler! can be provided for specific problems.","category":"page"},{"location":"RadCalNet/","page":"RadCalNet","title":"RadCalNet","text":"import Random\nusing WallyToolbox\nusing RadCalNet\n\nfunction sampledatabase()\n #XXX: documentation is run from root directory!\n testname = joinpath(joinpath(@__DIR__, \"src/RadCalNet/data/sample.dat\"))\n\n # Provide a seed at start-up for *maybe* reproducible builds.\n Random.seed!(42)\n\n if !isfile(testname)\n RadCalNet.createcustomdatabase(;\n sampler! = RadCalNet.datasampler!,\n repeats = 3,\n samplesize = 3,\n cleanup = true,\n saveas = testname,\n override = true\n )\n end\n\n return RadCalNet.loaddatabase(testname)\nend\n\nA = sampledatabase()[:, end-5:end]\n\n# output\n\n9×6 Matrix{Float32}:\n 0.61 0.0006522 0.00680899 0.127997 1.4369f5 0.784483\n 0.63 0.00147905 0.0163017 0.256072 52761.9 0.493376\n 0.8 0.00181013 0.0525569 0.209679 1712.82 0.743175\n 0.69 0.000962085 0.0317917 0.0917254 3.80101f5 0.88582\n 0.69 0.00246231 0.0538234 0.418247 1442.63 0.479691\n 0.68 0.00210072 0.00470752 0.0997078 71325.7 0.79875\n 0.67 0.000770321 0.0101432 0.0812446 3.0696f5 0.815462\n 0.7 0.00154008 0.0215186 0.253691 24945.7 0.478712\n 0.53 0.00133843 0.0180676 0.234852 21784.6 0.7443","category":"page"},{"location":"RadCalNet/#To-do's","page":"RadCalNet","title":"To-do's","text":"","category":"section"},{"location":"RadCalNet/","page":"RadCalNet","title":"RadCalNet","text":"Broaden sample space over the whole RadCal composition spectrum.\nDefine data loading on GPU/CPU though a flag when recovering model.\nCreate database for testing outside of sampling points.\nImprove model reload and organize a notebook for training.","category":"page"},{"location":"RadCalNet/#Literature-discussion","page":"RadCalNet","title":"Literature discussion","text":"","category":"section"},{"location":"RadCalNet/","page":"RadCalNet","title":"RadCalNet","text":"using DelimitedFiles\nusing HDF5\nusing Plots\nusing Printf\n\nusing WallyToolbox\nimport RadCalNet\n\nfunction gorogcomposition()\n X = zeros(14)\n X[1] = 0.2\n X[2] = 0.2\n X[end] = 1.0 - sum(X[1:2])\n return X\nend\n\nfunction gorogsemissivitydata()\n pr = collect(0.0:0.015:3.2)\n Tg = [830.0, 1110.0, 1390.0]\n\n X = gorogcomposition()\n prod = Iterators.product(pr, Tg)\n samplesize = length(pr) * length(Tg)\n table = zeros(samplesize, 26)\n\n for (k, (p, T)) in enumerate(prod)\n table[k, 1:end] = RadCalNet.runradcalinput(;\n X = X,\n T = T,\n L = p / sum(X[1:2]),\n TWALL = 300.0,\n FV = 1.0e-15\n )\n end\n\n return table\nend\n\nfunction gorogsabsorptivitydata()\n pr = collect(0.0:0.01:1.6)\n Tw = [277.0, 555.0, 833.0]\n\n X = gorogcomposition()\n prod = Iterators.product(pr, Tw)\n samplesize = length(pr) * length(Tw)\n table = zeros(samplesize, 26)\n\n for (k, (p, T)) in enumerate(prod)\n table[k, 1:end] = RadCalNet.runradcalinput(;\n X = X,\n T = 1110.0,\n L = p / sum(X[1:2]),\n TWALL = T,\n FV = 1.0e-15\n )\n end\n\n return table\nend\n\nfunction plotgorogsemissitivity(εdata, εgorog)\n p = plot(dpi = 100, legend = :topleft)\n scatter!(p, εdata[1][:, 1], εdata[1][:, 2],\n markerstrokewidth = 0.0, label = \"Gorog\")\n\n for T in unique(εgorog[:, 4])\n sel = εgorog[εgorog[:, 4] .== T, :]\n pr = sum(sel[:, 8:9], dims = 2) .* sel[:, 5]\n εg = sel[:, 24]\n plot!(p, pr, εg, label = @sprintf(\"%4.0f K\", T))\n end\n\n xlims!(p, 0.0, 3.2)\n ylims!(p, 0.0, 0.7)\n xticks!(p, 0.0:0.4:3.2)\n yticks!(p, 0.0:0.1:0.7)\n\n xlabel!(p, \"Optical thickness [m-atm]\")\n ylabel!(p, \"Emissivity\")\n\n p\nend\n\nfunction plotgorogsabsorptivitydata(αdata, αgorog)\n p = plot(dpi = 100, legend = :topleft)\n scatter!(p, αdata[1][:, 1], αdata[1][:, 2],\n markerstrokewidth = 0.0, label = \"Gorog\")\n\n for T in unique(αgorog[:, 3])\n sel = αgorog[αgorog[:, 3] .== T, :]\n pr = sum(sel[:, 8:9], dims = 2) .* sel[:, 5]\n αg = 1.0 .- sel[:, end]\n plot!(p, pr, αg, label = @sprintf(\"%4.0f K\", T))\n end\n\n xlims!(p, 0.0, 1.6)\n ylims!(p, 0.0, 1.0)\n xticks!(p, 0.0:0.2:1.6)\n yticks!(p, 0.0:0.2:1.0)\n\n xlabel!(p, \"Optical thickness [m-atm]\")\n ylabel!(p, \"Absorptivity\")\n\n p\nend\n\ndatadir = @__DIR__\n\nεfig = joinpath(datadir, \"media/emissivity.png\")\nαfig = joinpath(datadir, \"media/absorptivity.png\")\n\nεfile = joinpath(datadir, \"data/emissivity.csv\")\nαfile = joinpath(datadir, \"data/absorptivity.csv\")\n\nif !isfile(εfig)\n εdata = readdlm(εfile, ',', Float64, header = true)\n εgorog = gorogsemissivitydata()\n p = plotgorogsemissitivity(εdata, εgorog)\n png(p, εfig)\nend\n\nif !isfile(αfig)\n αdata = readdlm(αfile, ',', Float64, header = true)\n αgorog = gorogsabsorptivitydata()\n p = plotgorogsabsorptivitydata(αdata, αgorog)\n png(p, αfig)\nend","category":"page"},{"location":"RadCalNet/#Verification-agains-Gorog's-paper","page":"RadCalNet","title":"Verification agains Gorog's paper","text":"","category":"section"},{"location":"RadCalNet/","page":"RadCalNet","title":"RadCalNet","text":"Below we compare computed values with those by Gorog et al. [4]. Reference paper is found here.","category":"page"},{"location":"RadCalNet/","page":"RadCalNet","title":"RadCalNet","text":"(Image: Emissivity)","category":"page"},{"location":"RadCalNet/","page":"RadCalNet","title":"RadCalNet","text":"(Image: Absorptivity)","category":"page"},{"location":"RadCalNet/","page":"RadCalNet","title":"RadCalNet","text":"At least qualitative agreement is found and orders of magnitude are right. On the other hand, using directly the model parameters from Tam [5] do not produce the expected results (not displayed, work in progress in this draft). It is not clear how the data is pre- and post-processed for use with their network.","category":"page"},{"location":"RadCalNet/#All-interfaces","page":"RadCalNet","title":"All interfaces","text":"","category":"section"},{"location":"RadCalNet/","page":"RadCalNet","title":"RadCalNet","text":"Modules = [ RadCalNet ]","category":"page"},{"location":"RadCalNet/#RadCalNet.ModelData","page":"RadCalNet","title":"RadCalNet.ModelData","text":"ModelData(fpath::String; f_train::Float64 = 0.7)\n\nLoad HDF5 database stored under fpath and performs standardized workflow of data preparation for model training. The data is split under training and testing datasets with a fraction of training data of f_train.\n\nscaler::StatsBase.ZScoreTransform{Float32, Vector{Float32}}: Scaler used for data transformation.\nX_train::Matrix{Float32}: Matrix of training input data.\nY_train::Matrix{Float32}: Matrix of training output data.\nX_tests::Matrix{Float32}: Matrix of testing input data.\nY_tests::Matrix{Float32}: Matrix of testing output data.\nn_inputs::Int64: Number of model inputs.\nn_outputs::Int64: Number of model outputs.\n\n\n\n\n\n","category":"type"},{"location":"RadCalNet/#RadCalNet.ModelTrainer","page":"RadCalNet","title":"RadCalNet.ModelTrainer","text":"ModelTrainer(\n data::ModelData,\n model::Chain;\n batch::Int64=64,\n epochs::Int64=100,\n η::Float64=0.001,\n β::Tuple{Float64,Float64}=(0.9, 0.999),\n ϵ::Float64=1.0e-08\n)\n\nHolds standardized model training parameters and data.\n\nbatch::Int64: Batch size in training loop.\nepochs::Int64: Number of epochs to train each time.\ndata::RadCalNet.ModelData: Database structure used for training/testing.\nmodel::Flux.Chain: Multi-layer perceptron used for modeling.\noptim::NamedTuple: Internal Adam optimizer.\nlosses::Vector{Float32}: History of losses.\n\n\n\n\n\n","category":"type"},{"location":"RadCalNet/#RadCalNet.createcustomdatabase-Tuple{}","page":"RadCalNet","title":"RadCalNet.createcustomdatabase","text":"createcustomdatabase(;\n sampler!::Function,\n repeats::Int64 = 100,\n samplesize::Int64 = 50_000,\n cleanup::Bool = false,\n saveas::String = \"database.h5\",\n OMMIN::Float64 = 50.0,\n OMMAX::Float64 = 10000.0,\n override::Bool = false\n)\n\nCreates a custom database by generating a number repeats of samples of samplesize rows. Inputs for runradcalinput are to be generated by a sampler! user-defined function which modifies in place an array of compositions, and returns T, L, P, FV, TWALL for setting up a simulation. Files are temporarilly stored under data/ with a sequential numbered naming during database creation and aggregated in a HDF5 file named after saveas. The choice to aggregate files after an initial dump is because generation can be interrupted and manually recovered in an easier way and avoiding any risk of data losses - database creation can take a very long time. If cleanup is true, all intermediate files are removed.\n\n\n\n\n\n","category":"method"},{"location":"RadCalNet/#RadCalNet.datasampler!-Tuple{Vector{Float64}}","page":"RadCalNet","title":"RadCalNet.datasampler!","text":"datasampler!(X::Vector{Float64})::Tuple\n\nCustom sample space to generate entries with createcustomdatabase. This function contains the parameter space used for model training.\n\n\n\n\n\n","category":"method"},{"location":"RadCalNet/#RadCalNet.defaultmodel-Tuple{}","page":"RadCalNet","title":"RadCalNet.defaultmodel","text":"defaultmodel()\n\nBuild model structure with which RadCalNet is trained.\n\n\n\n\n\n","category":"method"},{"location":"RadCalNet/#RadCalNet.dumpscaler-Tuple{StatsBase.ZScoreTransform{Float32, Vector{Float32}}, String}","page":"RadCalNet","title":"RadCalNet.dumpscaler","text":"dumpscaler(scaler::ZScoreTransform{Float32,V32}, saveas::String)\n\nWrite z-score scaler mean and scale to provided saveas YAML file.\n\n\n\n\n\n","category":"method"},{"location":"RadCalNet/#RadCalNet.getradcalnet-Tuple{}","page":"RadCalNet","title":"RadCalNet.getradcalnet","text":"getradcalnet(;\n scale = true,\n fscaler = nothing,\n fmstate = nothing\n)\n\nLoad trained model and scaler to compose RadCalNet. If testing new models, it might be useful to use fscaler and fmstate to point to specific versions of scaler and model state files.\n\n\n\n\n\n","category":"method"},{"location":"RadCalNet/#RadCalNet.loaddatabase-Tuple{String}","page":"RadCalNet","title":"RadCalNet.loaddatabase","text":"loaddatabase(fname::String)\n\nRetrieve database from HDF5 file and access table as a matrix.\n\n\n\n\n\n","category":"method"},{"location":"RadCalNet/#RadCalNet.loadscaler-Tuple{String}","page":"RadCalNet","title":"RadCalNet.loadscaler","text":"loadscaler(fname::String)::Function\n\nLoad z-scaler in functional format from YAML fname file.\n\n\n\n\n\n","category":"method"},{"location":"RadCalNet/#RadCalNet.makemodel-Tuple{Vector{Tuple{Int64, Any}}}","page":"RadCalNet","title":"RadCalNet.makemodel","text":"makemodel(layers::Vector{Tuple{Int64, Any}}; bn = false)::Chain\n\nCreate a multi-layer perceptron for learning radiative properties with the provided layers. If bn is true, then batch normalization after each layer. The final layer has by default a sigmoid function to ensure physical outputs in range [0, 1].\n\n\n\n\n\n","category":"method"},{"location":"RadCalNet/#RadCalNet.model","page":"RadCalNet","title":"RadCalNet.model","text":"model(x::Vector{Float32})::Vector{Float32}\n\nMain model interface for emissivity and transmissivity.\n\n\n\n\n\n","category":"function"},{"location":"RadCalNet/#RadCalNet.plottests-Tuple{RadCalNet.ModelTrainer}","page":"RadCalNet","title":"RadCalNet.plottests","text":"plottests(trainer::ModelTrainer; num::Int64)\n\nEvaluate model over num data points and compare the data to the expected values as computed from RadCal. Makes use of test data only - never seem by the model during training.\n\n\n\n\n\n","category":"method"},{"location":"RadCalNet/#RadCalNet.runradcalinput-Tuple{}","page":"RadCalNet","title":"RadCalNet.runradcalinput","text":"runradcalinput(;\n X::Dict{String, Float64} = Dict{String, Float64}(),\n T::Float64 = 300.0,\n L::Float64 = 1.0,\n P::Float64 = 1.0,\n FV::Float64 = 0.0,\n OMMIN::Float64 = 50.0,\n OMMAX::Float64 = 10000.0,\n TWALL::Float64 = 500.0,\n radcalexe::String = \"radcal_win_64.exe\"\n)::Vector{Float64}\n\nCreate RADCAL.IN from template file and dump to disk.\n\nNOTE: the user is responsible to provide a vector X of mole fractions of species that sums up to one. If this is not respected RADCAL fails. The Following list provides the indexes of available species in vector X.\n\nIndex Species Index Species Index Species\n1 CO2 6 C2H6 11 CH3OH\n2 H2O 7 C3H6 12 MMA\n3 CO 8 C3H8 13 O2\n4 CH4 9 C7H8 14 N2\n5 C2H4 10 C7H16 \n\n\n\n\n\n","category":"method"},{"location":"RadCalNet/#RadCalNet.samplecols-Tuple{Int64, Int64}","page":"RadCalNet","title":"RadCalNet.samplecols","text":"Get sample of indexes for data retrieval. \n\n\n\n\n\n","category":"method"},{"location":"RadCalNet/#RadCalNet.tests-Tuple{RadCalNet.ModelData, Int64}","page":"RadCalNet","title":"RadCalNet.tests","text":"Get testing data for data loader construction. \n\n\n\n\n\n","category":"method"},{"location":"RadCalNet/#RadCalNet.train-Tuple{RadCalNet.ModelData, Int64}","page":"RadCalNet","title":"RadCalNet.train","text":"Get training data for data loader construction. \n\n\n\n\n\n","category":"method"},{"location":"RadCalNet/#RadCalNet.trainonce!-Tuple{RadCalNet.ModelTrainer}","page":"RadCalNet","title":"RadCalNet.trainonce!","text":"trainonce!(trainer::ModelTrainer; num = 1_000)\n\nTrain model and keep track of loss for the number of epochs in trainer using its internal data and parameters. Use num data points.\n\n\n\n\n\n","category":"method"},{"location":"References/@Guo2023d/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Guo2023d/","page":"-","title":"-","text":"title: \"Unraveling the design pattern of physics-informed neural networks: Series 04\" authors: Shuai Guo year: 2023 URL: https://towardsdatascience.com/unraveling-the-design-pattern-of-physics-informed-neural-networks-part-04-c778f4829dde –- Discussed [[@Yu2022a]].","category":"page"},{"location":"References/@Arthurs2021a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Arthurs2021a/","page":"-","title":"-","text":"title: Active training of physics-informed neural networks to aggregate and interpolate parametric solutions to the Navier-Stokes equations authors: Christopher J. Arthurs, Andrew P. King year: 2021 URL: https://doi.org/10.1016/j.jcp.2021.110364 Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZla8i8cvFX_ZGzT6Z9A?e=MJdHtJ –-","category":"page"},{"location":"Teaching/OpenFOAM/Cases/aachenBombSteady/#Breakdown-into-sub-models","page":"-","title":"Breakdown into sub-models","text":"","category":"section"},{"location":"Teaching/OpenFOAM/Cases/aachenBombSteady/","page":"-","title":"-","text":"[x] Incompressible flow only for mesh and conditions check with incompressibleFluid:","category":"page"},{"location":"Teaching/OpenFOAM/Cases/aachenBombSteady/","page":"-","title":"-","text":"- After a first run with a system length of 1 m it was decided to increase the domain to 2 m in order to ensure a better development of flow profile (at least 10 times the cross section size) and double the number of cells in transversal directions.\n- It was confirmed that the inlet mean velocity profile respects the expected value from the imposed mass flow rate evaluated during parameters setup, but outlet is controversial. This is probably because the case should be run as turbulent or grid is too coarse.\n- Mass conservation was monitored and confirmed through field `phi`.\n- It must be emphasized that boundary layer resolution is not accurate since no grading is applied and mesh is very coarse, but since the goal is flare development far from the walls this is acceptable at this stage and will be dealt with at a later stage.\n- All residuals are going down adequately, allowing us to move to the next step. \n- Calculation took approximately 10 seconds with 1 core.","category":"page"},{"location":"Teaching/OpenFOAM/Cases/aachenBombSteady/","page":"-","title":"-","text":"[x] Previous case is copied and support to RAS k-varepsilon ([[@Launder1974]]) [6] is implemented:","category":"page"},{"location":"Teaching/OpenFOAM/Cases/aachenBombSteady/","page":"-","title":"-","text":"- With inclusion of turbulence the actual outlet velocity matches the expected value (that was unphysical in the previous simulation), validating the approach.\n- Entry length is verified through velocity and turbulent viscosity, confirming the need to extend the domain for a proper development.\n- The number of iterations was increased to 200 to ensure that everything has properly converged, reaching an extremely low residuals level for all variables.\n- Other previous observations are still valid, allowing us to move to the next step.\n- Calculation took approximately 11 seconds with 1 core to perform 100 iterations. After 100 iterations the step convergence becomes slow because of the already low residuals, leading to a calculation time of 38 seconds.","category":"page"},{"location":"Teaching/OpenFOAM/Cases/aachenBombSteady/","page":"-","title":"-","text":"[x] Adding compressible flow with multicomponentFluid to the above:","category":"page"},{"location":"Teaching/OpenFOAM/Cases/aachenBombSteady/","page":"-","title":"-","text":"- The temperature field is added prior to handling any combustion aspects in this step to avoid having interaction between these elements in convergence checks. \n- Nonetheless, gravity was already added here after a first run without it for a basic check. A vertical pressure profile is observed in the cross-section, showing the expected buoyancy effects.\n- Other Impacted files include physical properties, which now incorporate more detailed thermodynamics, `alphat` and, at least, the main chemical component file with boundary and initial conditions. \n- The mean value of `phi` in the outlet can now be compared to the imposed mass flow rate, validating the boundary condition setup.\n- Calculation took approximately 13 seconds with 1 core to perform 100 iterations. Again an important slow down is observed leading to 125 seconds to perform 300 iterations.","category":"page"},{"location":"Teaching/OpenFOAM/Cases/aachenBombSteady/","page":"-","title":"-","text":"[x] The next logical step is to include evaporation of fuel in the gas, without enabling reactions:","category":"page"},{"location":"Teaching/OpenFOAM/Cases/aachenBombSteady/","page":"-","title":"-","text":"- The simples way of doing so is adding the required chemical and associated initial file without adding any combustion or reaction parameters. It was chosen to use the actual species name instead of simply *fuel* to keep created files compatible with next steps. Simulation was checked before adding the cloud, which exponentially complexifies the setup.\n- A `patchPostProcessing` cloud function was tested at first to check if conditions were leading to complete fuel evaporation. It is kept commented-out for future debug if required. To make results easier to interpret, a fixed size PSD was adopted at this stage.\n- As expected, convergence is bad and the only strategy that seems to work is mesh refinement. Otherwise pressure coupling becomes difficult and trying to change numerical parameters (solver correctors, linear solver, divergence and Laplacian schemes, relaxation level) do not improve anything. Tried to use `SOI` at a later iteration to let flow converge before injection, but apparently the steady solver ignores this. Even with `localEuler` pseudo-time stepping (requires to add residuals for `rho` in `fvSolution`) it does not seem to take `SOI` into account. Also tried deactivating clouds and converging before reactivating it (what would be equivalent to the later `SOI` approach) and that does not work either, confirming it is a physical coupling problem.\n- Because of mesh refinement, now parallelization becomes a requirement unless we work with mesh grading, what is out of the present scope (to be done only in production scenario). Nonetheless, parallelization does not seem to be of great advantage.","category":"page"},{"location":"Teaching/OpenFOAM/Cases/aachenBombSteady/","page":"-","title":"-","text":"[ ] Activation of global chemistry and combustion modeling:","category":"page"},{"location":"Teaching/OpenFOAM/Cases/aachenBombSteady/","page":"-","title":"-","text":"- From now on the level of physics start becoming too complex and pre-computation of fields should be done whenever compatible. That means that prior to chemistry activation it seems a good idea to let evaporation of droplets converge (testing 1000 iterations).\n- To keep things general, instead of setting up the case with a fixed database of species thermodynamics, it is better to convert Chemkin files.\n-","category":"page"},{"location":"Teaching/OpenFOAM/Cases/aachenBombSteady/","page":"-","title":"-","text":"[ ] Add radiation modeling\n[ ] Add arbitrary empirical fuel modeling","category":"page"},{"location":"Teaching/OpenFOAM/Cases/aachenBombSteady/","page":"-","title":"-","text":"After modification the cases were run again getting the following performances, from which it becomes clear that for the present grid size the parallelization saturates quickly.","category":"page"},{"location":"Teaching/OpenFOAM/Cases/aachenBombSteady/","page":"-","title":"-","text":"Step 1 processor 32 processors\n0 77 14\n1 35\n2 80\n3 \n4 ","category":"page"},{"location":"Teaching/OpenFOAM/Cases/aachenBombSteady/#Future-improvements","page":"-","title":"Future improvements","text":"","category":"section"},{"location":"Teaching/OpenFOAM/Cases/aachenBombSteady/","page":"-","title":"-","text":"[ ] Add the following to the parameters file for full turbulence model controls:","category":"page"},{"location":"Teaching/OpenFOAM/Cases/aachenBombSteady/","page":"-","title":"-","text":"Cmu 0.09;\nC1 1.44;\nC2 1.92;\nC3 0;\nsigmak 1;\nsigmaEps 1.3;","category":"page"},{"location":"Teaching/OpenFOAM/Cases/aachenBombSteady/","page":"-","title":"-","text":"[ ] Add convergence criteria PIMPLE: No convergence criteria found.\n[ ] Consider a possible adaptive mesh refinement at case setup (not runtime!).","category":"page"},{"location":"Teaching/OpenFOAM/Cases/aachenBombSteady/#Reminders","page":"-","title":"Reminders","text":"","category":"section"},{"location":"Teaching/OpenFOAM/Cases/aachenBombSteady/","page":"-","title":"-","text":"Because of potentialFlow initialization, a dictionary corresponding to this must be present in fvSolution as well as a solver for Phi (copy defaults for pressure). Because this solver does not have information about temperature or composition of fluid, a field rhoInlet is required in inlets.","category":"page"},{"location":"Teaching/OpenFOAM/Cases/aachenBombSteady/#Initial-tentative-setup","page":"-","title":"Initial tentative setup","text":"","category":"section"},{"location":"Teaching/OpenFOAM/Cases/aachenBombSteady/","page":"-","title":"-","text":"This case aims producing a steady state liquid fuel combustion model using aachenBomb case as a starting point, but does not directly tries to reproduce the results of that case. It was modified so that there is an inlet and an outlet for flame development.\nTo perform the setup we retrieve several modifications from verticalChannelSteady and verticalChannelLTS. The first because it is the only case under multicomponentFluid solver currently using a steadyState time-stepping scheme and the latter due to the use of localEuler, which is often used to produce pseudo-steady solutions when a direct steady state calculations becomes unstable (as it is the case in most combustion calculations).\nModify controlDict to integer steps (that is, each step is an iteration) for both time-step and write controls, and enable purgeWrite to keep case cleaner. Notice that this is also valid if using a localEuler time-stepping scheme. Change time-stepping method accordingly in fvSchemes.\nTo increase robustness of solution, it is recommended to compute a potential flow with potentialFoam as in reference case verticalChannelLTS. This requires a solver control field Phi in fvSolution and a reference rhoInlet value to be provided in inlet flow velocity. Other parameters, but specially maxCo are also copied from reference case.\nSome dictionaries in cloudProperties require steady-state specific commands, such as adding calcFrequency to solution, resetOnStartup to solution.sourceTerms, and injection models must use massFlowRate, what is physically understandable.\nCombustion is quite sensitive and Seulex alone does not seem able to handle it with an EDC approach. First flow was developed further during 100 steps before activating chemistry. For now using a single step infinitelyFastChemistry to try to stabilize the behavior before trying back to use the EDC model.","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Solver-Modules/#multicomponentFluid","page":"-","title":"multicomponentFluid","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Solver-Modules/","page":"-","title":"-","text":"In OpenFOAM v11 solver module multicomponentFluid provides approaches for setting up the simulation of fluids with multiple species, including combustion.","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Solver-Modules/#Tutorial-cases","page":"-","title":"Tutorial cases","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Solver-Modules/","page":"-","title":"-","text":"DLRALTS\nSandiaD_LTS\naachenBomb: global combustion kinetics of droplets released in a box.\ncounterFlowFlame2D\ncounterFlowFlame2DLTS\ncounterFlowFlame2DLTSGRITDAC\ncounterFlowFlame2D_GRI\ncounterFlowFlame2DGRITDAC\nfilter\nlockExchange\nmembrane\nnc7h16: zero dimensional model of homogeneous kinetics.\nparcelInBox: evaporation of a single water particle in a closed box.\nsimplifiedSiwek: co-combustion of coal and limestone clouds in Siwek chamber.\nsmallPoolFire2D\nsmallPoolFire3D\nverticalChannel: water droplet evaporation in a vertical channel.\nverticalChannelLTS: same as verticalChannel but with local time-stepping.\nverticalChannelSteady: same as verticalChannel but at steady state.","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Solver-Modules/#Built-cases","page":"-","title":"Built cases","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Solver-Modules/","page":"-","title":"-","text":"aachenBombSteady: this case was created as a tentative to simulate a steady spray combustion starting from aachenBomb tutorial but after several failures it became a case of its own. The case we have today was built bottom-up, from a simple flow in a box to the level of combustion, including several intermediate steps used to understand how the different options and models interacted. For now its name will remain like this in reference to where it started, but in the future I might come up with a better one.","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Solver-Modules/#incompressibleDenseParticleFluid","page":"-","title":"incompressibleDenseParticleFluid","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Solver-Modules/","page":"-","title":"-","text":"In OpenFOAM v11 solver module incompressibleDenseParticleFluid provides approaches for setting up a transient flow interacting with particles. It handles incompressible isothermal flows with fluid-particle interactions, including cases with dense packing of particles, such as packed beds or initialization of fluidized beds for solution with other approaches.","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Solver-Modules/#Tutorial-cases-2","page":"-","title":"Tutorial cases","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Solver-Modules/","page":"-","title":"-","text":"Goldschmidt\nGoldschmidtMPPIC\ncolumn\ncyclone\ninjectionChannel","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Solver-Modules/#Boundary-fields","page":"-","title":"Boundary fields","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Solver-Modules/","page":"-","title":"-","text":"Boundary fields in general are almost the same as any case in pure fluid simulations but transported quantities must be named by appending the name of the continuous phase specified in constant/physicalProperties as continuousPhaseName . To make it simple let's call this phase air in what follows. Notice that pressure file name remains unchanged since it is not really transported as you don't have an equation in the form of Reynolds transport theorem for it.","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Solver-Modules/","page":"-","title":"-","text":"That said, we have things as k.air and U.air. The particularity here is that you must provide phi for all hydrodynamic solution variables (such as k.air, U.air) in outlets, what is implicit in single phase flow models. That means that an outlet for velocity should include something as","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Solver-Modules/","page":"-","title":"-","text":"outlet\n{\n\ttype pressureInletOutletVelocity;\n\tphi phi.air;\n\tinletValue uniform (0 0 0);\n\tvalue uniform (0 0 0);\n}","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Solver-Modules/#Creating-cloudProperties","page":"-","title":"Creating cloudProperties","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Solver-Modules/","page":"-","title":"-","text":"Most default values in solution dictionary should be fine for typical fluid-particle applications, but for phase interaction it is important to configure coupled as true so that drag forces are applied to the particles and conversely, particles disturb the fluid. ","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Solver-Modules/","page":"-","title":"-","text":"We must also turn on cellValueSourceCorrection, which will correct cell values using latest transfer information. These elements as given in the following block (you can check the full dictionary in the official OpenFOAM tutorials for other details).","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Solver-Modules/","page":"-","title":"-","text":"solution\n{\n\tcoupled                   true;\n\ttransient                 yes;\n\tcellValueSourceCorrection on;\n\tmaxCo                     0.7;\n\n\t...\n}","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Solver-Modules/","page":"-","title":"-","text":"Being a momentum cloud, MPPICCloud makes use only of patchInteractionModel localInteraction for interaction with the environment and collisions between particles are not taken into account (that is not completely true if you consider the packing effects that can be enabled as collisions). Again, it is better to go deeper in the case studies.","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Solver-Modules/","page":"-","title":"-","text":"The main models for setting up a particle simulation in constant/cloudProperties are the [[Physical Models#Injection models|InjectionModel]] and the ParticleForce to be used. Notice that when dealing with incompressibleDenseParticleFluid the main ParticleForce models other than gravity are inherited by DenseDragForce.","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"The following numerical experiments concern the horizontalMixer sample case.","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/#Conceptual-phase","page":"-","title":"Conceptual phase","text":"","category":"section"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"Minimal working examples:","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"000: no models active other than patchInteraction rebound.","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"(Image: Case 000)","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"001: no models active other than patchInteraction standardWallInteraction.","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"(Image: Case 001)","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"002: no models active other than patchInteraction localInteraction.","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"(Image: Case 002)","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"If there are outlets in the system, rebound model is not suitable. Because of this, all the next cases, unless stated otherwise, will use localInteraction given the better control it provides over individual patches with respect to standardWallInteraction (although it is much slower than the latter).","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"007: compare solution for same (approximate) mass flow with using multiple particles per parcel - with respect to the single particle per parcel performed in the reference case 002. The overall cloud shape remains the same but some spatial resolution is lost. For conception studies it seems valid to use a higher number of particles per parcel.","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"(Image: Case 007)","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"Using the basic patchInteraction localInteraction add these variants (notice that the option none for all these models is already covered by the reference case 002. After comparing cases 002 and 007 the following variants were modified to match 007 as a reference case given the much lower computational time (more particles per parcel).","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"003: packingModel explicit.","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"(Image: Case 003)","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"004: packingModel implicit.","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"(Image: Case 004)","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"005: dampingModel relaxation. Particle velocities are relaxed towards the local mean over a time-scale. Notice that reference paper intended to improve MP-PIC for polydisperse sedimenting particle clouds.","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"(Image: Case 005)","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"006 isotropyModel stochastic. According to the reference paper collisions cause numerical particles to scatter in MP-PIC calculations, just as physical particles do in particle/fluid flows, just as the generated animation implies.","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"(Image: Case 006)","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"Implicit packing so far is the only model for which particles left the system and turbulence effects and segregation becomes apparent. In fact without implicit packing the results do not even look physical, so it is probably a requirement to activate this model. Damping and isotropy models produce similar results, with a little more dispersed cloud when isotropy is active, as stated above from its reference.","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"Hypotheses testing cases:","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"008: modify case 004 to test if with rebound patch interaction particles are able to quit the system. Confirmed that this patch interaction does not handle outlets.","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"(Image: Case 008)","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"009: modify case 004 to test if with standardWallInteraction patch interaction particles are able to quit the system. Confirmed that this patch interaction does handle outlets similarly to the localInteraction. It was not possible to confirm if inlets also allow backflow since reporting is not provided by patch.","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"(Image: Case 009)","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"010: check the role of gravity option over implicit packing model. Here we derive a variant of 009 because it runs faster than with localInteraction. ","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"(Image: Case 010)","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"011: in fact the role of gravity in 010 was pretty devastating over the sedimentation rate (quite unexpected given the particle sizes that were used) so a variant of this case was manually initialized from last state and left to run for a much longer physical time (100 s) using maxCo 2.0 for faster execution. CALCULATION DIVERGED, REDO!","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/#Physical-refinement-phase","page":"-","title":"Physical refinement phase","text":"","category":"section"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"Model Takings\nInjectionModel CONFIRM CONCLUSIONS WITH POLYDISTRIBUTED CLOUDS (particles per parcel)!\nPatchInteractionModel This model is key for the simulation of particles coupled to a fluid. Unless different behavior is expected in the different walls so customization of interaction is required, it is much faster to use a standardWallInteraction approach. For understanding the role of parameters e and mu over rebound one can check lines 144-168 of source code and confirm the model is the same as the one implemented in localInteraction in lines 366-391 of sources.\nPackingModel \nDampingModel \nIsotropyModel \nParticleForce This will be discussed in this section.","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"Solution with different drag models:","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"Model Results\nsphereDrag (Image: Case 012) 012\nWenYuDrag (used in injectionChannel) implemented from equation (2.12) of ([[@Gidaspow1994]]) [7]. (Image: Case 013) 013\nErgunWenYuDrag (used in Goldschmidt, cyclone, and column) implemented from equation (5.11) of ([[@Gidaspow1994]]) [7]. (Image: Case 014) 014","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"Other drag models:","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"Model Details\nPlessisMasliyahDrag Used in GoldschmidtMPPIC. Implemented from ([[@Plessis1988]]) [8] is adapted for flow through consolidated isotropic porous media. This is outside the scope of the current study but functionality is tested anyways from a computational point of view and to understand its behavior far from its reference application. Calculation diverged, so no results are available.\ndistortedSphereDrag Not used in any tutorial. Implemented as per ([[@Liu1993]]) [9] is conceived for the simulation of the effects of drop drag and breakup on fuel sprays. This is far from our scope and is not tested.\nnonSphereDrag Not used in any tutorial. Implemented as per ([[@Haider1989]]) [10] is a drag model for non-spherical particles. Its most important parameter is phi, the ratio of the surface area of a sphere with the same volume as the particle to the actual surface area of the particle.\nSchillerNaumannDrag Not used in any tutorial. Implemented according the classical paper by Schiller (1935) for modeling drag over spheres.","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"Solution with different sizeDistribution:","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"[ ] fixedValue\n[ ] normal\n[ ] RosinRammler\n[ ] tabulatedDensity","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"Solution with different cloud types","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"MPPICCloud\ncollidingCloud","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"For the PackingModelone needs to specify the ParticleStressModel among the following:","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"Model Details\nHarrisCrighton \nLun ","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"For both DampingModel and IsotropyModel one needs a TimeScaleModel","category":"page"},{"location":"Teaching/OpenFOAM/Cases/horizontalMixer/","page":"-","title":"-","text":"Option Details\nequilibrium \nisotropic \nnonEquilibrium ","category":"page"},{"location":"References/@Guo2023c/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Guo2023c/","page":"-","title":"-","text":"title: \"Unraveling the design pattern of physics-informed neural networks: Series 03\" authors: Shuai Guo year: 2023 URL: https://towardsdatascience.com/unraveling-the-design-pattern-of-physics-informed-neural-networks-part-03-fe365ef480d9 –- Discussed [[@Krishnapriyan2021a]]","category":"page"},{"location":"References/@Antonelo2021a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Antonelo2021a/","page":"-","title":"-","text":"title: Physics-informed neural nets for control of dynamical systems authors: Eric Aislan Antonelo, Eduardo Camponogara, Laio Oriel Seman, Eduardo Rehbein de Souza, Jean P. Jordanou, Jomi F. Hubner year: 2021 URL: https://doi.org/10.48550/arXiv.2104.02556 –-","category":"page"},{"location":"References/@Pena2001a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Pena2001a/","page":"-","title":"-","text":"title: Stability of Turing patterns in the Brusselator model authors: B. Peña, C. Pérez-García year: 2001 URL: https://doi.org/10.1103/PhysRevE.64.056213 Drive: –-","category":"page"},{"location":"References/@Fang2023a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Fang2023a/","page":"-","title":"-","text":"title: \"Ensemble learning for physics informed neural networks: a gradient boosting approach\" authors: Zhiwei Fang, Sifan Wang, Paris Perdikaris year: 2023 DOI: https://doi.org/10.48550/arXiv.2302.13143 –-","category":"page"},{"location":"References/@Fang2023a/","page":"-","title":"-","text":"Discussed in [[@Guo2023c]].","category":"page"},{"location":"References/@Karniadakis2021a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Karniadakis2021a/","page":"-","title":"-","text":"title: Physics-informed machine learning authors: George Em Karniadakis, Ioannis G. Kevrekidis, Lu Lu, Paris Perdikaris, Sifan Wang, Liu Yang year: 2021 –-","category":"page"},{"location":"References/@Guo2023b/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Guo2023b/","page":"-","title":"-","text":"title: \"Unraveling the design pattern of physics-informed neural networks: Series 02\" authors: Shuai Guo year: 2023 URL: TODO –-","category":"page"},{"location":"References/@Plessis1988/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Plessis1988/","page":"-","title":"-","text":"title: Mathematical modelling of flow through consolidated isotropic porous media authors: J. Prieur Du Plessis, Jacob H. Masliyah year: 1988 URL: TODO –-","category":"page"},{"location":"Teaching/Machine Learning/PINNs/","page":"-","title":"-","text":"Physics-Informed Neural Networks (PINNs) were first introduced by [[@Raissi2017]] in the context of providing data-driven solutions of nonlinear PDE's. In what follows we review the basic concepts and approaches developed in this field during the past few years. Both mathematical and application aspects will be treated in the review.","category":"page"},{"location":"Teaching/Machine Learning/PINNs/#Common-applications","page":"-","title":"Common applications","text":"","category":"section"},{"location":"Teaching/Machine Learning/PINNs/","page":"-","title":"-","text":"As per [[@Guo2024a]] the following common applications arise from PINNs:","category":"page"},{"location":"Teaching/Machine Learning/PINNs/","page":"-","title":"-","text":"Predictive modeling and simulations","category":"page"},{"location":"Teaching/Machine Learning/PINNs/","page":"-","title":"-","text":"- Solution of dynamical systems (even high-dimensional)\n- Acceleration of multi-physics simulations","category":"page"},{"location":"Teaching/Machine Learning/PINNs/","page":"-","title":"-","text":"Optimization and systems control","category":"page"},{"location":"Teaching/Machine Learning/PINNs/","page":"-","title":"-","text":"- Surrogate models for design optimization\n- Inverse design (finding conditions)\n- Model predictive control\n- Optimal sensor placement","category":"page"},{"location":"Teaching/Machine Learning/PINNs/","page":"-","title":"-","text":"Data-driven insights\nData-driven enhancement\nMonitoring, diagnostic, and health assessment","category":"page"},{"location":"Teaching/Machine Learning/PINNs/#Key-Ideas","page":"-","title":"Key Ideas","text":"","category":"section"},{"location":"Teaching/Machine Learning/PINNs/","page":"-","title":"-","text":"Inject the prediction values in the governing equations to compose the loss function, enforcing the NN to obey the underlying physics.\nThere are 2 components in the loss function, the physical loss evaluated from the deviation from training data (as is commonplace in NN training) and the PDE loss, which is further divided into boundary and initial condition losses.\nCollocation points is how we call the temporal and spacial coordinates where evaluation of physical properties are computed, corresponding to nodes or cell centers in classical numerical schemes.","category":"page"},{"location":"Teaching/Machine Learning/PINNs/#Research-opportunities","page":"-","title":"Research opportunities","text":"","category":"section"},{"location":"Teaching/Machine Learning/PINNs/","page":"-","title":"-","text":"Following [[@Guo2023a]] citing the work by [[@Wu2022a]], resampling and refinement methods could be improved by better PDF's and the use of active or reinforcement learning to improve sampling.","category":"page"},{"location":"Teaching/Machine Learning/PINNs/#References","page":"-","title":"References","text":"","category":"section"},{"location":"Teaching/Machine Learning/PINNs/","page":"-","title":"-","text":"Unraveling the design pattern of physics-informed neural networks:","category":"page"},{"location":"Teaching/Machine Learning/PINNs/","page":"-","title":"-","text":"Post Subject Main reference(s)\n[[@Guo2023a]] Resampling of residual points [[@Wu2022a]]\n[[@Guo2023b]] Ensemble learning and dynamic solution interval expansion [[@Haitsiukevich2022a]]\n[[@Guo2023c]] Improving performance through gradient boosting [[@Fang2023a]]\n[[@Guo2023d]] Incorporate the gradient of residual terms as an additional loss term for stiff problems [[@Yu2022a]]\n[[@Guo2023e]] [[@Wang2023a]]\n[[@Guo2023f]] [[@Wang2022a]]\n[[@Guo2023g]] [[@Arthurs2021a]]","category":"page"},{"location":"Teaching/Machine Learning/PINNs/","page":"-","title":"-","text":"Reference Subject\n[[@Lagaris1997a]] Seminal work on PINNs.\n[[@Antonelo2021a]] \n[[@Cai2021a]] \n[[@Cuomo2022a]] \n[[@Haitsiukevich2022a]] \n[[@Karniadakis2021a]] \n[[@Lu2019a]] \n[[@Lu2021a]] \n[[@Nabian2021a]] \n[[@Sanyal2022a]] \n[[@Wurth2023a]] Use of PINNs to solve diffusion equation (heat transfer) during the curing of composites. The paper is more focused in the application than in the implementation. Benchmark against FDM/FEM.","category":"page"},{"location":"Teaching/Machine Learning/PINNs/","page":"-","title":"-","text":"Other current readings:","category":"page"},{"location":"Teaching/Machine Learning/PINNs/","page":"-","title":"-","text":"[ ] Discovering Differential Equations with Physics-Informed Neural Networks and Symbolic Regression\n[ ] Solving Inverse Problems With Physics-Informed DeepONet: A Practical Guide With Code Implementation\n[ ] Introduction to Physics-informed Neural Networks\n[ ] Solving ODE system with PINN\n[ ] Mathematics for Machine Learning and Simulation\n[ ] Physics-Informed Neural Networks (PINNs) - An Introduction - Ben Moseley | The Science Circle\n[ ] Teaching Neural Network to Solve Navier-Stokes Equations\n[ ] Physics-Informed Neural Networks in Julia\n[ ] Scientific AI: Domain Models With Integrated Machine Learning | Chris Rackauckas | JuliaCon 2019","category":"page"},{"location":"References/@Liu1993/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Liu1993/","page":"-","title":"-","text":"title: Modeling the effects of drop drag and breakup on fuel sprays authors: Alex B. Liu, Daniel Mather, Rolf D. Reitz year: 1993 URL: TODO –-","category":"page"},{"location":"References/@Haitsiukevich2022a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Haitsiukevich2022a/","page":"-","title":"-","text":"title: Improved training of physics-informed neural networks with model ensembles authors: Katsiaryna Haitsiukevich, Alexander Ilin year: 2022 URL: https://doi.org/10.48550/arXiv.2204.05108 –-","category":"page"},{"location":"References/@Guo2023e/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Guo2023e/","page":"-","title":"-","text":"title: \"Unraveling the design pattern of physics-informed neural networks: Series 05\" authors: Shuai Guo year: 2023 URL: https://towardsdatascience.com/unraveling-the-design-pattern-of-physics-informed-neural-networks-part-05-67a35a984b23 –-","category":"page"},{"location":"Teaching/Basilisk/Tutorials/#Introductory","page":"-","title":"Introductory","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/#Basilisk-basics","page":"-","title":"Basilisk basics","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/","page":"-","title":"-","text":"Reference Tutorial\nCode 01-Tutorial-Basics\nNotes Basilisk is a conceptual solver for investigating problems in a Cartesian domain.

Different steps of the simulations are set by event's, which use a specific syntax do indicate whether they depend on a time or iteration condition. These steps might include setup of initial conditions, storage of intermediate results or solution, grid refinement, etc.

For iterating over arrays Basilisk provides a foreach()loop extending the C-language.

A standard Makefile is provided by Basilisk for managing common workflows.

Check the tips.","category":"page"},{"location":"Teaching/Basilisk/Tutorials/#Game-of-life","page":"-","title":"Game of life","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/","page":"-","title":"-","text":"Reference Conway’s game of life\nCode 02-Game-of-life\nNotes A simple implementation of Conway's game of life to get used with syntax.","category":"page"},{"location":"Teaching/Basilisk/Tutorials/#Brusselator","page":"-","title":"Brusselator","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/","page":"-","title":"-","text":"Reference Coupled reaction-diffusion equations\nCode 03-Brusselator\nNotes Solves the 2D Brusselator, a theoretical autocatalytic reaction diffusion system. The set of parameters used in the study for the stable Turin points where the ones proposed by ([[@Pena2001a]]) [11]. Interesting material for preparing courses extending this to other oscillating systems can be found here.","category":"page"},{"location":"Teaching/Basilisk/Tutorials/#Ginzburg-Landau","page":"-","title":"Ginzburg-Landau","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/","page":"-","title":"-","text":"Reference The complex Ginzburg-Landau equation\nCode 04-Ginzburg-Landau\nNotes Solves the complex Ginzburg-Landau equation describing the nonlinear evolution of disturbances near the transition from a stable to unstable state of a system. Additional materials are provided here. It would be a good project to include the term alpha in the equation and the Laplacian term that goes with it.","category":"page"},{"location":"Teaching/Basilisk/Tutorials/#Distance-field","page":"-","title":"Distance field","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/","page":"-","title":"-","text":"Reference Distance field computation from a 3D model\nCode 05-Distance-Field\nNotes This can be seen as a particular case of pre-/post-processing. It can prove useful when initializing domains with scanned surfaces in STL or other compatible format. Additional steps must be taken for compilation with rendering (modifications to Makefile). Iteration over dimensions can be done with foreach_dimension().","category":"page"},{"location":"Teaching/Basilisk/Tutorials/#Wavelet-transform","page":"-","title":"Wavelet transform","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/","page":"-","title":"-","text":"Reference Wavelet transforms and filtering\nCode 06-Wavelet-Transform\nNotes Provides a tutorial on wavelet transform and associated filters. It is presented as the basis to understand mesh adaptation in Basilisk. Recommended reading of ([[@Sweldens1998a]]) [12].","category":"page"},{"location":"Teaching/Basilisk/Tutorials/#Navier-Stokes-equation","page":"-","title":"Navier-Stokes equation","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/#Decaying-turbulence","page":"-","title":"Decaying turbulence","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/","page":"-","title":"-","text":"Reference Decaying two-dimensional turbulence\nCode 07-Decaying-Turbulence\nNotes For solving Euler equation with vorticity-stream formulation one uses header file navier-stokes/stream.h. The examples makes a first usage of dimensional quantities for vorticity initialization.","category":"page"},{"location":"Teaching/Basilisk/Tutorials/#Vortex-street","page":"-","title":"Vortex street","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/","page":"-","title":"-","text":"Reference Bénard–von Kármán Vortex Street for flow around a cylinder\nCode 08-Vortex-Street\nNotes Solves the flow around a solid object using the navier-stokes/centered.h solver and introduced the use of passive scalars (tracer). Notice we modify L0, which among many other magic variables is defined in common.h. Illustrates the use of solid and intersection to accomplish complex domains.","category":"page"},{"location":"Teaching/Basilisk/Tutorials/#Vortex-shedding","page":"-","title":"Vortex shedding","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/","page":"-","title":"-","text":"Reference Vortex shedding behind a sphere\nCode 09-Vortex-Shedding\nNotes Solution of Navier-Stokes equations in an adaptive domain embedding an sphere. Vortex detection is made with functionalities from lambda2.h implemented following ([[@Jeong1995a]]) [13].","category":"page"},{"location":"Teaching/Basilisk/Tutorials/#Porous-medium","page":"-","title":"Porous medium","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/","page":"-","title":"-","text":"Reference Stokes flow through a complex 3D porous medium\nCode 10-Porous-Medium\nNotes ","category":"page"},{"location":"Teaching/Basilisk/Tutorials/#Periodic-box","page":"-","title":"Periodic box","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/","page":"-","title":"-","text":"Reference Forced isotropic turbulence in a triply-periodic box\nCode 11-Periodic-Box\nNotes ","category":"page"},{"location":"Teaching/Basilisk/Tutorials/#Two-phase-flows","page":"-","title":"Two-phase flows","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/#Pulsed-atomization","page":"-","title":"Pulsed atomization","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/","page":"-","title":"-","text":"Reference Atomisation of a pulsed liquid jet\nCode 12-Pulsed-Atomisation\nNotes ","category":"page"},{"location":"Teaching/Basilisk/Tutorials/#Bubble-rising","page":"-","title":"Bubble rising","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/","page":"-","title":"-","text":"Reference Bubble rising in a large tank\nCode 13-Bubble-Rising\nNotes ","category":"page"},{"location":"Teaching/Basilisk/Tutorials/#Rotating-cylinder","page":"-","title":"Rotating cylinder","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/","page":"-","title":"-","text":"Reference Flow in a rotating bottom-driven cylindrical container\nCode 14-Rotating-Cylinder\nNotes ","category":"page"},{"location":"Teaching/Basilisk/Tutorials/#Moving-Tangaroa","page":"-","title":"Moving Tangaroa","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/","page":"-","title":"-","text":"Reference Two-phase flow around RV Tangaroa\nCode 15-Moving-Tangaroa\nNotes ","category":"page"},{"location":"Teaching/Basilisk/Tutorials/#Geophysical-applications","page":"-","title":"Geophysical applications","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/#Indian-Tsunami","page":"-","title":"Indian Tsunami","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/","page":"-","title":"-","text":"Reference The 2004 Indian Ocean tsunami\nCode 16-Indian-Tsunami\nNotes ","category":"page"},{"location":"Teaching/Basilisk/Tutorials/#Tohoku-Tsunami","page":"-","title":"Tohoku Tsunami","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/","page":"-","title":"-","text":"Reference The 2011 Tohoku tsunami\nCode 17-Tohoku-Tsunami\nNotes ","category":"page"},{"location":"Teaching/Basilisk/Tutorials/#Train-of-Solitons","page":"-","title":"Train of Solitons","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/","page":"-","title":"-","text":"Reference Breakup of a rectangular perturbation into a train of solitons\nCode 18-Train-of-Solitons\nNotes ","category":"page"},{"location":"Teaching/Basilisk/Tutorials/#Lee-Waves","page":"-","title":"Lee Waves","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/","page":"-","title":"-","text":"Reference Tidally-induced internal lee waves\nCode 19-Lee-Waves\nNotes ","category":"page"},{"location":"Teaching/Basilisk/Tutorials/#Ellipsoidal-Shoal","page":"-","title":"Ellipsoidal Shoal","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/","page":"-","title":"-","text":"Reference Periodic wave propagation over an ellipsoidal shoal\nCode 20-Ellipsoidal-Shoal\nNotes ","category":"page"},{"location":"Teaching/Basilisk/Tutorials/#Ellipsoidal-Shoal-Multilayer","page":"-","title":"Ellipsoidal Shoal Multilayer","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/","page":"-","title":"-","text":"Reference Periodic wave propagation over an ellipsoidal shoal (multilayer)\nCode 21-Ellipsoidal-Shoal-Multilayer\nNotes Check for source code in current version.","category":"page"},{"location":"Teaching/Basilisk/Tutorials/#Stokes-Wave","page":"-","title":"Stokes Wave","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/","page":"-","title":"-","text":"Reference 3D breaking Stokes wave (multilayer solver)\nCode 22-Stokes-Wave\nNotes ","category":"page"},{"location":"Teaching/Basilisk/Tutorials/#Transcritical-Flow","page":"-","title":"Transcritical Flow","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/","page":"-","title":"-","text":"Reference Transcritical flow over a bump\nCode 23-Transcritical-Flow\nNotes ","category":"page"},{"location":"Teaching/Basilisk/Tutorials/#Shock-Instability","page":"-","title":"Shock Instability","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/","page":"-","title":"-","text":"Reference A Shallow Water Analogue for the Standing Accretion Shock Instability\nCode 24-Shock-Instability\nNotes ","category":"page"},{"location":"Teaching/Basilisk/Tutorials/#Python-interface","page":"-","title":"Python interface","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/#Basic-usage","page":"-","title":"Basic usage","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/","page":"-","title":"-","text":"Reference Python interface\nCode 25-Python-Interface\nNotes ","category":"page"},{"location":"Teaching/Basilisk/Tutorials/#Poisson-equation","page":"-","title":"Poisson equation","text":"","category":"section"},{"location":"Teaching/Basilisk/Tutorials/","page":"-","title":"-","text":"Reference Poisson problem with Python\nCode 26-Python-Poisson\nNotes ","category":"page"},{"location":"References/@Balaji2014/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Balaji2014/","page":"-","title":"-","text":"title: Essentials of radiation heat transfer authors: C. Balaji year: 2014 Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZoCdJkJqcjDRZVs9J?e=mbefIU –-","category":"page"},{"location":"References/@Haider1989/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Haider1989/","page":"-","title":"-","text":"title: Drag coefficient and terminal velocity of spherical and nonspherical particles authors: A. Haider, O. Levenspiel year: 1989 URL: TODO –-","category":"page"},{"location":"Teaching/Machine Learning/#Table-of-Contents","page":"Machine Learning","title":"Table of Contents","text":"","category":"section"},{"location":"Teaching/Machine Learning/","page":"Machine Learning","title":"Machine Learning","text":"Notes on Data driven science and engineering\nPhysically informed neural networks","category":"page"},{"location":"References/@Sanchez2023a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Sanchez2023a/","page":"-","title":"-","text":"title: \"Biomass combustion modeling using OpenFOAM: Development of a simple computational model and study of the combustion performance of lippia origanoides bagasse\" authors: Gabriel Fernando García Sánchez, Jorge Luis Chacón Velasco, David Alfredo Fuentes Díaz, Yesid Javier Rueda-Ordóñez, David Patiño, Juan Jesús Rico, Jairo René Martínez Morales year: 2023 URL: https://doi.org/10.3390/en16062932 Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZlbEgWeJ66H4-cfxBiQ?e=YQGseW –-","category":"page"},{"location":"References/@Sweldens1998a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Sweldens1998a/","page":"-","title":"-","text":"title: \"The lifting scheme: A construction of second generation wavelets\" authors: Wim Sweldens year: 1998 URL: https://doi.org/10.1137/S0036141095289051 Drive: –-","category":"page"},{"location":"References/@Tensorflow2015Whitepaper/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Tensorflow2015Whitepaper/","page":"-","title":"-","text":"title: \"TensorFlow: Large-scale machine learning on heterogeneous systems\" authors: Martín Abadi, Ashish Agarwal, Paul Barham, Eugene Brevdo, Zhifeng Chen, Craig Citro, Greg S. Corrado, Andy Davis, Jeffrey Dean, Matthieu Devin, Sanjay Ghemawat, Ian Goodfellow, Andrew Harp, Geoffrey Irving, Michael Isard, Yangqing Jia, Rafal Jozefowicz, Lukasz Kaiser, Manjunath Kudlur, Josh Levenberg, Dandelion Mané, Rajat Monga, Sherry Moore, Derek Murray, Chris Olah, Mike Schuster, Jonathon Shlens, Benoit Steiner, Ilya Sutskever, Kunal Talwar, Paul Tucker, Vincent Vanhoucke, Vijay Vasudevan, Fernanda Viégas, Oriol Vinyals, Pete Warden, Martin Wattenberg, Martin Wicke, Yuan Yu, Xiaoqiang Zheng year: 2015 DOI: https://doi.org/10.5281/zenodo.4724125 –-","category":"page"},{"location":"References/@Aissa2015a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Aissa2015a/","page":"-","title":"-","text":"title: Ranz and Marshall correlations limits on heat flow between a sphere and its surrounding gas at high temperature authors: Abderrahmane Aissa, Mohamed Abdelouahab, Abdelkader Noureddine, Mohammed Elganaoui, Bernard Pateyron year: 2015 –-","category":"page"},{"location":"Teaching/Machine Learning/Data-Driven/","page":"-","title":"-","text":"Notes based on Data-Driven Science and Engineering by Steven L. Brunton and J. Nathan Kurz. Their proposed teaching materials for the book can be found here. Supplementary notes that might be useful for understanding the concepts are provided in course AMATH301. The set of open source materials proposed by Kurz's team is found here.","category":"page"},{"location":"Teaching/Machine Learning/Data-Driven/#Singular-Value-Decomposition","page":"-","title":"Singular Value Decomposition","text":"","category":"section"},{"location":"Teaching/Machine Learning/Data-Driven/#Fourier-and-Wavelet-Transforms","page":"-","title":"Fourier and Wavelet Transforms","text":"","category":"section"},{"location":"Teaching/Machine Learning/Data-Driven/#Sparsity-and-Compressed-Sensing","page":"-","title":"Sparsity and Compressed Sensing","text":"","category":"section"},{"location":"Teaching/Machine Learning/Data-Driven/#Regression-and-Model-Selection","page":"-","title":"Regression and Model Selection","text":"","category":"section"},{"location":"Teaching/Machine Learning/Data-Driven/#Clustering-and-Classification","page":"-","title":"Clustering and Classification","text":"","category":"section"},{"location":"Teaching/Machine Learning/Data-Driven/#Neural-Networks-and-Deep-Learning","page":"-","title":"Neural Networks and Deep Learning","text":"","category":"section"},{"location":"Teaching/Machine Learning/Data-Driven/#Data-Driven-Dynamical-Systems","page":"-","title":"Data-Driven Dynamical Systems","text":"","category":"section"},{"location":"Teaching/Machine Learning/Data-Driven/#Linear-Control-Theory","page":"-","title":"Linear Control Theory","text":"","category":"section"},{"location":"Teaching/Machine Learning/Data-Driven/#Balanced-Models-for-Control","page":"-","title":"Balanced Models for Control","text":"","category":"section"},{"location":"Teaching/Machine Learning/Data-Driven/#Data-Driven-Control","page":"-","title":"Data-Driven Control","text":"","category":"section"},{"location":"Teaching/Machine Learning/Data-Driven/#Reduced-Order-Models-(ROMs)","page":"-","title":"Reduced Order Models (ROMs)","text":"","category":"section"},{"location":"Teaching/Machine Learning/Data-Driven/#POD-for-Partial-Differential-equations-(11.1)","page":"-","title":"POD for Partial Differential equations (11.1)","text":"","category":"section"},{"location":"Teaching/Machine Learning/Data-Driven/","page":"-","title":"-","text":"(Image: )","category":"page"},{"location":"Teaching/Machine Learning/Data-Driven/","page":"-","title":"-","text":"Proxy models are much faster (lower dimensional)\nClassical discretization (FD) lead to high dimensional schemes\nModel expansion can produce much lower dimension problems","category":"page"},{"location":"Teaching/Machine Learning/Data-Driven/","page":"-","title":"-","text":"$$u(x,t) = \\sum_{k=1}^{n}a_{k}(t)\\psi_k(x)$$","category":"page"},{"location":"Teaching/Machine Learning/Data-Driven/","page":"-","title":"-","text":"Idea: plug the modal expansion in the PDE and expand it\nWith modal basis the approximations are non-local (global)\nOption 1: Fourier mode expansion - FFT","category":"page"},{"location":"Teaching/Machine Learning/Data-Driven/","page":"-","title":"-","text":"$$\\psi_k(x)=\\frac{1}{L}\\exp\\left(i\\frac{2\\pi{}kx}{L}\\right)$$","category":"page"},{"location":"Teaching/Machine Learning/Data-Driven/","page":"-","title":"-","text":"Goal: try to approximate with r basis instead of large n\nExample: try to approximate a Gaussian with FME\nLocalized structures require more expansion modes\nConstruction similar to spectral methods","category":"page"},{"location":"Teaching/Machine Learning/Data-Driven/#Optimal-Basis-Elements-(11.2)","page":"-","title":"Optimal Basis Elements (11.2)","text":"","category":"section"},{"location":"Teaching/Machine Learning/Data-Driven/","page":"-","title":"-","text":"(Image: )","category":"page"},{"location":"Teaching/Machine Learning/Data-Driven/","page":"-","title":"-","text":"Key idea: simulate the dynamics of the system and save snapshots of time-step solutions to then identify a modal expansion.\nThe tildeU POD basis psi_k found by truncating the SVD matrix U at rank r is the optimal in the L^2 sense for the given data.\nUse energy accumulated in modes as discussed in Chapter 1 Singular Value Decomposition to define the optimal (or good enough) value of r.\nThe produced ROM is not assured to be safe outside the subspace to which it was identified, though that is fine for several physics.","category":"page"},{"location":"Teaching/Machine Learning/Data-Driven/#POD-and-Soliton-Dynamics-(11.3)","page":"-","title":"POD and Soliton Dynamics (11.3)","text":"","category":"section"},{"location":"Teaching/Machine Learning/Data-Driven/","page":"-","title":"-","text":"(Image: )","category":"page"},{"location":"Teaching/Machine Learning/Data-Driven/#Continuous-Formulation-of-POD","page":"-","title":"Continuous Formulation of POD","text":"","category":"section"},{"location":"Teaching/Machine Learning/Data-Driven/","page":"-","title":"-","text":"(Image: )","category":"page"},{"location":"Teaching/Machine Learning/Data-Driven/#POD-with-Symmetries","page":"-","title":"POD with Symmetries","text":"","category":"section"},{"location":"Teaching/Machine Learning/Data-Driven/","page":"-","title":"-","text":"(Image: )","category":"page"},{"location":"Teaching/Machine Learning/Data-Driven/#Interpolation-for-Parametric-ROMs","page":"-","title":"Interpolation for Parametric ROMs","text":"","category":"section"},{"location":"Teaching/Machine Learning/Data-Driven/#Additional-materials","page":"-","title":"Additional materials","text":"","category":"section"},{"location":"Teaching/Machine Learning/Data-Driven/","page":"-","title":"-","text":"(Image: Professor Nick Trefethen, University of Oxford, Linear Algebra Optimization)","category":"page"},{"location":"References/@Zuo2000a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Zuo2000a/","page":"-","title":"-","text":"title: Modelling superheated fuel sprays and vaproization authors: B. Zuo, A. M. Gomes, C. J. Rutland year: 2000 URL: https://doi.org/10.1243/1468087001545218 –-","category":"page"},{"location":"toc/#Table-of-contents","page":"Table of Contents","title":"Table of contents","text":"","category":"section"},{"location":"toc/","page":"Table of Contents","title":"Table of Contents","text":"Depth = 4","category":"page"},{"location":"DryGranular/#DryGranular","page":"DryGranular","title":"DryGranular","text":"","category":"section"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"CurrentModule = DryGranular\nDocTestSetup = quote\n using Statistics\n using DryGranular\nend","category":"page"},{"location":"DryGranular/#General-porous-media","page":"DryGranular","title":"General porous media","text":"","category":"section"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"Modeling of geometrical characteristics of porous beds is required for including both their thermal effect or role over chemistry in chemical reactors. A classical approach used in several commercial and open source tools is that of Gunn [1]. In what follows we develop the ideas that lead to an analogous model which is implemented by this structure.","category":"page"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"To build the model we will assume a reactor of constant rectangular cross-section A_r=bw and volume V_R=bwh. Its cross-section perimeter is then P_R=2(b+w). Inside this reactor we randomly pack cubic particles beta of surface area A_beta=6l_beta^2 and volume V_beta=l_beta^3 at a porosity level phi. Thus the total volume of solids inside the reactor is V_S=(1-phi)V_R and the approximate number of particles N=fracV_SV_beta. Following a similar reasoning the total surface area of particles is A_S=NA_beta. Performing all the substitutions so far one finds the following expression","category":"page"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"A_S=frac6(1-phi)bwhl_beta","category":"page"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"Since the differential dA=Pdl holds for the surface of a body over its length l, one can divide the above expression by the reactor length to get the perimeter of particles in a cross-section. We can further divide by the cross-section area itself and find the perimeter density which is a more general result, and find the expression proposed by Gunn [1]. This result is summarized in the next equation where the subscript of particle size was dropped for generality.","category":"page"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"P = frac6(1-phi)l","category":"page"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"An estimator of the number of channels per unit cross-section of reactor N can be related to the porosity through NpiR^2=phi. Because the above perimeter is shared between the fluid volume and solids, it holds that N2piR=P. Using these expressions one can solve for the porosity channels characteristic radius R as given below, which is also a result reported by Gunn [1].","category":"page"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"R=fracphil3(1-phi)","category":"page"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"This model is probided in PackedBedPorosityDescriptor.","category":"page"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"DryGranular.PackedBedPorosityDescriptor","category":"page"},{"location":"DryGranular/#DryGranular.PackedBedPorosityDescriptor","page":"DryGranular","title":"DryGranular.PackedBedPorosityDescriptor","text":"Provides description of porosity parameters with stochastic behavior.\n\nϕ::Union{Float64, Vector{Float64}}: Porosity volume fraction in medium [-].\nl::Union{Float64, Vector{Float64}}: Characteristic particle size in medium [m].\nσϕ::Union{Nothing, Float64}: Optional standard deviation of porosity volume fraction [-].\nσl::Union{Nothing, Float64}: Optional standard deviation of characteristic particle size [m].\nP::Union{Float64, Vector{Float64}}: Perimeter in reactor cross-section [m].\nD::Union{Float64, Vector{Float64}}: Characteristic diameter of porosity channels [m].\nA::Float64: Reactor area used for scaling perimeter [m²].\n\n\n\n\n\n","category":"type"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"PackedBedPorosityDescriptor can be used to describe the geometry of exchange section of a packed bed for a single set of arguments.","category":"page"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"julia> PackedBedPorosityDescriptor(; ϕ = 0.65, l = 0.10, area = 1.0)\nPackedBedPorosityDescriptor(P = 21.000000 m, D = 0.123810 m)","category":"page"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"It can also be used to describe randomly varying reactors, what is a more realistic thing to do when using this structure to simulate real world systems.","category":"page"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"julia> PackedBedPorosityDescriptor(;\n ϕ = 0.65, l = 0.10,\n σϕ = 0.03, σl = 0.01,\n N = 2,\n ϕlims = (0.4, 0.8),\n llims = (0.0, 0.3),\n seed = 42,\n area = 1.0\n )\nPackedBedPorosityDescriptor(\n P from 21.455749 m to 24.370742 m\n D from 0.125589 m to 0.102353 m\n)","category":"page"},{"location":"DryGranular/#Rotary-kiln-models","page":"DryGranular","title":"Rotary kiln models","text":"","category":"section"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"In a rotary kiln as proposed by Kramers and Croockewite (1952) [2]. Its goal is to be used as a process support tool or to integrate more complex models requiring integration of the bed profile. In its classical statement, the bed height profile h(z) can be evaluated from volume of flowing material conservation through the following equations. Coordinate z=0 represents the discharge position where initial condition must be applied. This is given by the dam height, if any, or particle size.","category":"page"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"beginaligned\ndfracdhdz = C₁ leftfrachRleft(2 - frachRright)right^-frac32 - C₂6pt\nC₁ = frac34dfracΦtanγπ R^3 ω6pt\nC₂ = dfractanβcosγ\nendaligned","category":"page"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"The structure SymbolicLinearKramersModel implements the Kramers' ordinary differential equation for prediction of bed height profile in a rotary kiln. This equation is implemented under the formalism of ModelingToolkit.","category":"page"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"DryGranular.SymbolicLinearKramersModel","category":"page"},{"location":"DryGranular/#DryGranular.SymbolicLinearKramersModel","page":"DryGranular","title":"DryGranular.SymbolicLinearKramersModel","text":"Creates a reusable linear Kramers model for rotary kiln simulation.\n\nR::Symbolics.Num: Symbolic kiln internal radius\nΦ::Symbolics.Num: Symbolic kiln feed rate\nω::Symbolics.Num: Symbolic kiln rotation rate\nβ::Symbolics.Num: Symbolic kiln slope\nγ::Symbolics.Num: Symbolic solids repose angle\nz::Symbolics.Num: Symbolic kiln axial coordinates\nh::Symbolics.Num: Symbolic bed height profile\nsys::ModelingToolkit.ODESystem: Problem ordinary differential equation\n\n\n\n\n\n","category":"type"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"For integration of this model we implement RotaryKilnBedSolution. It provides the solved description of a rotary kiln bed geometry computed from the solution of bed height along the kiln length. The main goal of the quantities computed here is their use with heat and mass transfer models for the simulation of rotary kiln process. A simple post-processing utilitiy plotlinearkramersmodel is also provided.","category":"page"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"DryGranular.RotaryKilnBedSolution\nDryGranular.plotlinearkramersmodel","category":"page"},{"location":"DryGranular/#DryGranular.RotaryKilnBedSolution","page":"DryGranular","title":"DryGranular.RotaryKilnBedSolution","text":"General geometric description of a bed from Kramers equation solution.\n\nz::Vector{Float64}: Solution coordinates [m]\nh::Vector{Float64}: Solution bed height [m]\nθ::Vector{Float64}: View angle from kiln center [rad]\nl::Vector{Float64}: Bed-freeboard cord length [m]\nA::Vector{Float64}: Local bed cross section area [m²]\nη::Vector{Float64}: Local loading based on height [-]\nηₘ::Float64: Mean loading of kiln [%]\nV::Float64: Bed integral volume [m³]\nτ::Float64: Residence time of particles\nβ::Float64: Kiln slope [rad]\n\nArguments\n\nInternal elements are initialized through the following constructor:\n\nRotaryKilnBedSolution(z, h, β, R, Φ)\n\nWhere parameters are given as:\n\nz: solution coordinates over length, [m].\nh: bed profile solution over length, [m].\nR: kiln internal radius, [m].\nΦ: kiln feed rate, [m³/s].\n\nAn outer constructor is also provided for managing the integration of an instance of SymbolicLinearKramersModel. This is the recommended usage that is illustrated below.\n\nImportant: inputs must be provided in international system (SI) units as a better physical practice. The only exception is the rotation rate ω provided in revolution multiples. If the discharge end is held by a dam, its height must be provided instead of the particle size, as it is used as the ODE initial condition.\n\nmodel: a symbolic kiln model.\nL: kiln length, [m].\nR: kiln internal radius, [m].\nΦ: kiln feed rate, [m³/s].\nω: kiln rotation rate, [rev/s].\nβ: kiln slope, [rad].\nγ: solids repose angle, [rad].\nd: particle size or dam height, [m].\nsolver: Solver for DifferentialEquations. Defaults to Tsit5.\nrtol: Relative integration tolerance. Defaults to 1.0e-08.\natol: Absolute integration tolerance. Defaults to 1.0e-08.\n\n\n\n\n\n","category":"type"},{"location":"DryGranular/#DryGranular.plotlinearkramersmodel","page":"DryGranular","title":"DryGranular.plotlinearkramersmodel","text":"plotlinearkramersmodel(\n model::RotaryKilnBedSolution;\n normz::Bool = false,\n normh::Bool = false\n)::Figure\n\nStandardized plotting of RotaryKilnBedSolution bed profile. It supports normalization of axes throught keywords normz for axial coordinate and normh for bed depth.\n\n\n\n\n\n","category":"function"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"Data in next example is an SI conversion of an example from Kramers and Croockewite (1952) [2].","category":"page"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"julia> L = 13.715999999999998; # Kiln length [m]\n\njulia> D = 1.8897599999999999; # Kiln diameter [m]\n\njulia> β = 2.3859440303888126; # Kiln slope [°]\n\njulia> γ = 45.0; # Repose angle [°]\n\njulia> d = 1.0; # Particle/dam size [mm]\n\njulia> Φ = 10.363965852671996; # Feed rate [m³/h]\n\njulia> ω = 3.0300000000000002; # Rotation rate [rev/min]\n\njulia> bed = RotaryKilnBedSolution(;\n model = SymbolicLinearKramersModel(),\n L = L,\n R = D / 2.0,\n Φ = Φ / 3600.0,\n ω = ω / 60.0,\n β = deg2rad(β),\n γ = deg2rad(γ),\n d = d / 1000.0\n );\n\njulia> bed\nRotaryKilnBedSolution(τ = 13.169938 min, ηₘ = 5.913271 %)\n\njulia> bed.τ\n790.1963002204403","category":"page"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"In the following dummy example we force a very thick analytical bed solution, filling the radius of the rotary drum. ","category":"page"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"julia> R = 1.0e+00;\n\njulia> Φ = 1.0e-02;\n\njulia> z = collect(0.0:0.1:10.0);\n\njulia> h = R * ones(size(z));\n\njulia> Aₐ = π * R^2 / 2;\n\njulia> Vₐ = Aₐ * z[end];\n\njulia> bed = RotaryKilnBedSolution(z, h, 0, R, Φ)\nRotaryKilnBedSolution(τ = 26.179939 min, ηₘ = 50.000000 %)","category":"page"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"Next we confirm the internal evaluations of the model match the expected analytical values.","category":"page"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"julia> mean(bed.θ) ≈ π\ntrue\n\njulia> mean(bed.l) ≈ 2R\ntrue\n\njulia> mean(bed.A) ≈ Aₐ\ntrue\n\njulia> mean(bed.η) ≈ 0.5\ntrue\n\njulia> bed.ηₘ ≈ 50.0\ntrue\n\njulia> bed.V ≈ Vₐ\ntrue\n\njulia> bed.τ ≈ Vₐ / Φ\ntrue","category":"page"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"Validation of Kramers' model is provided here.","category":"page"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"Finally a set of basic equations provided for process analysis.","category":"page"},{"location":"DryGranular/","page":"DryGranular","title":"DryGranular","text":"DryGranular.sullivansηₘ\nDryGranular.dimlessNΦ\nDryGranular.dimlessNₖ\nDryGranular.perrayresidence\nDryGranular.kramersnlapprox","category":"page"},{"location":"DryGranular/#DryGranular.sullivansηₘ","page":"DryGranular","title":"DryGranular.sullivansηₘ","text":"Sullivans approximation to kiln filling.\n\n\n\n\n\n","category":"function"},{"location":"DryGranular/#DryGranular.dimlessNΦ","page":"DryGranular","title":"DryGranular.dimlessNΦ","text":"Kramers (1952) dimensionless group NΦ.\n\n\n\n\n\n","category":"function"},{"location":"DryGranular/#DryGranular.dimlessNₖ","page":"DryGranular","title":"DryGranular.dimlessNₖ","text":"Kramers (1952) dimensionless group Nₖ.\n\n\n\n\n\n","category":"function"},{"location":"DryGranular/#DryGranular.perrayresidence","page":"DryGranular","title":"DryGranular.perrayresidence","text":"Compute residence time from Peray's equation.\n\n\n\n\n\n","category":"function"},{"location":"DryGranular/#DryGranular.kramersnlapprox","page":"DryGranular","title":"DryGranular.kramersnlapprox","text":"Nonlinear formulation of Kramers model approximate solution.\n\n\n\n\n\n","category":"function"},{"location":"References/@Jeong1995a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Jeong1995a/","page":"-","title":"-","text":"title: On the identification of a vortex authors: Jinhee Jeong, Fazle Hussain year: 1995 URL: https://doi.org/10.1017/S0022112095000462 Drive: –-","category":"page"},{"location":"References/@Wu2022a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Wu2022a/","page":"-","title":"-","text":"title: A comprehensive study of non-adaptive and residual-based adaptive sampling for physics-informed neural networks authors: Chenxi Wu, Min Zhu, Qinyang Tan, Yadhu Kartha, Lu Lu year: 2022 URL: https://doi.org/10.48550/arXiv.2207.10289 Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZla5WOX3yVxsVYZ1BSQ?e=RJSrB2 –-","category":"page"},{"location":"Teaching/Basilisk/Basilisk/","page":"Basilisk","title":"Basilisk","text":"The goal of this material is to provide support to teaching introductory computational fluid mechanics with aid of Basilisk. The studies are based on commented tutorials and a documentation guide extending what is already provided with the package.","category":"page"},{"location":"Teaching/Basilisk/Basilisk/","page":"Basilisk","title":"Basilisk","text":"Before going over the tutorials, you need some C knowledge. In the future I intend to provide a synthetic version applied to Basilisk students only. For now, the referred one is pretty good.","category":"page"},{"location":"Teaching/Basilisk/Basilisk/#First-steps","page":"Basilisk","title":"First steps","text":"","category":"section"},{"location":"Teaching/Basilisk/Basilisk/","page":"Basilisk","title":"Basilisk","text":"The source code for the studies is provided here. The repository keeps a copy of Basilisk at a version that will work with all modified tutorials. It may be eventually updated, but in that case functioning of tutorials will be tested. You will need to clone it then following the steps to compile Basilisk before starting. After building Basilisk, instead of adding variables to your environment, consider sourcing them temporarily with help of source activate.sh using the provided script.","category":"page"},{"location":"Teaching/Basilisk/Basilisk/","page":"Basilisk","title":"Basilisk","text":"All tutorials are found under src. Just enter the tutorials you want to follow using the command line and run make. This not only will compile, but will also run and post-process results.","category":"page"},{"location":"Teaching/Basilisk/Basilisk/#Project-management","page":"Basilisk","title":"Project management","text":"","category":"section"},{"location":"Teaching/Basilisk/Basilisk/","page":"Basilisk","title":"Basilisk","text":"Although Basilisk is a very interesting dialect of C, its documentation is still old-fashioned and lack some structuration. Also sample programs are not written to be easily managed and extended for use in variant cases. Here we propose a structure for creating better projects with Basilisk:","category":"page"},{"location":"Teaching/Basilisk/Basilisk/","page":"Basilisk","title":"Basilisk","text":"A Basilisk project lives in its own folder: one executable means one directory.\nA simpler Makefile than Basilisk's default one is used for project building.\nThe main file is called app.c and contains a very simple structure as provided in the dummy listing bellow. All the logic of a project, i.e. the events, is implemented in separate header files that are included after Basilisk includes.","category":"page"},{"location":"Teaching/Basilisk/Basilisk/","page":"Basilisk","title":"Basilisk","text":"// Definitions\n#define LEVEL 7\n#define ...\n\n// Basilisk includes.\n#include \"grid/multigrid.h\"\n#include \"run.h\"\n#include ... \n\n// Project includes.\n#include \"project-base.h\"\n#include \"project-init.h\"\n#include \"project-post.h\"\n#include \"project-exec.h\"\n\nint main() {\n\tinit_grid(1 << LEVEL);\n\t...\n\trun();\n}","category":"page"},{"location":"Teaching/Basilisk/Basilisk/#Parallel-computing","page":"Basilisk","title":"Parallel computing","text":"","category":"section"},{"location":"Teaching/Basilisk/Basilisk/","page":"Basilisk","title":"Basilisk","text":"Currently I have not tried Basilisk in parallel (actually I did so a few years back but don't really remember the steps). Since there is no dedicated tutorial for going parallel, here are the notes I am taking for writing something in that sense:","category":"page"},{"location":"Teaching/Basilisk/Basilisk/","page":"Basilisk","title":"Basilisk","text":"Tutorial isotropic.c has notes on how to run parallel in some of its parent universities supercomputers. Probably some steps there might be recycled here.","category":"page"},{"location":"References/@Haghighat2021sciann/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Haghighat2021sciann/","page":"-","title":"-","text":"title: \"SciANN: A Keras/TensorFlow wrapper for scientific computations and physics-informed deep learning using artificial neural networks\" authors: Ehsan Haghighat, Ruben Juanes year: 2021 DOI: https://doi.org/10.48550/arXiv.2005.08803 –-","category":"page"},{"location":"References/@Guo2023g/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Guo2023g/","page":"-","title":"-","text":"title: \"Unraveling the design pattern of physics-informed neural networks: Series 07\" authors: Shuai Guo year: 2023 URL: https://towardsdatascience.com/unraveling-the-design-pattern-of-physics-informed-neural-networks-part-07-4ecb543b616a –-","category":"page"},{"location":"References/@Garaniya2012a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Garaniya2012a/","page":"-","title":"-","text":"title: CFD modelling of heavy fuel oil spray combustion authors: V. Garaniya, L. Goldsworthy year: 2012 URL: https://flair.monash.edu/intranet/proceedings/18afmc/Documents/400%20-%20Garaniya.pdf Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZlbEh7jKBqcgTdikWRQ?e=Zima6B –-","category":"page"},{"location":"References/@Guo2024a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Guo2024a/","page":"-","title":"-","text":"title: \"Physics-informed neural networks: An application-centric guide\" authors: Shuai Guo year: 2024 URL: https://towardsdatascience.com/physics-informed-neural-networks-an-application-centric-guide-dc1013526b02 –-","category":"page"},{"location":"References/@Krishnapriyan2021a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Krishnapriyan2021a/","page":"-","title":"-","text":"title: Characterizing possible failure modes in physics-informed neural networks authors: Aditi S. Krishnapriyan, Amir Gholami, Shandian Zhe, Robert M. Kirby, Michael W. Mahoney year: 2021 DOI: https://doi.org/10.48550/arXiv.2109.01050 Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZla8bwpowG74YkMl_tA?e=DmUIjw –-","category":"page"},{"location":"OpenFOAM/#OpenFOAM","page":"OpenFOAM","title":"OpenFOAM","text":"","category":"section"},{"location":"OpenFOAM/","page":"OpenFOAM","title":"OpenFOAM","text":"CurrentModule = OpenFOAM","category":"page"},{"location":"OpenFOAM/","page":"OpenFOAM","title":"OpenFOAM","text":"Modules = [ OpenFOAM ]","category":"page"},{"location":"OpenFOAM/#OpenFOAM.OPENFOAMBANNER","page":"OpenFOAM","title":"OpenFOAM.OPENFOAMBANNER","text":"Banner for all OpenFOAM files with right version.\n\n\n\n\n\n","category":"constant"},{"location":"OpenFOAM/#OpenFOAM.AbstractFlowRateProfile","page":"OpenFOAM","title":"OpenFOAM.AbstractFlowRateProfile","text":"Abstract type for flow rate profile distributions.\n\n\n\n\n\n","category":"type"},{"location":"OpenFOAM/#OpenFOAM.AbstractInjectionModel","page":"OpenFOAM","title":"OpenFOAM.AbstractInjectionModel","text":"Abstract type for injection models.\n\n\n\n\n\n","category":"type"},{"location":"OpenFOAM/#OpenFOAM.AbstractSizeDistribution","page":"OpenFOAM","title":"OpenFOAM.AbstractSizeDistribution","text":"Abstract type for particle size distributions.\n\n\n\n\n\n","category":"type"},{"location":"OpenFOAM/#OpenFOAM.ConstantFlowRateProfile","page":"OpenFOAM","title":"OpenFOAM.ConstantFlowRateProfile","text":"Constant flow rate profile.\n\n\n\n\n\n","category":"type"},{"location":"OpenFOAM/#OpenFOAM.InjectionModel","page":"OpenFOAM","title":"OpenFOAM.InjectionModel","text":"Represents a generic particle injection model.\n\nConstraints imposed by OpenFOAM:\n\nnParticle makes massFlowRate and massTotal to be ignored.\nmassTotal cannot be used in steady state simulations.\nif flowRateProfile is not found a constant massFlowRate profile is computed from the ratio of massTotal and duration.\n\nTo-do:\n\nCheck if parcelBasisType from is applicable to derived types.\n\nmassFlowRate::Number: Particles mass flow rate if nParticle is not provided.\nmassTotal::Number: Total mass to be injected if nParticle is not provided.\nSOI::Number: Start of injection in seconds (base).\nduration::Number: Duration of injection in seconds (base).\nnParticle::Number: Number of particles per parcel.\nuniformParcelSize::UniformParcelSize: Quantity that is constant in parcels (base).\nflowRateProfile::OpenFOAM.AbstractFlowRateProfile: Type of flow rate profile to apply.\n\n\n\n\n\n","category":"type"},{"location":"OpenFOAM/#OpenFOAM.PatchInjection","page":"OpenFOAM","title":"OpenFOAM.PatchInjection","text":"Represents a patch injection model.\n\nname::String: Name to use in injection models list.\npatchName::String: Patch where injection is applied.\ninjectionModel::InjectionModel: Object pointing to general injection model.\nU0::Velocity: Particles injection velocity vector.\nparcelsPerSecond::Number: Number of parcels injected per second.\nsizeDistribution::OpenFOAM.AbstractSizeDistribution: Particle size distribution.\n\n\n\n\n\n","category":"type"},{"location":"OpenFOAM/#OpenFOAM.TableFlowRateProfile","page":"OpenFOAM","title":"OpenFOAM.TableFlowRateProfile","text":"Table flow rate profile.\n\n\n\n\n\n","category":"type"},{"location":"OpenFOAM/#OpenFOAM.TabulatedDensity","page":"OpenFOAM","title":"OpenFOAM.TabulatedDensity","text":"Tabulated density size distribution.\n\n\n\n\n\n","category":"type"},{"location":"OpenFOAM/#OpenFOAM.UniformParcelSize","page":"OpenFOAM","title":"OpenFOAM.UniformParcelSize","text":"Types of uniform parcel sizes.\n\n\n\n\n\n","category":"type"},{"location":"OpenFOAM/#OpenFOAM.Velocity","page":"OpenFOAM","title":"OpenFOAM.Velocity","text":"Simple wraper velocity vector.\n\n\n\n\n\n","category":"type"},{"location":"OpenFOAM/#OpenFOAM.asint-Tuple{Any}","page":"OpenFOAM","title":"OpenFOAM.asint","text":"Round and convert number to an integer.\n\n\n\n\n\n","category":"method"},{"location":"OpenFOAM/#OpenFOAM.parcels_per_second-Tuple{}","page":"OpenFOAM","title":"OpenFOAM.parcels_per_second","text":"parcelstoinject2d(;\n mdot::Float64,\n rhop::Float64,\n diam::Float64,\n nParticle::Int64 = 1\n)\n\nComputes the flow rate of parcels for a given mean particle size and number of particles per parcels. This is inteded as a helper to create a patchInjection element in the injectionModels of cloudProperties file.\n\n\n\n\n\n","category":"method"},{"location":"OpenFOAM/#OpenFOAM.spheremass-Tuple{Any, Any}","page":"OpenFOAM","title":"OpenFOAM.spheremass","text":"The mass of a sphere of density rho and diameter diam.\n\n\n\n\n\n","category":"method"},{"location":"OpenFOAM/#OpenFOAM.spherevolume-Tuple{Any}","page":"OpenFOAM","title":"OpenFOAM.spherevolume","text":"The volume of a sphere of diameter diam.\n\n\n\n\n\n","category":"method"},{"location":"OpenFOAM/#OpenFOAM.tabulate-Tuple{Any, Any}","page":"OpenFOAM","title":"OpenFOAM.tabulate","text":"Compose table entries in typical OpenFOAM format.\n\n\n\n\n\n","category":"method"},{"location":"#WallyToolbox","page":"Home","title":"WallyToolbox","text":"","category":"section"},{"location":"DryMaterials/#DryMaterials","page":"DryMaterials","title":"DryMaterials","text":"","category":"section"},{"location":"DryMaterials/","page":"DryMaterials","title":"DryMaterials","text":"CurrentModule = DryMaterials","category":"page"},{"location":"DryMaterials/","page":"DryMaterials","title":"DryMaterials","text":"Modules = [ DryMaterials ]","category":"page"},{"location":"DryMaterials/#DryMaterials.H_AIR","page":"DryMaterials","title":"DryMaterials.H_AIR","text":"Coefficients for air enthalpy polynomial [J/kg].\n\n\n\n\n\n","category":"constant"},{"location":"DryMaterials/#DryMaterials.PureAir","page":"DryMaterials","title":"DryMaterials.PureAir","text":"Simple implementation of pure air for illustration purposes.\n\n\n\n\n\n","category":"type"},{"location":"DryMaterials/#DryMaterials.PureMineral","page":"DryMaterials","title":"DryMaterials.PureMineral","text":"Simple solid mineral material for illustration purposes.\n\n\n\n\n\n","category":"type"},{"location":"DryMaterials/#DryMaterials.PureWater","page":"DryMaterials","title":"DryMaterials.PureWater","text":"Simple implementation of liquid water for illustration purposes.\n\n\n\n\n\n","category":"type"},{"location":"DryMaterials/#DryMaterials.SolidMineralPhase","page":"DryMaterials","title":"DryMaterials.SolidMineralPhase","text":"Represents a solid mineral phase for thermodynamic calculations.\n\nname: Name of phase.\nρ: Specific mass of phase [kg/m³].\nM: Molecular mass of phase [kg/mol].\np: Polynomial properties of phase.\n\n\n\n\n\n","category":"type"},{"location":"DryMaterials/#DryMaterials.SolidPolynomialProperties","page":"DryMaterials","title":"DryMaterials.SolidPolynomialProperties","text":"Arbitrary Laurent polynomial specific heat and enthalpy of materials.\n\nc: Polynomial representation of specific heat [J/(kg.K)].\nh: Polynomial representation of enthalpy [J/kg].\nhₒ: Reference state enthalpy [J/kg].\n\n\n\n\n\n","category":"type"},{"location":"DryMaterials/#DryMaterials.density","page":"DryMaterials","title":"DryMaterials.density","text":"Evaluates the density of material [kg/m³].\n\n\n\n\n\n","category":"function"},{"location":"DryMaterials/#DryMaterials.enthalpy","page":"DryMaterials","title":"DryMaterials.enthalpy","text":"Evaluates the enthalpy of material [J/kg].\n\n\n\n\n\n","category":"function"},{"location":"DryMaterials/#DryMaterials.getamorphoussilica-Tuple{}","page":"DryMaterials","title":"DryMaterials.getamorphoussilica","text":"Representation of amorphous silica SiO_2(a).\n\nTODO recover missing defaults in Schieltz (1964).\n\n\n\n\n\n","category":"method"},{"location":"DryMaterials/#DryMaterials.getkaolinite-Tuple{}","page":"DryMaterials","title":"DryMaterials.getkaolinite","text":"Representation of Kaolinite Al_2Si_2O_5(OH)_4.\n\nTODO recover missing defaults in Schieltz (1964).\n\n\n\n\n\n","category":"method"},{"location":"DryMaterials/#DryMaterials.getmetakaolin-Tuple{}","page":"DryMaterials","title":"DryMaterials.getmetakaolin","text":"Representation of metakaolin Al_2Si_2O_7.\n\nTODO recover missing defaults in Schieltz (1964).\n\n\n\n\n\n","category":"method"},{"location":"DryMaterials/#DryMaterials.getspinel-Tuple{}","page":"DryMaterials","title":"DryMaterials.getspinel","text":"Representation of spinel Al_4Si_3O_12.\n\nTODO recover missing defaults (somewhere else, not in Schieltz (1964)).\n\n\n\n\n\n","category":"method"},{"location":"DryMaterials/#DryMaterials.molecularmass","page":"DryMaterials","title":"DryMaterials.molecularmass","text":"Retrieve molecular mass of materials [kg/mol].\n\n\n\n\n\n","category":"function"},{"location":"DryMaterials/#DryMaterials.specificheat","page":"DryMaterials","title":"DryMaterials.specificheat","text":"Evaluates the specific heat of materials [J/(kg.K)].\n\n\n\n\n\n","category":"function"},{"location":"Teaching/Transport Phenomena/#Dimensionless-groups","page":"-","title":"Dimensionless groups","text":"","category":"section"},{"location":"Teaching/Transport Phenomena/","page":"-","title":"-","text":"Knudsen: Particles mean free path over system characteristic dimension. Division between rarefied gas (Boltzmann) and continuum mechanics (Navier-Stokes).","category":"page"},{"location":"Teaching/Transport Phenomena/","page":"-","title":"-","text":"Prandtl: Ratio of momentum diffusivity to thermal diffusivity mathrmPr=fracnualpha. High mathrmPr indicates that momentum transfer is more effective than heat transfer (oils), while low values (liquid metals) indicate thermal boundary layer is more important than viscous one.","category":"page"},{"location":"Teaching/Transport Phenomena/","page":"-","title":"-","text":"Nusselt: Ratio of convective to conductive heat transfer at a boundary in a fluid, defined as mathrmNu=frachLk. Often in buoyancy-driven flow analysis it is correlated as mathrmNu=amathrmRa^b. A Nusselt number of value one represents heat transfer by pure conduction. Increasing this number implies a laminar conductive-dominant flow and then a convective dominant turbulent flow.","category":"page"},{"location":"Teaching/Transport Phenomena/","page":"-","title":"-","text":"Sherwood: Also called the mass transfer Nusselt number) is a dimensionless number used in mass-transfer operation. It represents the ratio of the total mass transfer rate (convection + diffusion) to the rate of diffusive mass transport, and is named in honor of Thomas Kilgore Sherwood.","category":"page"},{"location":"Teaching/Transport Phenomena/","page":"-","title":"-","text":"Grashof: Ratio of buoyancy to viscous forces defined as mathrmGr=fracgbeta(T_s-T_infty)L^3nu^2 and is analogous to Reynolds number in natural convection. Increasing the value of this number above a given threshold promotes buoyancy driven flow.","category":"page"},{"location":"Teaching/Transport Phenomena/","page":"-","title":"-","text":"Rayleigh: Product of Grashof mathrmGr and Prandtl mathrmPr numbers. Related to the transition from laminar to turbulent in buoyancy-driven flows. Laminar to turbulent is assumed to take place at 10^9 ([[@Balaji2014]]) [14].","category":"page"},{"location":"Teaching/Transport Phenomena/","page":"-","title":"-","text":"Péclet: provides the ratio of advective per diffusive transport of a substance. For mass transport this is given by the product of Reynolds and Schmidt numbers mathrmRemathrmSc while for thermal energy it is the product of Reynolds and Prandtl numbers mathrmRemathrmPr.","category":"page"},{"location":"Teaching/Transport Phenomena/#Granular-flows","page":"-","title":"Granular flows","text":"","category":"section"},{"location":"Teaching/Transport Phenomena/","page":"-","title":"-","text":"Parcel is a computational particle unit that may be composed of several particles which are all identical sharing a state, which include velocity, size, temperature, etc. See ([[@ORourke2010]]) [15] for details.\nCloud is the term OpenFOAM uses to describe particle flows. Here we will use both MPPICCloud andcollidingCloud, other types being available for reacting or multiphase solvers, such as thermoCloud.","category":"page"},{"location":"Teaching/Transport Phenomena/#Technological","page":"-","title":"Technological","text":"","category":"section"},{"location":"Teaching/Transport Phenomena/","page":"-","title":"-","text":"Siwek chamber is a reactor often used to determine the dispersion of solid fuels for combustion. Validation of simulations can be done through this and this paper. Other than the OpenFOAM case there is also this setup available on Fetch CFD.","category":"page"},{"location":"Teaching/Transport Phenomena/#Mathematical","page":"-","title":"Mathematical","text":"","category":"section"},{"location":"Teaching/Transport Phenomena/","page":"-","title":"-","text":"Hopf bifurcation  is a critical point where, as a parameter changes, a system's stability switches and a periodic solution arises. (see this).","category":"page"},{"location":"Teaching/Transport Phenomena/#Combustion","page":"-","title":"Combustion","text":"","category":"section"},{"location":"Teaching/Transport Phenomena/","page":"-","title":"-","text":"HyChem is an approach for modeling combustion of real liquid fuels by decomposing the problem into a lumped parameter model of evaporation/devolatilization and a detailed or simplified chemical kinetics approach applied to the gas phase. It is available for high-end fuels such as jet fuel and gasoline.","category":"page"},{"location":"Teaching/Transport Phenomena/#Condensate-fuel-combustion","page":"-","title":"Condensate fuel combustion","text":"","category":"section"},{"location":"Teaching/Transport Phenomena/","page":"-","title":"-","text":"This matter enters a intrinsically multiphysics domain and problem formulation needs to take into account at what level the model is required to act. For liquids, that might include spray droplets formation, evaporation, devolatilization, mass transfer to gas phase, and finally, oxidation kinetics of gas products. In the case of solids, due to high uncertainty and variability in material properties, and complex mass transfer phenomena, one must expect qualitative or semi-quantitative agreement of models and measurements. Furthermore, lumped-parameter modeling is a requirement in the field, making it difficult to be generalized to a physical level as of today.","category":"page"},{"location":"Teaching/Transport Phenomena/","page":"-","title":"-","text":"[[@Saario2005a]] used Ansys Fluent to simulate HFO (heavy-fuel oil) combustion using the standard mixture fraction approach coupled to a Lagrangian particle tracking for evaporating droplets and k-epsilon turbulence modeling. This is a highly standard industrial application of global combustion simulation from an energy standpoint but lacks the generality of considering a detailed chemistry of gas phase (for instance, for coupling with solid calcination reactions, if that is the case).","category":"page"},{"location":"Teaching/Transport Phenomena/","page":"-","title":"-","text":"[[@Garaniya2012a]] used StarCD to simulate HFO in the context of ship engines. From the same authors ([[@Garaniya2012b]]), we also have the the thermodynamic formulation of the problem.","category":"page"},{"location":"Teaching/Transport Phenomena/","page":"-","title":"-","text":"[[@Nowruzi2014]] successfully simulated a spray jet of HFO with OpenFOAM without accounting for chemistry and combustion. In the absence of a proper PSD (particle size-distribution) this step is required to initialize a simulation, but can hardly be integrated in a reacting flow simulation, which would become overly complex. ","category":"page"},{"location":"Teaching/Transport Phenomena/","page":"-","title":"-","text":"[[@Sanchez2023a]] studied the combustion of biomass with help of OpenFOAM with some semi-quantitative results within 13% from the measurements, what is already considered a very good agreement in the field.","category":"page"},{"location":"Teaching/Transport Phenomena/","page":"-","title":"-","text":"[ ] Continue the research here.","category":"page"},{"location":"Teaching/Basilisk/Draft/#Planned-studies","page":"-","title":"Planned studies","text":"","category":"section"},{"location":"Teaching/Basilisk/Draft/","page":"-","title":"-","text":"Learning steps","category":"page"},{"location":"Teaching/Basilisk/Draft/","page":"-","title":"-","text":"- [x] [Base tutorial](http://basilisk.fr/Tutorial)\n- [ ] [Review of main examples](http://basilisk.fr/src/examples/README)\n- [ ] [Review of extra examples (1)](http://basilisk.fr/sandbox/Antoonvh/README)\n- [ ] [Review of extra examples (2)](http://basilisk.fr/sandbox/M1EMN/README)\n- [ ] [Review of main tests](http://basilisk.fr/src/test/README)\n- [ ] [Review of built-it solvers](http://basilisk.fr/src/README)\n- [ ] [Dimensional analysis tutorial](http://basilisk.fr/Tutorial.dimensions)\n- [ ] [Basilisk C](http://basilisk.fr/Basilisk%20C)\n- [ ] [Past papers](http://basilisk.fr/Bibliography)","category":"page"},{"location":"Teaching/Basilisk/Draft/","page":"-","title":"-","text":"Concluding projects","category":"page"},{"location":"Teaching/Basilisk/Draft/","page":"-","title":"-","text":"- [ ] Convection equation ([samples](http://basilisk.fr/sandbox/M1EMN/README))\n- [ ] Diffusion equation ([samples](http://basilisk.fr/sandbox/M1EMN/README))\n- [ ] Burgers equation\n- [ ] Cavity flow Navier-Stokes","category":"page"},{"location":"Teaching/Basilisk/Draft/","page":"-","title":"-","text":"Advanced projects","category":"page"},{"location":"Teaching/Basilisk/Draft/","page":"-","title":"-","text":"- [ ] Carbonitriding of low alloy steels\n- [ ] JMAK kinetics and heat transfer\n- [ ] Drag-out flow in plate coating\n- [ ] Graf's acetylene decomposition flow\n- [ ] Rising bubble in fluid","category":"page"},{"location":"Teaching/Basilisk/Draft/","page":"-","title":"-","text":"Things to check","category":"page"},{"location":"Teaching/Basilisk/Draft/","page":"-","title":"-","text":"- [ ] Running simulations in parallel\n- [ ] Evaporation and combustion in sandbox\n- [ ] Examples with [granular flows](http://basilisk.fr/sandbox/M1EMN/README#examples-of-granular-flows) and [silos](http://basilisk.fr/sandbox/M1EMN/Exemples/granular_sandglass.c)\n- [ ] Rising bubble with granular flow","category":"page"},{"location":"Teaching/Basilisk/Draft/#Commented-examples##-Teaching-plan","page":"-","title":"Commented examples## Teaching plan","text":"","category":"section"},{"location":"Teaching/Basilisk/Draft/#Week-1","page":"-","title":"Week 1","text":"","category":"section"},{"location":"Teaching/Basilisk/Draft/","page":"-","title":"-","text":"In-class: Fundamentals of scientific computing (history, basics of hardware, number representations, numerical solvers, parallel computing, etc.)\nTutorial: Basics of Linux command line, VIM text editor, programming in C (with mini-projects), and Basilisk C.","category":"page"},{"location":"Teaching/Basilisk/Draft/#Week-2","page":"-","title":"Week 2","text":"","category":"section"},{"location":"Teaching/Basilisk/Draft/","page":"-","title":"-","text":"In-class: \nTutorial: ","category":"page"},{"location":"Teaching/Basilisk/Draft/#Week-3","page":"-","title":"Week 3","text":"","category":"section"},{"location":"Teaching/Basilisk/Draft/","page":"-","title":"-","text":"In-class: \nTutorial: ","category":"page"},{"location":"Teaching/Basilisk/Draft/#Week-4","page":"-","title":"Week 4","text":"","category":"section"},{"location":"Teaching/Basilisk/Draft/","page":"-","title":"-","text":"In-class: \nTutorial: ","category":"page"},{"location":"Teaching/Basilisk/Draft/#Week-5","page":"-","title":"Week 5","text":"","category":"section"},{"location":"Teaching/Basilisk/Draft/","page":"-","title":"-","text":"In-class: \nTutorial: ","category":"page"},{"location":"Teaching/Basilisk/Draft/#Week-6","page":"-","title":"Week 6","text":"","category":"section"},{"location":"Teaching/Basilisk/Draft/","page":"-","title":"-","text":"In-class: \nTutorial: ","category":"page"},{"location":"Cantera/samples/#Cantera-samples","page":"Cantera samples","title":"Cantera samples","text":"","category":"section"},{"location":"Cantera/samples/","page":"Cantera samples","title":"Cantera samples","text":"# cantera = \"C:\\\\Program Files\\\\Cantera\\\\bin\\\\cantera_shared.dll\"\n#\n# ENV[\"CANTERA_SHARED\"] = cantera\n# @assert haskey(ENV, \"CANTERA_SHARED\")\n#\n# FIXME: how to run this in GitHub???\n#\n# @assert ct.appdelete()\n# @assert ct.resetstorage()\n# @assert ct.clearstorage()\n# @assert ct.suppress_thermo_warnings(true)\n# @assert ct.use_legacy_rate_constants(false)\n#\n# sol = ct.Solution(\"gri30.yaml\", \"gri30\", \"mixture-averaged\")\n# gas = ct.Solution(\"gri30.yaml\", \"gri30\", \"mixture-averaged\")\n#\n# Xᵣ = zeros(sol.nspecies)\n# Xᵣ[1] = 1.0\n#\n# Tᵣ = 3500.0\n# Pᵣ = 50000.0\n#\n# ct.set_TPX!(sol, Tᵣ, Pᵣ, Xᵣ; norm = true)\n#\n# @assert ct.gettemperature(sol) ≈ Tᵣ\n# @assert ct.getpressure(sol) ≈ Pᵣ\n# @assert all(ct.getmolefractions(sol) ≈ Xᵣ)\n#\n# ct.equilibrate!(sol, \"HP\", print_results = true)","category":"page"},{"location":"References/@Launder1974/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Launder1974/","page":"-","title":"-","text":"title: The numerical computation of turbulent flows authors: B. E. Launder, D. B. Spalding year: 1974 –-","category":"page"},{"location":"References/@Ranz1952/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Ranz1952/","page":"-","title":"-","text":"title: Evaporation from drops authors: W. Ranz, W. Marshall year: 1952 –-","category":"page"},{"location":"References/@Garaniya2012b/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Garaniya2012b/","page":"-","title":"-","text":"title: Heavy fuel oil combustion modelling using continuous thermodynamics authors: Vikram Garaniya, Laurie Goldsworthy year: 2012 DOI: https://doi.org/10.5988/jime.47.871 Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZlbEigrD3idko7FKcyQ?e=lNld2R –-","category":"page"},{"location":"References/@Wang2023a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Wang2023a/","page":"-","title":"-","text":"title: \"Auto-PINN: Understanding and optimizing physics-informed neural architecture\" authors: Yicheng Wang, Xiaotian Han, Chia-Yuan Chang, Daochen Zha, Ulisses Braga-Neto, Xia Hu year: 2023 URL: https://doi.org/10.48550/arXiv.2205.13748 Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZla8gKwrbEVbpOVfBQg?e=5kcaTy –-","category":"page"},{"location":"References/@Yu2022a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Yu2022a/","page":"-","title":"-","text":"title: Gradient-enhanced physics-informed neural networks for forward and inverse PDE problems authors: Jeremy Yu, Lu Lu, Xuhui Meng, George Em Karniadakis year: 2022 URL: https://doi.org/10.48550/arXiv.2111.02801 Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZla8fqTeJApcwO8Ng?e=lpsaxB –-","category":"page"},{"location":"References/@Wurth2023a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Wurth2023a/","page":"-","title":"-","text":"title: Physics-informed neural networks for data-free surrogate modelling and engineering optimization – An example from composite manufacturing authors: Tobias Würth, Constantin Krauß, Clemens Zimmerling, Luise Kärger year: 2023 URL: https://doi.org/10.5445/IR/1000159290 Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZla5XEQtEiYnlp5ggtA?e=6TW8va –-","category":"page"},{"location":"References/@Wurth2023a/","page":"-","title":"-","text":"PINNs are alternative to SBO methods\nReference 6: one NN per output\nUsed same weight for all losses (domain, B.C., I.C.)\nNNs provide automatic jacobian and hessian evaluations, what can be used for great benefit of optimization algorithms\nImplemented in SciANN [[@Haghighat2021sciann]] wrapper to [[@Tensorflow2015Whitepaper]]\nSolves the diffusion equation\nKamal-Malkin model can be seem as a more general parametrization as JMKA rightarrow maybe useful in cement hydration modeling?\nInteresting to write a tutorial about!","category":"page"},{"location":"References/#References","page":"References","title":"References","text":"","category":"section"},{"location":"References/","page":"References","title":"References","text":"D. J. Gunn. Transfer of heat or mass to particles in fixed and fluidised beds. International Journal of Heat and Mass Transfer 21, 467–476 (1978).\n\n\n\nH. Kramers and P. Croockewit. The passage of granular solids through inclined rotary kilns. Chemical Engineering Science 1, 259–265 (1952).\n\n\n\nW. L. Grosshandler. Radcal – a narrow-band model for radiation calculations in a combustion environment (National Institute of Standards and Technology, 1993).\n\n\n\nJ. P. Gorog, J. K. Brimacombe and T. N. Adams. Radiative heat transfer in rotary kilns. Metallurgical Transactions B 12, 55–70 (1981).\n\n\n\nW. C. Tam and W. W. Yuen. OpenSC: an open-source calculation tool for combustion mixture emissivity/absorptivity (National Institute of Standards and Technology, 2019).\n\n\n\nB. E. Launder and D. B. Spalding. The numerical computation of turbulent flows. Computer Methods in Applied Mechanics and Engineering 3, 269–289 (1974).\n\n\n\nD. Gidaspow. Multiphase flow and fluidization: continuum and kinetic theory descriptions with applications (Academic Press, 1994).\n\n\n\nJ. P. Du Plessis and J. H. Masliyah. Mathematical modelling of flow through consolidated isotropic porous media. Transport in Porous Media 3, 145–161 (1988).\n\n\n\nA. B. Liu, D. Mather and R. D. Reitz. Modeling the Effects of Drop Drag and Breakup on Fuel Sprays. In: SAE Technical Paper Series, ANNUAL (SAE International, Mar 1993).\n\n\n\nA. Haider and O. Levenspiel. Drag coefficient and terminal velocity of spherical and nonspherical particles. Powder Technology 58, 63–70 (1989).\n\n\n\nB. Peña and C. Pérez-García. Stability of Turing patterns in the Brusselator model. Physical Review E 64, 056213 (2001).\n\n\n\nW. Sweldens. The Lifting Scheme: A Construction of Second Generation Wavelets. SIAM Journal on Mathematical Analysis 29, 511–546 (1998).\n\n\n\nJ. Jeong and F. Hussain. On the identification of a vortex. Journal of Fluid Mechanics 285, 69–94 (1995).\n\n\n\nC. Balaji. Essentials of radiation heat transfer (Wiley, Chichester, 2014).\n\n\n\nP. J. O'Rourke and D. M. Snider. An improved collision damping time for MP-PIC calculations of dense particle flows with applications to polydisperse sedimenting beds and colliding particle jets. Chemical Engineering Science 65, 6014–6028 (2010).\n\n\n\nW. Ranz and W. Marshall. Evaporation from drops. Chemical Engineering Progress 48, 141–146 (1952).\n\n\n\nA. Aissa, M. Abdelouahab, A. Noureddine, M. Elganaoui and B. Pateyron. Ranz and Marshall correlations limits on heat flow between a sphere and its surrounding gas at high temperature. Thermal Science 19, 1521–1528 (2015).\n\n\n\nB. Zuo, A. M. Gomes and C. J. Rutland. Modelling superheated fuel sprays and vaproization. International Journal of Engine Research 1, 321–336 (2000).\n\n\n\n","category":"page"},{"location":"References/@Cuomo2022a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Cuomo2022a/","page":"-","title":"-","text":"title: \"Scientific machine learning through physics-informed neural networks: Where we are and what's next\" authors: Salvatore Cuomo, Vincenzo Schiano di Cola, Fabio Giampaolo, Gianluigi Rozza, Maziar Raissi, Francesco Piccialli year: 2022 DOI: https://doi.org/10.48550/arXiv.2201.05624 –-","category":"page"},{"location":"References/@Nowruzi2014/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Nowruzi2014/","page":"-","title":"-","text":"title: Numerical simulation of non-evaporating and non-reacting heavy fuel oil injection spray in medium speed engines using OpenFOAM authors: Hashem Nowruzi, Parviz Ghadimi, Mehdi Yousefifard, Mohammad A. Feiz Chekab year: 2014 URL: https://doi.org/10.14810/ijmech.2014.3206 Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZlbEf-L95SgshO8_Nhg?e=jKpxyO –-","category":"page"},{"location":"References/@Sanyal2022a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Sanyal2022a/","page":"-","title":"-","text":"title: \"RAMP-Net: A robust adaptive MPC for quadrotors via physics-informed neural network\" authors: Sourav Sanyal, Kaushik Roy year: 2022 URL: https://doi.org/10.48550/arXiv.2209.09025 –-","category":"page"},{"location":"Teaching/Basilisk/Documentation/#Built-in-solvers","page":"-","title":"Built-in solvers","text":"","category":"section"},{"location":"Teaching/Basilisk/Documentation/","page":"-","title":"-","text":"Basic component solvers:","category":"page"},{"location":"Teaching/Basilisk/Documentation/","page":"-","title":"-","text":"advection.h\ndiffusion.h\npoisson.h","category":"page"},{"location":"Teaching/Basilisk/Documentation/","page":"-","title":"-","text":"It is upon these that the Navier-Stokes equation can be assembled in:","category":"page"},{"location":"Teaching/Basilisk/Documentation/","page":"-","title":"-","text":"Header Description\nnavier-stokes/stream.h Solves a 2D incompressible, constant density, constant viscosity Navier-Stokes equation formulated in the vorticity omega. This is and advection-diffusion equation solved with a flux-based advection scheme in advection.h. Given its form, the stream function psi is solver through the poisson.h solver.\nnavier-stokes/centered.h \nnavier-stokes/perfs.h Not a solver by itself, it supports other headers under the Navier-Stokes family to follow performance during solution.","category":"page"},{"location":"Teaching/Basilisk/Documentation/","page":"-","title":"-","text":"Other equations:","category":"page"},{"location":"Teaching/Basilisk/Documentation/","page":"-","title":"-","text":"saint-venant.h","category":"page"},{"location":"Teaching/Basilisk/Documentation/#Headers-files","page":"-","title":"Headers files","text":"","category":"section"},{"location":"Teaching/Basilisk/Documentation/","page":"-","title":"-","text":"File Usage\ncommon.h \ndistance.h \nembed.h Allow the creation of general shape boundary conditions inside the domain.\nfractions.h \nlambda2.h Detection of vortex using the criteria by [[@Jeong1995a]] [13]\nrun.h A generic time loop which executes until termination (to be avoided!).\ntracer.h Provides an event to integrate the advection of tracer elements.\nutils.h \nview.h ","category":"page"},{"location":"Teaching/Basilisk/Documentation/","page":"-","title":"-","text":"File Usage\ngrid/cartesian.h \ngrid/multigrid.h \ngrid/octree.h \ngrid/bitree.h ","category":"page"},{"location":"Teaching/Basilisk/Documentation/#Data-types","page":"-","title":"Data types","text":"","category":"section"},{"location":"Teaching/Basilisk/Documentation/","page":"-","title":"-","text":"scalar\nvector\nface\nmsgstats convergence statistics of (multigrid?) solver.","category":"page"},{"location":"Teaching/Basilisk/Documentation/#Functions","page":"-","title":"Functions","text":"","category":"section"},{"location":"Teaching/Basilisk/Documentation/","page":"-","title":"-","text":"Function Definition Uses\norigin common.h Set the origin of cartesian system.\ninit_grid grid/ (overloaded) Level of refinement (size) of initial grid.\nsize \nperiodic Set periodic boundary conditions.\nstatsf utils.h Retrieve statistics of a scalar field.\noutput_ppm output.h Generate a image and video output.\nadapt_wavelet grid/tree-common.h Adaptive grid refinement routine.\nrun run.h (overloaded) Generic time loop for events execution.\nnoise Generate random noise in -1 1.\nswap Swap values of two scalar arrays.\ninput_stl distance.h Read an STL file as an array of triplets.\nbounding_box distance.h Determines the bounding box of inputs (segments or triangles).\ndistance distance.h Distance to coordinate.\nview draw.h Setup of viewing (camera) parameters.\nisosurface draw.h Displays an isosurface of a field.\ndraw_vof draw.h Display VOF reconstructed interfaces.\nclear draw.h Removes previous objects.\nsave view.h Dumps image(s) to file.\nrefine_biquadradic grid/multigrid-common.h \nwavelet grid/multigrid-common.h \ninverse_wavelet grid/multigrid-common.h \nboundary_level \nunrefine \nvorticity utils.h Computes the vorticity from a velocity field.","category":"page"},{"location":"References/@Wang2022a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Wang2022a/","page":"-","title":"-","text":"title: Respecting causality is all you need for training physics-informed neural networks authors: Sifan Wang, Shyam Sankaran, Paris Perdikaris year: 2022 URL: https://doi.org/10.48550/arXiv.2203.07404 Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZla8hHROyjqNuK7otnA?e=U8kabk –-","category":"page"},{"location":"References/@Wang2022a/","page":"-","title":"-","text":"Supporting materials at GitHub.","category":"page"},{"location":"Cantera/#Cantera","page":"Cantera","title":"Cantera","text":"","category":"section"},{"location":"Cantera/","page":"Cantera","title":"Cantera","text":"This page documents the wrapper written around the C-API of Cantera. The status of development is documented here. Its goal is not to mimic the original API or provide an interface equivalent to the Python package, but something in line with the functioning of the parent toolbox.","category":"page"},{"location":"Cantera/#Status-of-Cantera-wrapper","page":"Cantera","title":"Status of Cantera wrapper","text":"","category":"section"},{"location":"Cantera/","page":"Cantera","title":"Cantera","text":"This is an experimental interface to Cantera library based on its C-API version 3.0. This interface is at its early days and has developped for Julia >= 1.9.0 under Windows 10/11. When it is stable enough it will be published as a package and tested under other platforms.","category":"page"},{"location":"Cantera/#Useful-links","page":"Cantera","title":"Useful links","text":"","category":"section"},{"location":"Cantera/","page":"Cantera","title":"Cantera","text":"Source files\nHeader files","category":"page"},{"location":"Cantera/#API-of-ct.h","page":"Cantera","title":"API of ct.h","text":"","category":"section"},{"location":"Cantera/","page":"Cantera","title":"Cantera","text":"Documentation here.","category":"page"},{"location":"Cantera/","page":"Cantera","title":"Cantera","text":"Status Header Function Module\nTested ct.h ct_appdelete inlined\nStruct ct.h soln_newSolution wrapped\n ct.h soln_newInterface waitlist\nTested ct.h soln_del inlined\nTested ct.h soln_name inlined\nStruct ct.h soln_thermo inlined\nStruct ct.h soln_kinetics inlined\nStruct ct.h soln_transport inlined\nTested ct.h soln_setTransportModel wrapped\nTested ct.h soln_nAdjacent inlined\n ct.h soln_adjacent waitlist\nTested ct.h thermo_newFromFile wrapped\nTested ct.h thermo_del inlined\nStruct ct.h thermo_nElements inlined\nStruct ct.h thermo_nSpecies inlined\nTested ct.h thermo_temperature inlined\nStruct ct.h thermo_setTemperature inlined\nTested ct.h thermo_density inlined\nTested ct.h thermo_setDensity inlined\nTested ct.h thermo_molarDensity inlined\nTested ct.h thermo_setMolarDensity inlined\nTested ct.h thermo_meanMolecularWeight inlined\nTested ct.h thermo_moleFraction inlined\nTested ct.h thermo_massFraction inlined\nStruct ct.h thermo_getMoleFractions inlined\nTested ct.h thermo_getMassFractions inlined\nStruct ct.h thermo_setMoleFractions inlined\nTested ct.h thermo_setMassFractions inlined\n ct.h thermo_setMoleFractionsByName \n ct.h thermo_setMassFractionsByName \n ct.h thermo_getAtomicWeights \n ct.h thermo_getMolecularWeights \n ct.h thermo_getCharges \n ct.h thermo_getElementName \n ct.h thermo_getSpeciesName \n ct.h thermo_getName \n ct.h thermo_setName \n ct.h thermo_elementIndex \n ct.h thermo_speciesIndex \n ct.h thermo_report \nTested ct.h thermo_print \n ct.h thermo_nAtoms \n ct.h thermo_addElement \n ct.h thermo_getEosType \nTo test ct.h thermo_refPressure inlined\nTo test ct.h thermo_minTemp inlined\nTo test ct.h thermo_maxTemp inlined\nTo test ct.h thermoenthalpymole inlined\nTo test ct.h thermointEnergymole inlined\nTo test ct.h thermoentropymole inlined\nTo test ct.h thermogibbsmole inlined\nTo test ct.h thermocpmole inlined\nTo test ct.h thermocvmole inlined\nTo test ct.h thermo_pressure inlined\nStruct ct.h thermo_setPressure inlined\nTo test ct.h thermoenthalpymass inlined\nTo test ct.h thermointEnergymass inlined\nTo test ct.h thermoentropymass inlined\nTo test ct.h thermogibbsmass inlined\nTo test ct.h thermocpmass inlined\nTo test ct.h thermocvmass inlined\nTo test ct.h thermo_electricPotential inlined\nTo test ct.h thermo_thermalExpansionCoeff inlined\nTo test ct.h thermo_isothermalCompressibility inlined\n ct.h thermo_chemPotentials \n ct.h thermogetEnthalpiesRT \n ct.h thermogetEntropiesR \n ct.h thermogetCpR \n ct.h thermo_setElectricPotential \n ct.h thermosetTP \n ct.h thermosetTD \n ct.h thermosetRP \n ct.h thermosetDP \n ct.h thermosetHP \n ct.h thermosetUV \n ct.h thermosetSV \n ct.h thermosetSP \n ct.h thermosetST \n ct.h thermosetTV \n ct.h thermosetPV \n ct.h thermosetUP \n ct.h thermosetVH \n ct.h thermosetTH \n ct.h thermosetSH \nTested ct.h thermo_equilibrate \nTo test ct.h thermo_critTemperature inlined\nTo test ct.h thermo_critPressure inlined\nTo test ct.h thermo_critDensity inlined\nTo test ct.h thermo_vaporFraction inlined\n ct.h thermo_satTemperature \n ct.h thermo_satPressure \n ct.h thermosetStatePsat \n ct.h thermosetStateTsat \n ct.h kin_newFromFile \nTo test ct.h kin_del inlined\nTo test ct.h kin_nSpecies inlined\nTo test ct.h kin_nReactions inlined\nTo test ct.h kin_nPhases inlined\n ct.h kin_phaseIndex \nTo test ct.h kin_reactionPhaseIndex inlined\n ct.h kin_reactantStoichCoeff \n ct.h kin_productStoichCoeff \n ct.h kin_getReactionType \n ct.h kin_getFwdRatesOfProgress \n ct.h kin_getRevRatesOfProgress \n ct.h kin_getNetRatesOfProgress \n ct.h kin_getEquilibriumConstants \n ct.h kin_getFwdRateConstants \n ct.h kin_getRevRateConstants \n ct.h kin_getDelta \n ct.h kin_getCreationRates \n ct.h kin_getDestructionRates \n ct.h kin_getNetProductionRates \n ct.h kin_getSourceTerms \nTo test ct.h kin_multiplier inlined\n ct.h kin_getReactionString \n ct.h kin_setMultiplier \nTo test ct.h kin_isReversible inlined\n ct.h kin_getType \nTo test ct.h kin_start inlined\n ct.h kin_speciesIndex \nTo test ct.h kin_advanceCoverages inlined\nTo test ct.h kin_phase inlined\nTo test ct.h trans_newDefault inlined\n ct.h trans_new \nTo test ct.h trans_del inlined\nTo test ct.h trans_transportModel inlined\nTo test ct.h trans_viscosity inlined\nTo test ct.h trans_electricalConductivity inlined\n ct.h trans_thermalConductivity \n ct.h trans_getThermalDiffCoeffs \n ct.h trans_getMixDiffCoeffs \n ct.h trans_getBinDiffCoeffs \n ct.h trans_getMultiDiffCoeffs \n ct.h trans_setParameters \n ct.h trans_getMolarFluxes \n ct.h trans_getMassFluxes \n ct.h ct_getCanteraError \n ct.h ct_setLogWriter \n ct.h ct_setLogCallback \n ct.h ct_addCanteraDirectory \n ct.h ct_getDataDirectories \n ct.h ct_getCanteraVersion \n ct.h ct_getGitCommit \nTested ct.h ctsuppressthermo_warnings inlined\nTested ct.h ctuselegacyrateconstants inlined\nTested ct.h ct_clearStorage inlined\nTested ct.h ct_resetStorage inlined","category":"page"},{"location":"Cantera/#API-of-ctfunc.h","page":"Cantera","title":"API of ctfunc.h","text":"","category":"section"},{"location":"Cantera/","page":"Cantera","title":"Cantera","text":"Documentation here.","category":"page"},{"location":"Cantera/","page":"Cantera","title":"Cantera","text":"Status Header Function Module\n ctfunc.h func_new \n ctfunc.h funcnewbasic \n ctfunc.h funcnewadvanced \n ctfunc.h funcnewcompound \n ctfunc.h funcnewmodified \nTo test ctfunc.h func_del inlined\n ctfunc.h func_type \nTo test ctfunc.h func_value inlined\nTo test ctfunc.h func_derivative inlined\nTo test ctfunc.h func_duplicate inlined\n ctfunc.h func_write \nTo test ctfunc.h ct_clearFunc inlined","category":"page"},{"location":"Cantera/#API-of-ctmultiphase.h","page":"Cantera","title":"API of ctmultiphase.h","text":"","category":"section"},{"location":"Cantera/","page":"Cantera","title":"Cantera","text":"Documentation here.","category":"page"},{"location":"Cantera/","page":"Cantera","title":"Cantera","text":"Status Header Function Module\nTo test ctmultiphase.h mix_new inlined\nTo test ctmultiphase.h mix_del inlined\nTo test ctmultiphase.h ct_clearMix inlined\n ctmultiphase.h mix_addPhase \nTo test ctmultiphase.h mix_init inlined\nTo test ctmultiphase.h mix_updatePhases inlined\nTo test ctmultiphase.h mix_nElements inlined\n ctmultiphase.h mix_elementIndex \n ctmultiphase.h mix_speciesIndex \nTo test ctmultiphase.h mix_nSpecies inlined\nTo test ctmultiphase.h mix_setTemperature inlined\nTo test ctmultiphase.h mix_temperature inlined\nTo test ctmultiphase.h mix_minTemp inlined\nTo test ctmultiphase.h mix_maxTemp inlined\nTo test ctmultiphase.h mix_charge inlined\nTo test ctmultiphase.h mix_phaseCharge inlined\nTo test ctmultiphase.h mix_setPressure inlined\nTo test ctmultiphase.h mix_pressure inlined\nTo test ctmultiphase.h mix_nAtoms inlined\nTo test ctmultiphase.h mix_nPhases inlined\nTo test ctmultiphase.h mix_phaseMoles inlined\n ctmultiphase.h mix_setPhaseMoles \n ctmultiphase.h mix_setMoles \n ctmultiphase.h mix_setMolesByName \nTo test ctmultiphase.h mix_speciesMoles inlined\nTo test ctmultiphase.h mix_elementMoles inlined\n ctmultiphase.h mix_equilibrate \n ctmultiphase.h mix_getChemPotentials \nTo test ctmultiphase.h mix_enthalpy inlined\nTo test ctmultiphase.h mix_entropy inlined\nTo test ctmultiphase.h mix_gibbs inlined\nTo test ctmultiphase.h mix_cp inlined\nTo test ctmultiphase.h mix_volume inlined\nTo test ctmultiphase.h mix_speciesPhaseIndex inlined\nTo test ctmultiphase.h mix_moleFraction inlined","category":"page"},{"location":"Cantera/#API-of-ctonedim.h","page":"Cantera","title":"API of ctonedim.h","text":"","category":"section"},{"location":"Cantera/","page":"Cantera","title":"Cantera","text":"Documentation here.","category":"page"},{"location":"Cantera/","page":"Cantera","title":"Cantera","text":"Status Header Function Module\nTo test ctonedim.h ct_clearOneDim inlined\n ctonedim.h domain_new \nTo test ctonedim.h domain_del inlined\nTo test ctonedim.h domain_type inlined\n ctonedim.h domain_type3 \nTo test ctonedim.h domain_index inlined\nTo test ctonedim.h domain_nComponents inlined\nTo test ctonedim.h domain_nPoints inlined\n ctonedim.h domain_componentName \n ctonedim.h domain_componentIndex \n ctonedim.h domain_setBounds \nTo test ctonedim.h domain_lowerBound inlined\nTo test ctonedim.h domain_upperBound inlined\n ctonedim.h domain_setSteadyTolerances \n ctonedim.h domain_setTransientTolerances \nTo test ctonedim.h domain_rtol inlined\nTo test ctonedim.h domain_atol inlined\n ctonedim.h domain_setupGrid \n ctonedim.h domain_setID \nTo test ctonedim.h domain_grid inlined\nTo test ctonedim.h bdry_setMdot inlined\nTo test ctonedim.h bdry_setTemperature inlined\nTo test ctonedim.h bdry_setSpreadRate inlined\n ctonedim.h bdry_setMoleFractions \nTo test ctonedim.h bdry_temperature inlined\nTo test ctonedim.h bdry_spreadRate inlined\nTo test ctonedim.h bdry_massFraction inlined\nTo test ctonedim.h bdry_mdot inlined\nTo test ctonedim.h reactingsurf_setkineticsmgr inlined\nTo test ctonedim.h reactingsurf_enableCoverageEqs inlined\nTo test ctonedim.h inlet_new inlined\nTo test ctonedim.h outlet_new inlined\nTo test ctonedim.h outletres_new inlined\nTo test ctonedim.h symm_new inlined\nTo test ctonedim.h surf_new inlined\nTo test ctonedim.h reactingsurf_new inlined\nTo test ctonedim.h inlet_setSpreadRate inlined\n ctonedim.h stflow_new \nTo test ctonedim.h stflow_setTransport inlined\nTo test ctonedim.h stflow_enableSoret inlined\nTo test ctonedim.h stflow_setPressure inlined\nTo test ctonedim.h stflow_pressure inlined\n ctonedim.h stflow_setFixedTempProfile \nTo test ctonedim.h stflow_solveEnergyEqn inlined\n ctonedim.h sim1D_new \nTo test ctonedim.h sim1D_del inlined\n ctonedim.h sim1D_setValue \n ctonedim.h sim1D_setProfile \n ctonedim.h sim1D_setFlatProfile \n ctonedim.h sim1D_show \n ctonedim.h sim1D_showSolution \n ctonedim.h sim1D_setTimeStep \nTo test ctonedim.h sim1D_getInitialSoln inlined\n ctonedim.h sim1D_solve \nTo test ctonedim.h sim1D_refine inlined\n ctonedim.h sim1D_setRefineCriteria \n ctonedim.h sim1D_setGridMin \n ctonedim.h sim1D_save \n ctonedim.h sim1D_restore \nTo test ctonedim.h sim1D_writeStats inlined\n ctonedim.h sim1D_domainIndex \n ctonedim.h sim1D_value \n ctonedim.h sim1D_workValue \nTo test ctonedim.h sim1D_eval inlined\nTo test ctonedim.h sim1D_setMaxJacAge inlined\nTo test ctonedim.h sim1D_setFixedTemperature inlined","category":"page"},{"location":"Cantera/#API-of-ctreactor.h","page":"Cantera","title":"API of ctreactor.h","text":"","category":"section"},{"location":"Cantera/","page":"Cantera","title":"Cantera","text":"Documentation here.","category":"page"},{"location":"Cantera/","page":"Cantera","title":"Cantera","text":"Status Header Function Module\n ctreactor.h reactor_new \nTo test ctreactor.h reactor_del inlined\nTo test ctreactor.h reactor_setInitialVolume inlined\nTo test ctreactor.h reactor_setChemistry inlined\nTo test ctreactor.h reactor_setEnergy inlined\nTo test ctreactor.h reactor_setThermoMgr inlined\nTo test ctreactor.h reactor_setKineticsMgr inlined\nTo test ctreactor.h reactor_insert inlined\nTo test ctreactor.h reactor_mass inlined\nTo test ctreactor.h reactor_volume inlined\nTo test ctreactor.h reactor_density inlined\nTo test ctreactor.h reactor_temperature inlined\nTo test ctreactor.h reactorenthalpymass inlined\nTo test ctreactor.h reactorintEnergymass inlined\nTo test ctreactor.h reactor_pressure inlined\nTo test ctreactor.h reactor_massFraction inlined\nTo test ctreactor.h reactor_nSensParams inlined\nTo test ctreactor.h reactor_addSensitivityReaction inlined\nTo test ctreactor.h flowReactor_setMassFlowRate inlined\nTo test ctreactor.h reactornet_new inlined\nTo test ctreactor.h reactornet_del inlined\nTo test ctreactor.h reactornet_setInitialTime inlined\nTo test ctreactor.h reactornet_setMaxTimeStep inlined\nTo test ctreactor.h reactornet_setTolerances inlined\nTo test ctreactor.h reactornet_setSensitivityTolerances inlined\nTo test ctreactor.h reactornet_addreactor inlined\nTo test ctreactor.h reactornet_advance inlined\nTo test ctreactor.h reactornet_step inlined\nTo test ctreactor.h reactornet_time inlined\nTo test ctreactor.h reactornet_rtol inlined\nTo test ctreactor.h reactornet_atol inlined\n ctreactor.h reactornet_sensitivity \n ctreactor.h flowdev_new \nTo test ctreactor.h flowdev_del inlined\nTo test ctreactor.h flowdev_install inlined\nTo test ctreactor.h flowdev_setMaster inlined\nTo test ctreactor.h flowdev_setPrimary inlined\nTo test ctreactor.h flowdev_massFlowRate inlined\nTo test ctreactor.h flowdev_setMassFlowCoeff inlined\nTo test ctreactor.h flowdev_setValveCoeff inlined\nTo test ctreactor.h flowdev_setPressureCoeff inlined\nTo test ctreactor.h flowdev_setPressureFunction inlined\nTo test ctreactor.h flowdev_setTimeFunction inlined\n ctreactor.h wall_new \nTo test ctreactor.h wall_del inlined\nTo test ctreactor.h wall_install inlined\nTo test ctreactor.h wall_vdot inlined\nTo test ctreactor.h wall_expansionRate inlined\nTo test ctreactor.h wall_Q inlined\nTo test ctreactor.h wall_heatRate inlined\nTo test ctreactor.h wall_area inlined\nTo test ctreactor.h wall_setArea inlined\nTo test ctreactor.h wall_setThermalResistance inlined\nTo test ctreactor.h wall_setHeatTransferCoeff inlined\nTo test ctreactor.h wall_setHeatFlux inlined\nTo test ctreactor.h wall_setExpansionRateCoeff inlined\nTo test ctreactor.h wall_setVelocity inlined\nTo test ctreactor.h wall_setEmissivity inlined\nTo test ctreactor.h wall_ready inlined\nTo test ctreactor.h reactorsurface_new inlined\nTo test ctreactor.h reactorsurface_del inlined\nTo test ctreactor.h reactorsurface_install inlined\nTo test ctreactor.h reactorsurface_setkinetics inlined\nTo test ctreactor.h reactorsurface_area inlined\nTo test ctreactor.h reactorsurface_setArea inlined\nTo test ctreactor.h reactorsurface_addSensitivityReaction inlined\nTo test ctreactor.h ct_clearReactors inlined","category":"page"},{"location":"Cantera/#API-of-ctrpath.h","page":"Cantera","title":"API of ctrpath.h","text":"","category":"section"},{"location":"Cantera/","page":"Cantera","title":"Cantera","text":"Documentation here.","category":"page"},{"location":"Cantera/","page":"Cantera","title":"Cantera","text":"Status Header Function Module\nTo test ctrpath.h rdiag_new inlined\nTo test ctrpath.h rdiag_del inlined\nTo test ctrpath.h rdiag_detailed inlined\nTo test ctrpath.h rdiag_brief inlined\nTo test ctrpath.h rdiag_setThreshold inlined\n ctrpath.h rdiag_setBoldColor \n ctrpath.h rdiag_setNormalColor \n ctrpath.h rdiag_setDashedColor \n ctrpath.h rdiag_setDotOptions \nTo test ctrpath.h rdiag_setBoldThreshold inlined\nTo test ctrpath.h rdiag_setNormalThreshold inlined\nTo test ctrpath.h rdiag_setLabelThreshold inlined\nTo test ctrpath.h rdiag_setScale inlined\nTo test ctrpath.h rdiag_setFlowType inlined\nTo test ctrpath.h rdiag_setArrowWidth inlined\n ctrpath.h rdiag_setTitle \n ctrpath.h rdiag_write \nTo test ctrpath.h rdiag_add inlined\n ctrpath.h rdiag_findMajor \n ctrpath.h rdiag_setFont \nTo test ctrpath.h rdiag_displayOnly inlined\nTo test ctrpath.h rbuild_new inlined\nTo test ctrpath.h rbuild_del inlined\n ctrpath.h rbuild_init \n ctrpath.h rbuild_build \nTo test ctrpath.h ct_clearReactionPath inlined","category":"page"},{"location":"Cantera/#API-of-ctsurf.h","page":"Cantera","title":"API of ctsurf.h","text":"","category":"section"},{"location":"Cantera/","page":"Cantera","title":"Cantera","text":"Documentation here.","category":"page"},{"location":"Cantera/","page":"Cantera","title":"Cantera","text":"Status Header Function Module\n ctsurf.h surf_setCoverages \n ctsurf.h surf_getCoverages \n ctsurf.h surf_setConcentrations \n ctsurf.h surf_getConcentrations \nTo test ctsurf.h surf_setSiteDensity inlined\nTo test ctsurf.h surf_siteDensity inlined\n ctsurf.h surf_setCoveragesByName ","category":"page"},{"location":"DryGranular/kramers/#Kramers'-model","page":"Kramers' model","title":"Kramers' model","text":"","category":"section"},{"location":"DryGranular/kramers/","page":"Kramers' model","title":"Kramers' model","text":"using CairoMakie\nusing CSV\nusing DataFrames\nusing Latexify\nusing Printf\nusing DryGranular\n\n\"Partial data from Kramers (1952) Table 3\"\nconst DATA_TABLE3 = \"\"\"\\\nρ,γ,tan(β),n,ṁ,prod_dimless,η̄ᵣ,hold_real\n1480.0,36.0,0.0094,0.059,5.15e-03,18.3,0.111,8.10\n1480.0,36.0,0.0094,0.090,2.68e-03,6.25,0.054,5.00\n1480.0,36.0,0.0094,0.195,1.32e-02,14.2,0.088,7.75\n1480.0,36.0,0.0094,0.232,7.24e-03,6.55,0.043,3.85\n1480.0,36.0,0.0100,0.040,6.38e-03,29.7,0.169,13.3\n1480.0,36.0,0.0100,0.040,5.00e-03,23.2,0.144,11.2\n1480.0,36.0,0.0100,0.069,9.20e-03,24.8,0.150,10.6\n1480.0,36.0,0.0100,0.069,6.53e-03,17.6,0.113,8.50\n1480.0,36.0,0.0100,0.106,1.50e-02,27.8,0.162,12.2\n1480.0,36.0,0.0100,0.159,1.20e-02,14.0,0.092,7.49\n1480.0,36.0,0.0100,0.238,1.55e-02,12.1,0.083,7.48\n1480.0,36.0,0.0100,0.238,1.19e-02,9.22,0.068,6.13\n\"\"\"\n\n\"Compares approximate analytical to numerical solution.\"\nfunction solvekiln(; L, D, Φ, ω, β, γ, d, show = true)\n model = RotaryKilnBedSolution(;\n model = SymbolicLinearKramersModel(),\n L = L,\n R = D / 2.0,\n Φ = Φ / 3600.0,\n ω = ω / 60.0,\n β = deg2rad(β),\n γ = deg2rad(γ),\n d = d / 1000.0\n )\n\n optim = kramersnlapprox(;\n z = model.z,\n R = D / 2.0,\n Φ = Φ / 3600.0,\n ω = ω / 60.0,\n β = deg2rad(β),\n γ = deg2rad(γ),\n d = d / 1000.0\n )\n\n f = nothing\n ax = nothing\n\n if show\n f = Figure()\n ax = Axis(f[1, 1])\n\n lines!(ax, 100model.z/L, 100model.h, linewidth = 3, label = \"Numerical\")\n lines!(ax, 100optim.z/L, 100optim.h, linewidth = 3, label = \"Analytical\")\n\n a = @sprintf(\"%.1f\", model.ηₘ)\n b = @sprintf(\"%.1f\", optim.ηₘ)\n title = \"Loading: $(a)% (numerical) | $(b)% (analytical)\"\n\n ax.title = title\n ax.xlabel = \"Coordinate [%]\"\n ax.ylabel = \"Bed height [cm]\"\n ax.xticks = 0.0:20.0:100.0\n xlims!(ax, extrema(ax.xticks.val))\n end\n\n return model, optim, f, ax\nend\n\n\"Reference case for alumina kiln testing.\"\nfunction aluminakiln(ṁ, ω; show = false)\n # Density of bed [kg/m³]\n ρ = 800.0\n L = 34.0\n D = 1.5\n β = atan(0.025)\n\n model, optim, f, ax = solvekiln(\n L = L,\n D = D,\n Φ = (1000// 24) * ṁ / ρ,\n ω = ω,\n β = rad2deg(β),\n γ = 33.0,\n d = 0.050,\n show = show\n )\n\n τₚ = perrayresidence(L, ω, D, β)\n\n return model, optim, f, ax, τₚ\nend\n\n\"Run `aluminakiln` against some known conditions.\"\nfunction scanaluminakiln()\n ṁlist = [33.6, 43.2]\n ωlist = [0.85, 1.20]\n\n df = DataFrame(\n ṁ = Float64[],\n ω = Float64[],\n η̄ = Float64[],\n τᵢ = Float64[],\n τₚ = Float64[]\n )\n\n for ṁ ∈ ṁlist, ω ∈ ωlist\n model, _, _, _, τ = aluminakiln(ṁ, ω, show = false)\n η̄ = round(model.ηₘ, digits = 0)\n τᵢ = round(model.τ / 60.0, digits = 0)\n τₚ = round(τ, digits = 0)\n push!(df, [ṁ ω η̄ τᵢ τₚ])\n end\n\n return df\nend\n\nlet\n # @info(\"Solution of reference case\")\n\n in1_to_m1(v) = 0.0254 * v\n ft1_to_m1(v) = in1_to_m1(12.0) * v\n ft3_to_m3(v) = ft1_to_m1(1.0)^3 * v\n\n # Kiln length [m]\n L = ft1_to_m1(45.0)\n\n # Kiln diameter [m]\n D = 2 * ft1_to_m1(3.1)\n\n # Volume flow rate [m³/h]\n Φ = ft3_to_m3(6.1) * 60\n\n # Rotation rate (+0.0005) [rev/min]\n ω = 0.0505 * 60.0\n\n # Kiln slope (0.5in/ft) [°]\n β = rad2deg(atan(0.5 / 12))\n\n # Repose angle [°]\n γ = 45.0\n\n # Particle size [mm]\n d = 0.050\n\n # Conversions to match model inputs.\n R = D / 2.0\n Φ = Φ / 3600.0\n ω = ω / 60.0\n β = deg2rad(β)\n γ = deg2rad(γ)\n d = d / 1000.0\n\n # Create problem container.\n kramers = RotaryKilnBedSolution(;\n model = SymbolicLinearKramersModel(),\n L = L,\n R = R,\n Φ = Φ,\n ω = ω,\n β = β,\n γ = γ,\n d = d\n )\n\n optim = kramersnlapprox(;\n z = kramers.z,\n R = R,\n Φ = Φ,\n ω = ω,\n β = β,\n γ = γ,\n d = d\n )\n\n global kramers_NΦ = dimlessNΦ(R, β, ω, Φ, γ)\n global kramers_Nₖ = dimlessNₖ(L, R, β, γ)\n global kramers_η̄ₛ = sullivansηₘ(R, β, ω, Φ, γ)\n global kramers_ref = kramers\n global optim_ref = optim\n\n global RESULTS_TABLE = DataFrame(\n Quantity = [\n \"NΦ\",\n \"Nₖ\",\n \"η̄ᵣ\",\n \"η̄ᵢ\",\n ],\n Reference = [\n \"1.15\",\n \"1.17\",\n \"5.65\",\n @sprintf(\"%.2f\", optim_ref.ηₘ)\n ],\n Computed = [\n @sprintf(\"%.2f\", kramers_NΦ),\n @sprintf(\"%.2f\", kramers_Nₖ),\n @sprintf(\"%.2f\", kramers_η̄ₛ),\n @sprintf(\"%.2f\", kramers_ref.ηₘ)\n ]\n )\nend\n\nconst TABLE3 = let\n # @info(\"Verification of *Table 3*\")\n\n Dₖ = 0.197\n Lₖ = 1.780\n dₖ = 0.0012\n\n table3 = DataFrame(CSV.File(IOBuffer(DATA_TABLE3)))\n table3[!, \"η̄ᵢ\"] = zeros(length(table3[!, \"η̄ᵣ\"]))\n table3[!, \"η̄ᵣ\"] *= 100\n\n model = SymbolicLinearKramersModel()\n\n for (i, row) in enumerate(eachrow(table3))\n Φ = 3600.0 * row[\"ṁ\"] / row[\"ρ\"]\n ω = row[\"n\"] * 60.0\n β = rad2deg(atan(row[\"tan(β)\"]))\n γ = row[\"γ\"]\n\n kramers = RotaryKilnBedSolution(;\n model = model,\n L = Lₖ,\n R = Dₖ / 2.0,\n Φ = Φ / 3600.0,\n ω = ω / 60.0,\n β = deg2rad(β),\n γ = deg2rad(γ),\n d = dₖ / 1000.0\n )\n\n table3[i, \"η̄ᵢ\"] = round(kramers.ηₘ, digits = 1)\n end\n\n exclude = [\"ρ\", \"γ\", \"prod_dimless\", \"hold_real\"]\n select(table3, Not(exclude))\nend\n\nconst DIMLESSPLOT = let\n @info(\"Dimensionless profiles solution\")\n\n ρ = 1480.0\n L = 20.0\n D = 0.197\n Φ = 5.15e-03 / ρ * 3600\n ω = 0.059 * 60\n β = rad2deg(atan(0.0094))\n γ = 36.0\n\n # Conversions to match model inputs.\n R = D / 2.0\n Φ = Φ / 3600.0\n ω = ω / 60.0\n β = deg2rad(β)\n γ = deg2rad(γ)\n\n # Things held constant in loop.\n NΦ = dimlessNΦ(R, β, ω, Φ, γ)\n Nₖ = dimlessNₖ(L, R, β, γ)\n model = SymbolicLinearKramersModel()\n\n f = Figure()\n ax = Axis(f[1, 1])\n\n for d in [0.05, 0.10, 0.15, 0.193, 0.25]\n kramers = RotaryKilnBedSolution(;\n model = model,\n L = L,\n R = R,\n Φ = Φ,\n ω = ω,\n β = β,\n γ = γ,\n d = d * R * NΦ\n )\n\n # Dimensionless axes.\n z = kramers.z\n h = kramers.h / (R * NΦ)\n z = @. (L - z) / L * 1 / (NΦ * Nₖ)\n z = @. z[1] - z\n\n label = @sprintf(\"%.3f\", d)\n lines!(ax, z, h; linewidth = 2, label = label)\n end\n\n ax.title = \"Dimensionless loading curves\"\n ax.xlabel = \"Coordinate\"\n ax.ylabel = \"Bed height\"\n ax.xticks.val = 0.0:0.1:0.5\n ax.yticks.val = 0.05:0.05:0.25\n xlims!(ax, extrema(ax.xticks.val))\n ylims!(ax, extrema(ax.yticks.val))\n axislegend(ax; position = :rb)\n\n f\nend","category":"page"},{"location":"DryGranular/kramers/#Sample-reference-case","page":"Kramers' model","title":"Sample reference case","text":"","category":"section"},{"location":"DryGranular/kramers/","page":"Kramers' model","title":"Kramers' model","text":"Here we make use of the current implementation to check if it correctly approximates the last example provided in reference paper from [2]. To minimize rounding errors causes by unit conversions, we provide the required functions to convert from imperial to international system in the solution process.","category":"page"},{"location":"DryGranular/kramers/","page":"Kramers' model","title":"Kramers' model","text":"The next table summarizes the results. It is seen that the dimensionless numbers are well approximated. It must be emphasized that the reference estimates η̄ᵣ by a graphical method – it was 1952 – and the current value is considered a good enough approximation. Additionally, the equation was not integrated numerically as done here, but engineering relationships were used in the approximation. That said, the proper loading to be considered in our days is η̄ᵢ.","category":"page"},{"location":"DryGranular/kramers/","page":"Kramers' model","title":"Kramers' model","text":"mdtable(RESULTS_TABLE, latex=false) # hide","category":"page"},{"location":"DryGranular/kramers/","page":"Kramers' model","title":"Kramers' model","text":"Note: the last value in column Reference above is not provided in Kramers' paper but computed from the approximate analytical solution provided by the authors. As we see here, it may get >20% error under some circumstances.","category":"page"},{"location":"DryGranular/kramers/#Verification-of-*Table-3*","page":"Kramers' model","title":"Verification of Table 3","text":"","category":"section"},{"location":"DryGranular/kramers/","page":"Kramers' model","title":"Kramers' model","text":"In the next cell we provide the kiln dimensions used by Kramers (1952) to experimentally validate the model. Some data from their Tab. 3 is then loaded and all rows are simulated with current model. Fractional hold-up seems to be well correlated at least to a few percent of the reference value.","category":"page"},{"location":"DryGranular/kramers/","page":"Kramers' model","title":"Kramers' model","text":"mdtable(TABLE3, latex=false) # hide","category":"page"},{"location":"DryGranular/kramers/#Dimensionless-profiles","page":"Kramers' model","title":"Dimensionless profiles","text":"","category":"section"},{"location":"DryGranular/kramers/","page":"Kramers' model","title":"Kramers' model","text":"Next step in validation is to check profiles in dimensionless format, as done by Kramers in their Fig. 3. Notice that here we used the numerical integration curves instead of the analytical approximation of profiles, so reproduction and consequences of results are not exactly the same.","category":"page"},{"location":"DryGranular/kramers/","page":"Kramers' model","title":"Kramers' model","text":"DIMLESSPLOT # hide","category":"page"},{"location":"DryGranular/kramers/#Comparison-with-analytical","page":"Kramers' model","title":"Comparison with analytical","text":"","category":"section"},{"location":"DryGranular/kramers/","page":"Kramers' model","title":"Kramers' model","text":"The final step in model validation is to compare the approximate analytical solution proposed by Kramers and the results of numerical integration. It is worth mentioning that numerical integration remains the recommended method because one does not need to verify the ranges of validity of analytical approximation for every use case.","category":"page"},{"location":"DryGranular/kramers/","page":"Kramers' model","title":"Kramers' model","text":"let # hide\n _, _, f, ax = solvekiln( # hide\n L = 10.0, # hide\n D = 1.0, # hide\n Φ = 1.0, # hide\n ω = 1.0, # hide\n β = 3.0, # hide\n γ = 45.0, # hide\n d = 0.001 # hide\n ) # hide\n # hide\n ax.yticks = 0.0:4.0:20.0 # hide\n ylims!(ax, extrema(ax.yticks.val)) # hide\n f # hide\nend # hide","category":"page"},{"location":"DryGranular/kramers/#Industrial-cases","page":"Kramers' model","title":"Industrial cases","text":"","category":"section"},{"location":"DryGranular/kramers/","page":"Kramers' model","title":"Kramers' model","text":"The following illustrates a practical use case of the model. Next we scan a parameter space to confirm once again the model suitability as an alternative to analytical engineering estimations as per Peray's notebook.","category":"page"},{"location":"DryGranular/kramers/","page":"Kramers' model","title":"Kramers' model","text":"let # hide\n ṁ = 33.6 # hide\n ω = 0.85 # hide\n _, _, f, ax, _ = aluminakiln(ṁ, ω, show = true) # hide\n ax.yticks = 0.0:6.0:30.0 # hide\n ylims!(ax, extrema(ax.yticks.val)) # hide\n f # hide\nend # hide","category":"page"},{"location":"DryGranular/kramers/","page":"Kramers' model","title":"Kramers' model","text":"The following table confirms the expected values as per Peray.","category":"page"},{"location":"DryGranular/kramers/","page":"Kramers' model","title":"Kramers' model","text":"mdtable(scanaluminakiln(), latex=false) # hide","category":"page"},{"location":"Teaching/","page":"-","title":"-","text":"Notes related to my learning and teaching interests in several fields related to scientific computing (mostly applied mathematics and machine learning) and related applications. This home page is the entry point with interesting links and an index to the materials.","category":"page"},{"location":"Teaching/#HPC-related","page":"-","title":"HPC-related","text":"","category":"section"},{"location":"Teaching/","page":"-","title":"-","text":"Top 500: the most powerful computers on Earth\nSpecification benchmarking: check of hardware specification\nSlurm: job management for multi-user systems","category":"page"},{"location":"Teaching/#Software","page":"-","title":"Software","text":"","category":"section"},{"location":"Teaching/","page":"-","title":"-","text":"Basilisk\nOpenFOAM","category":"page"},{"location":"Teaching/#OpenSmoke","page":"-","title":"OpenSmoke++","text":"","category":"section"},{"location":"Teaching/","page":"-","title":"-","text":"OpenSmoke++ is a framework for detailed kinetics modeling of large reacting systems. This paper might be of interest: Dalili (2020) - modeling of a single droplet evaporation and combustion.","category":"page"},{"location":"Teaching/#DWSIM","page":"-","title":"DWSIM","text":"","category":"section"},{"location":"Teaching/","page":"-","title":"-","text":"Curso (Pr. Felix Monteiro Pereira)\nCurso (Pr. Delano Mendes de Santana)\nYouTube Playlist","category":"page"},{"location":"References/@Nabian2021a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Nabian2021a/","page":"-","title":"-","text":"title: Efficient training of physics-informed neural networks via importance sampling authors: Mohammad Amin Nabian, Rini Jasmine Gladstone, Hadi Meidani year: 2021 URL: https://doi.org/10.48550/arXiv.2104.12325 –-","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/#Combustion-models","page":"-","title":"Combustion models","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/","page":"-","title":"-","text":"Models inheriting from combustionModel base class. If you are reading this section you might also be interested in building the case and testing the combustion with OpenSmoke++ or Cantera.","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/","page":"-","title":"-","text":"Type Group Description\nEDC Turbulent Eddy Dissipation Concept turbulent combustion model. Probably the most popular approach for simulation of gas combustion in industrial processes.\nlaminar Laminar \nPaSR Laminar \nFDS Single-step \ninfinitelyFastChemistry Single-step \ndiffusion Single-step \nzoneCombustion Filter Enable the reactions within the specified list of cell-zones and set to zero elsewhere.\nnoCombustion Dummy Dummy combustion model for 'no combustion'.","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/#Cloud-models","page":"-","title":"Cloud models","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/","page":"-","title":"-","text":"In OpenFOAM, a cloud designate the injection of a secondary phase, generally solid particles or droplets, in a primary continuous carrier phase. The dictionary cloudProperties is identified in tutorials related to the following solver modules:","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/","page":"-","title":"-","text":"incompressibleDenseParticleFluid\nincompressibleFluid\nmulticomponentFluid\nmultiRegion","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/","page":"-","title":"-","text":"The default version of the dictionary provided here is not yet documented as of OpenFOAM v11 and does not contain any solver specific configurations, so the users must refer to the tutorial cases for setting up their studies. A post-processing particle tracking function associated to the dictionary is provided here (untested).","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/","page":"-","title":"-","text":"Currently OpenFOAM implements the following cloud types:","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/","page":"-","title":"-","text":"Cloud Description\nCollidingCloud Adds collisions to clouds.\nMomentumCloud Templated base class for momentum cloud. Adds particle forces and dispersion, injection, patch interaction, stochastic collision, and surface film models to clouds.\nParcelCloud Outermost template for parcel clouds.\nThermoCloud Templated base class for thermodynamic cloud. Adds heat transfer.\nMPPICCloud Adds MPPIC modelling to clouds.\nReactingCloud Templated base class for reacting cloud. Supports single phase with variable composition and phase change modeling.\nReactingMultiphaseCloud Templated base class for multiphase reacting cloud. Supports multiphase composition, devolatilization, and surface reactions.\nSprayCloud Templated base class for spray cloud. Supports atomization and break-up models.","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/#[CollidingCloud](https://cpp.openfoam.org/v11/classFoam_1_1CollidingCloud.html)-models","page":"-","title":"CollidingCloud models","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/#Collision-models","page":"-","title":"Collision models","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/","page":"-","title":"-","text":"These inherit from CollisionModel.","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/","page":"-","title":"-","text":"Type Description\nNoCollision Dummy class for the none option.\nPairCollision Material properties can be set in detail in sub-dictionary constantProperties. Notice that this is computationally expensive","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/#[MomentumCloud](https://cpp.openfoam.org/v11/classFoam_1_1MomentumCloud.html)-models","page":"-","title":"MomentumCloud models","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/#Dispersion-models","page":"-","title":"Dispersion models","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/#Injection-models","page":"-","title":"Injection models","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/","page":"-","title":"-","text":"These inherit from InjectionModel and implement how particles are injected into a continuous medium. The following table summarizes some of the available models.","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/","page":"-","title":"-","text":"Type Description\nconeInjection Inject particles in a number of oriented cones. Particles can be generated from a single point or over a disk. Injection can be made at constant velocity, pressure, or with a flow rate and discharge coefficient.","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/#Patch-interaction-models","page":"-","title":"Patch interaction models","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/#Stochastic-collision-models","page":"-","title":"Stochastic collision models","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/#Surface-film-models","page":"-","title":"Surface film models","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/#[ThermoCloud](https://cpp.openfoam.org/v11/classFoam_1_1ThermoCloud.html)-models","page":"-","title":"ThermoCloud models","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/#Heat-transfer-models","page":"-","title":"Heat transfer models","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/","page":"-","title":"-","text":"These inherit from HeatTransferModel. It is possible to provide a Stefan flow approximation to the models by using flag BirdCorrection in the models dictionaries.","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/","page":"-","title":"-","text":"Type Description\nNoHeatTransfer Dummy class for the none option.\nRanzMarshall The Ranz-Marshall ([[@Ranz1952]]) [16] correlation for heat transfer. For a more recent review, see e.g. ([[@Aissa2015a]]) [17].","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/#[MPPICCloud](https://cpp.openfoam.org/v11/classFoam_1_1MPPICCloud.html)-models","page":"-","title":"MPPICCloud models","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/#Packing-models","page":"-","title":"Packing models","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/#Isotropy-models","page":"-","title":"Isotropy models","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/#Damping-models","page":"-","title":"Damping models","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/#[ReactingCloud](https://cpp.openfoam.org/v11/classFoam_1_1ReactingCloud.html)-models","page":"-","title":"ReactingCloud models","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/#Phase-change-models","page":"-","title":"Phase change models","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/","page":"-","title":"-","text":"These inherit from PhaseChangeModel. ","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/","page":"-","title":"-","text":"Type Description\nNoPhaseChange Dummy class for the none option.\nLiquidEvaporation Liquid evaporation model using ideal gas assumption.\nLiquidEvaporationBoil Liquid evaporation model using ideal gas assumption and includes boiling model based on ([[@Zuo2000a]]) [18].","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/#[ReactingMultiphaseCloud](https://cpp.openfoam.org/v11/classFoam_1_1ReactingMultiphaseCloud.html)-models","page":"-","title":"ReactingMultiphaseCloud models","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/#Devolatilization-models","page":"-","title":"Devolatilization models","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/#Surface-reaction-models","page":"-","title":"Surface reaction models","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/#[SprayCloud](https://cpp.openfoam.org/v11/classFoam_1_1SprayCloud.html)-models","page":"-","title":"SprayCloud models","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/#Atomization-models","page":"-","title":"Atomization models","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/#Breakup-models","page":"-","title":"Breakup models","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/","page":"-","title":"-","text":"These inherit from BreakupModel for handling particle breakup.","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/","page":"-","title":"-","text":"Type Description\nNoBreakup \nPilchErdman \nReitzDiwakar Secondary breakup model adapted to high pressure fuel sprays.\nReitzKHRT Secondary breakup model which uses the Kelvin-Helmholtz instability theory to predict the stripped droplets and the Raleigh-Taylor instability as well.\nSHF \nETAB Enhanced TAB model for non-evaporating fuel sprays.\nTAB ","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/#Composition-models","page":"-","title":"Composition models","text":"","category":"section"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/","page":"-","title":"-","text":"These inherit from CompositionModel and consists of carrier species (via thermo package), and additional liquids and solids. They are not attached to a type of cloud and each model supports their own cloud types.","category":"page"},{"location":"Teaching/OpenFOAM/OpenFOAM.org/Physical-Models/","page":"-","title":"-","text":"Type Description Support\nNoComposition Dummy class for the none option. \nSingleMixtureFraction Templated parcel multi-phase, multi-component class. ReactingMultiphaseCloud\nSinglePhaseMixture Templated parcel single phase, multi-component class. SprayCloud, ReactingCloud","category":"page"},{"location":"References/@Guo2023a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Guo2023a/","page":"-","title":"-","text":"title: \"Unraveling the design pattern of physics-informed neural networks: Series 01\" authors: Shuai Guo year: 2023 URL: https://towardsdatascience.com/unraveling-the-design-pattern-of-physics-informed-neural-networks-series-01-8190df459527 –-","category":"page"},{"location":"References/@Guo2023a/","page":"-","title":"-","text":"In this post, the author discusses the work by [[@Wu2022a]] in what concerns the adaptive (resampling and refinement) residual point distribution to boost training and accuracy.","category":"page"},{"location":"References/@Guo2023a/","page":"-","title":"-","text":"Approaches:","category":"page"},{"location":"References/@Guo2023a/","page":"-","title":"-","text":"RAD: residual-based adaptive distribution (more expensive)\nRAR-D: residual-based adaptive refinement with distribution (robust)\nBoth are less useful under smooth solutions (activate when required)","category":"page"},{"location":"References/@Guo2023a/","page":"-","title":"-","text":"Key idea: resample with a probability proportional to residual","category":"page"},{"location":"References/@Guo2023a/","page":"-","title":"-","text":"$","category":"page"},{"location":"References/@Guo2023a/","page":"-","title":"-","text":"p(x) \\propto \\frac{\\varepsilon^k(x)}{𝔼[\\varepsilon^k(x)]}+C $","category":"page"},{"location":"References/@Guo2023a/","page":"-","title":"-","text":"Other references of interest are:","category":"page"},{"location":"References/@Guo2023a/","page":"-","title":"-","text":"[[@Lu2019a]]: residual-based adaptive refinement (RAR-D with high k)\n[[@Nabian2021a]]: importance sampling (RAD with k=1 and c=0)","category":"page"},{"location":"References/@Guo2023f/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Guo2023f/","page":"-","title":"-","text":"title: \"Unraveling the design pattern of physics-informed neural networks: Series 06\" authors: Shuai Guo year: 2023 URL: https://towardsdatascience.com/unraveling-the-design-pattern-of-physics-informed-neural-networks-part-06-bcb3557199e2 –-","category":"page"},{"location":"References/@Lagaris1997a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Lagaris1997a/","page":"-","title":"-","text":"title: Artificial neural networks for solving ordinary and partial differential equations authors: I. E. Lagaris, A. Likas, D. I. Fotiadis year: 1997 –-","category":"page"},{"location":"References/@Gidaspow1994/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Gidaspow1994/","page":"-","title":"-","text":"title: \"Multiphase flow and fluidization: continuum and kinetic theory descriptions with applications\" authors: Dimitri Gidaspow year: 1994 URL: TODO –-","category":"page"},{"location":"References/@Saario2005a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Saario2005a/","page":"-","title":"-","text":"title: Heavy fuel oil combustion in a cylindrical laboratory furnace: measurements and modeling authors: A. Saario, A. Rebola, P. Coelho, M. Costa, A. Oksanen year: 2005 –-","category":"page"},{"location":"Teaching/OpenFOAM/Cases/injectionChannel/#Verification","page":"-","title":"Verification","text":"","category":"section"},{"location":"Teaching/OpenFOAM/Cases/injectionChannel/","page":"-","title":"-","text":"Using the base package provided here we can verify the computation of number of parcels per second of sample case injectionChannel. Notice that the value of mdot has been reversed engineered so that it matches the expected value.","category":"page"},{"location":"Teaching/OpenFOAM/Cases/injectionChannel/","page":"-","title":"-","text":"import OpenFOAM as OF\n\nOF.parcels_per_second(; mdot = 0.2, rhop = 1000.0, diam = 650.0e-06, nParticle = 1)\n# Output: 1390885","category":"page"},{"location":"References/@Lu2019a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Lu2019a/","page":"-","title":"-","text":"title: \"DeepXDE: A deep learning library for solving differential equations\" authors: Lu Lu, Xuhui Meng, Zhiping Mao, George E. Karniadakis year: 2019 URL: https://doi.org/10.48550/arXiv.1907.04502 Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZla8eg-cL7mDKg_muqQ?e=hcIqTb –-","category":"page"},{"location":"DryFlowsheet/#DryFlowsheet","page":"DryFlowsheet","title":"DryFlowsheet","text":"","category":"section"},{"location":"DryFlowsheet/","page":"DryFlowsheet","title":"DryFlowsheet","text":"CurrentModule = DryFlowsheet","category":"page"},{"location":"DryFlowsheet/","page":"DryFlowsheet","title":"DryFlowsheet","text":"Modules = [ DryFlowsheet ]","category":"page"},{"location":"DryFlowsheet/#DryFlowsheet.CooledCrushingMill","page":"DryFlowsheet","title":"DryFlowsheet.CooledCrushingMill","text":"Represents a crushing device with cooling system.\n\nModels\n\n:TARGET_COOLANT_TEMP evaluates the heat transfer lost to coolant provided a target final stream temperature given by keyword argument temp_out. Product temperature is updated through an EnergyStream built with energy exchange computed through exchanged_heat, so that numerical value can be slightly different from target value.\n:USING_GLOBAL_HTC makes use of a global heat transfer coefficient to evaluate heat flux across the cooling stream.\n\nAttributes\n\nrawmeal: The input meal applied to crushing process.\nproduct: The output material stream at the end of product pipeline.\ncoolant: The output material stream at the end of cooling pipeline.\npower: The power applied to the crushing process [W]\nloss: The heat exchanged in between product and cooling pipelines [W].\nglobalhtc: Global heat transfer coefficient [W/K].\n\n\n\n\n\n","category":"type"},{"location":"DryFlowsheet/#DryFlowsheet.EnergyStream","page":"DryFlowsheet","title":"DryFlowsheet.EnergyStream","text":"Represents an energy stream.\n\nAttributes\n\nḣ: Energy flow provided by stream [W].\n\n\n\n\n\n","category":"type"},{"location":"DryFlowsheet/#DryFlowsheet.MaterialStream","page":"DryFlowsheet","title":"DryFlowsheet.MaterialStream","text":"Represents a material stream.\n\nAttributes\n\nṁ: Material mass flow rate [kg/s].\nT: Stream temperature [K].\nP: Stream pressure [Pa].\nY: Components mass fractions [-].\npipeline: Materials pipeline associated to Y.\n\n\n\n\n\n","category":"type"},{"location":"DryFlowsheet/#DryFlowsheet.SolidsSeparator","page":"DryFlowsheet","title":"DryFlowsheet.SolidsSeparator","text":"Represents a solids separator with efficiency η.\n\nTo-do's\n\nAdd inverse model to automatically tune efficiency η.\n\nAttributes\n\nη: Solids separation efficiency [-].\nsource: The stream to be separated into solids and others.\nsolids: The output solids stream.\nothers: The output remaining stream.\n\n\n\n\n\n","category":"type"},{"location":"DryFlowsheet/#DryFlowsheet.StreamPipeline","page":"DryFlowsheet","title":"DryFlowsheet.StreamPipeline","text":"Array of materials to include in a stream.\n\n\n\n\n\n","category":"type"},{"location":"DryFlowsheet/#DryFlowsheet.TransportPipeline","page":"DryFlowsheet","title":"DryFlowsheet.TransportPipeline","text":"Represents a pipeline with heat transfer.\n\nModels\n\n:TARGET_EXIT_TEMP evaluates the heat transfer lost to environment provided a target final stream temperature given by keyword argument temp_out. Product temperature is updated through an EnergyStream built with energy exchange computed through exchanged_heat, so that numerical value can be slightly different from target value.\n:USING_GLOBAL_HTC makes use of a global heat transfer coefficient to evaluate heat flux across the pipe.\n\nTo-do's\n\nImplement heat transfer losses through a convective heat transfer coefficient (HTC) computed from a suitable Nusselt number, for use of pipeline in simulation mode.\n\nAttributes\n\nproduct: The output material stream at the end of pipeline.\npower: The heat exchanged in pipeline [W].\n\n\n\n\n\n","category":"type"},{"location":"DryFlowsheet/#DryFlowsheet.cooled_crushing-Tuple{}","page":"DryFlowsheet","title":"DryFlowsheet.cooled_crushing","text":"Manage use of CooledCrushingMill with different models.\n\n\n\n\n\n","category":"method"},{"location":"DryFlowsheet/#DryFlowsheet.enthalpyflowrate","page":"DryFlowsheet","title":"DryFlowsheet.enthalpyflowrate","text":"Enthalpy flow rate of given stream [W].\n\n\n\n\n\n","category":"function"},{"location":"DryFlowsheet/#DryFlowsheet.exchanged_heat-Tuple{MaterialStream, Any}","page":"DryFlowsheet","title":"DryFlowsheet.exchanged_heat","text":"Heat exchanged with stream to match outlet temperature.\n\n\n\n\n\n","category":"method"},{"location":"DryFlowsheet/#DryFlowsheet.transport_pipe-NTuple{4, Any}","page":"DryFlowsheet","title":"DryFlowsheet.transport_pipe","text":"Manage use of TransportPipeline with different models.\n\n\n\n\n\n","category":"method"},{"location":"References/@ORourke2010/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@ORourke2010/","page":"-","title":"-","text":"title: An improved collision damping time for MP-PIC calculations of dense particle flows with applications to polydisperse sedimenting beds and colliding particle jets authors: Peter J. O’Rourke, Dale M. Snider year: 2010 URL: https://doi.org/10.1016/j.ces.2010.08.032 –-","category":"page"},{"location":"References/@Cai2021a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Cai2021a/","page":"-","title":"-","text":"title: Physics-informed neural networks for heat transfer problems authors: Shengze Cai, Zhicheng Wang, Sifan Wang, Paris Perdikaris, George Em Karniadakis year: 2021 URL: https://doi.org/10.1115/1.4050542 –-","category":"page"},{"location":"helpers/#Helpers","page":"Helpers","title":"Helpers","text":"","category":"section"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"The core packages of WallyToolbox ecosystem provide shared functionalities and types that are used in several other more specialized packages. This allows for standardization of interfaces, employed quantities, and avoid boilerplate code. This page organizes everything to facilitate the understanding of the end-user. Knowing the base helper packages DryConstants and DryUtilities is key for proper usage of WallyToolbox.","category":"page"},{"location":"helpers/#DryConstants","page":"Helpers","title":"DryConstants","text":"","category":"section"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"CurrentModule = DryConstants","category":"page"},{"location":"helpers/#Physical-constants","page":"Helpers","title":"Physical constants","text":"","category":"section"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"DryConstants.GAS_CONSTANT\nDryConstants.STEFAN_BOLTZMANN","category":"page"},{"location":"helpers/#DryConstants.GAS_CONSTANT","page":"Helpers","title":"DryConstants.GAS_CONSTANT","text":"Ideal gas constant [J/(mol.K)].\n\n\n\n\n\n","category":"constant"},{"location":"helpers/#DryConstants.STEFAN_BOLTZMANN","page":"Helpers","title":"DryConstants.STEFAN_BOLTZMANN","text":"Stefan-Boltzmann constant [W/(m².K⁴)].\n\n\n\n\n\n","category":"constant"},{"location":"helpers/#Reference-states","page":"Helpers","title":"Reference states","text":"","category":"section"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"DryConstants.T_REF\nDryConstants.P_REF\nDryConstants.C_REF","category":"page"},{"location":"helpers/#DryConstants.T_REF","page":"Helpers","title":"DryConstants.T_REF","text":"Normal atmospheric temperature [K].\n\n\n\n\n\n","category":"constant"},{"location":"helpers/#DryConstants.P_REF","page":"Helpers","title":"DryConstants.P_REF","text":"Reference atmospheric pressure [Pa].\n\n\n\n\n\n","category":"constant"},{"location":"helpers/#DryConstants.C_REF","page":"Helpers","title":"DryConstants.C_REF","text":"Normal state concentration [mol/m³]. \n\n\n\n\n\n","category":"constant"},{"location":"helpers/#Other-constants","page":"Helpers","title":"Other constants","text":"","category":"section"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"DryConstants.ZERO_CELSIUS\nDryConstants.ONE_ATM\nDryConstants.M_AIR","category":"page"},{"location":"helpers/#DryConstants.ZERO_CELSIUS","page":"Helpers","title":"DryConstants.ZERO_CELSIUS","text":"Zero degrees Celsius in Kelvin [273.15 K].\n\n\n\n\n\n","category":"constant"},{"location":"helpers/#DryConstants.ONE_ATM","page":"Helpers","title":"DryConstants.ONE_ATM","text":"Atmospheric pressure at sea level [101325.0 Pa].\n\n\n\n\n\n","category":"constant"},{"location":"helpers/#DryConstants.M_AIR","page":"Helpers","title":"DryConstants.M_AIR","text":"Air mean molecular mass [kg/mol].\n\n\n\n\n\n","category":"constant"},{"location":"helpers/#DryUtilities","page":"Helpers","title":"DryUtilities","text":"","category":"section"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"CurrentModule = DryUtilities\nDocTestSetup = quote\n using DryUtilities\n using DryUtilities: heaviside, interval, makestepwise1d\n using DryUtilities: closestpowerofx, axesunitscaler\n using DryUtilities: maxrelativechange, maxabsolutechange\nend","category":"page"},{"location":"helpers/#Haskell-like-array-slicing","page":"Helpers","title":"Haskell-like array slicing","text":"","category":"section"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"Those who know Haskell probably started learning it by manipulating lists with head and tail. Those functionalities are not available in Julia by default and array slicing - with an ugly syntax - is required. Since this is done often in the fields of application of DryTooling, both head and tail together with a body functions are available in its core. They are simple wrapers over the @view macro and work with both iterable types and arrays. The following snippet illustrates their usage.","category":"page"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"julia> v = collect(1:4);\n\njulia> head(v) == [1; 2; 3]\ntrue\n\njulia> tail(v) == [2; 3; 4]\ntrue\n\njulia> body(v) == [2; 3]\ntrue","category":"page"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"More examples are provided in the following documentation ahead of each of the functions.","category":"page"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"julia> head(1:4)\n1:3\n\njulia> head([1, 2, 3, 4])\n3-element view(::Vector{Int64}, 1:3) with eltype Int64:\n 1\n 2\n 3\n","category":"page"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"DryUtilities.head","category":"page"},{"location":"helpers/#DryUtilities.head","page":"Helpers","title":"DryUtilities.head","text":"head(z)\n\nAccess view of array head. See also tail and body.\n\n\n\n\n\n","category":"function"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"julia> tail([1, 2, 3, 4])\n3-element view(::Vector{Int64}, 2:4) with eltype Int64:\n 2\n 3\n 4\njulia> tail(1:4)\n2:4","category":"page"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"DryUtilities.tail","category":"page"},{"location":"helpers/#DryUtilities.tail","page":"Helpers","title":"DryUtilities.tail","text":"tail(z)\n\nAccess view of array tail. See also head and body.\n\n\n\n\n\n","category":"function"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"julia> body([1, 2, 3, 4])\n2-element view(::Vector{Int64}, 2:3) with eltype Int64:\n 2\n 3\njulia> body(1:4)\n2:3","category":"page"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"DryUtilities.body","category":"page"},{"location":"helpers/#DryUtilities.body","page":"Helpers","title":"DryUtilities.body","text":"body(z)\n\nAccess view of array body. See also head and tail.\n\n\n\n\n\n","category":"function"},{"location":"helpers/#Handling-of-discontinuous-functions","page":"Helpers","title":"Handling of discontinuous functions","text":"","category":"section"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"Discontinuous functions are all over in real world applications. Whether they handle discrete signals sent to controllers or represent a material property change in the solution domain of a heat transfer simulation, they are often represented by a single or a composition of Heaviside step functions. Again, because its implementation is pretty simple and optimization routines require a differentiable form of this function, DryUtilities implements heaviside and interval as proposed in this StackOverflow answer.","category":"page"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"julia> heaviside(-1) == 0\ntrue\n\njulia> heaviside(-1.0) == 0.0\ntrue\n\njulia> heaviside(0.0) == 0.5\ntrue\n\njulia> heaviside(1.0) == 1.0\ntrue\n\njulia> interval(10; a = 0, b = 10) == 0.5\ntrue","category":"page"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"We see below that heaviside also works on ranges","category":"page"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"julia> heaviside(-2:2)\n5-element Vector{Float64}:\n 0.0\n 0.0\n 0.5\n 1.0\n 1.0","category":"page"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"DryUtilities.heaviside","category":"page"},{"location":"helpers/#DryUtilities.heaviside","page":"Helpers","title":"DryUtilities.heaviside","text":"heaviside(t)\n\nProvides a Heaviside function compatible with automatic differentiation. This is a requirement for conceiving, e.g., model predictive controls with discontinuous functions under ModelingToolkit.\n\n\n\n\n\n","category":"function"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"By implementation inheritance that is also the case for interval:","category":"page"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"julia> interval(0:6; a = 2, b = 5)\n7-element Vector{Float64}:\n 0.0\n 0.0\n 0.5\n 1.0\n 1.0\n 0.5\n 0.0","category":"page"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"DryUtilities.interval","category":"page"},{"location":"helpers/#DryUtilities.interval","page":"Helpers","title":"DryUtilities.interval","text":"interval(x; a=-Inf, b=Inf)\n\nReturns 1 if x (a b), 1/2 for x = a x = b, or 0.\n\n\n\n\n\n","category":"function"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"As it is the case for representation of specific heats using NASA7/NASA9 or Shomate polynomials, functions defined by parts with an specific change point are also required in physical modeling. To this end, a stepwise function can be established with makestepwise1d. If keyword differentialble = true, then the function makes use of the above interval and remains compatible with ModelingToolkit, for instance.","category":"page"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"julia> f = makestepwise1d(x->x, x->x^2, 1.0; differentiable = true);\n\njulia> f(0:0.2:2.0)\n11-element Vector{Float64}:\n 0.0\n 0.2\n 0.4\n 0.6\n 0.8\n 1.0\n 1.44\n 1.9599999999999997\n 2.5600000000000005\n 3.24\n 4.0\n\njulia> using ModelingToolkit\n\njulia> @variables x\n1-element Vector{Num}:\n x\n\njulia> f(x); # Output is too long, try by yourself.","category":"page"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"DryUtilities.makestepwise1d","category":"page"},{"location":"helpers/#DryUtilities.makestepwise1d","page":"Helpers","title":"DryUtilities.makestepwise1d","text":"makestepwise1d(lo, hi, xc)\n\nCreates an univariate function that is composed of two parts, the first evaluated before a critical domain point xc, and the second above that value. This is often required, for instance, for the evaluation of NASA polynomials for thermodynamic properties. If differentiable, then the returned function is compatible with symbolic argument as required when using package ModelingToolkit, etc.\n\n\n\n\n\n","category":"function"},{"location":"helpers/#Rounding-numbers-and-automatic-axes","page":"Helpers","title":"Rounding numbers and automatic axes","text":"","category":"section"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"danger: Danger\nThis section documents functions that are used in a very unstable context.","category":"page"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"Simple rounding is not enough. Getting values that are rounded close to a power of a given number and rounded to floor or ceil is often the case. This is standardized in DryTooling through closestpowerofx:","category":"page"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"julia> closestpowerofx(10)\n10\n\njulia> closestpowerofx(11)\n20\n\njulia> closestpowerofx(11, roundf = floor)\n10\n\njulia> closestpowerofx(11, x = 5, roundf = floor)\n10\n\njulia> closestpowerofx(12.0; x = 10)\n20\n\njulia> closestpowerofx(12.0; x = 10, roundf = floor)\n10\n\njulia> closestpowerofx(12.0; x = 10, roundf = round)\n10","category":"page"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"DryUtilities.closestpowerofx","category":"page"},{"location":"helpers/#DryUtilities.closestpowerofx","page":"Helpers","title":"DryUtilities.closestpowerofx","text":"closestpowerofx(\n v::Number;\n x::Number = 10,\n roundf::Function = ceil\n)::Int64\n\nCompute the integer power of x closest to v using roundf as rouding method. This might be useful for automatic setting more reasonable limits to plot axis or similar applications. Changing the rouding method through roundf is also possible.\n\n\n\n\n\n","category":"function"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"Below we illustrate the usage of axesunitscaler.","category":"page"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"NOTE: this function is not yet stable. In the future it will instead return labels using symbols like k, M, G, etc., for the units through a flag provided by the user.","category":"page"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"julia> axesunitscaler(1)\n(\"\", 1)\n\njulia> axesunitscaler(1000)\n(\"[×1000]\", 1000)\n\njulia> axesunitscaler(1000000)\n(\"[×1000000]\", 1000000)","category":"page"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"DryUtilities.axesunitscaler","category":"page"},{"location":"helpers/#DryUtilities.axesunitscaler","page":"Helpers","title":"DryUtilities.axesunitscaler","text":"axesunitscaler(x::Number)::Tuple{String, Int64}\n\nFind scaling factor for multiples of 1000 units. Together with closestpowerofx this can be used to produce better automatic plot axes limits. The returned values provide the string for modifying the axis label and the associated scaling factor.\n\n\n\n\n\n","category":"function"},{"location":"helpers/#Computation-of-changes-and-residuals","page":"Helpers","title":"Computation of changes and residuals","text":"","category":"section"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"danger: Danger\nThis section documents functions that are used in a very unstable context.","category":"page"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"DryUtilities.maxabsolutechange\nDryUtilities.maxrelativechange","category":"page"},{"location":"helpers/#DryUtilities.maxabsolutechange","page":"Helpers","title":"DryUtilities.maxabsolutechange","text":"Maximum absolute change in a solution array.\n\n\n\n\n\n","category":"function"},{"location":"helpers/#DryUtilities.maxrelativechange","page":"Helpers","title":"DryUtilities.maxrelativechange","text":"Maximum relative change in a solution array.\n\n\n\n\n\n","category":"function"},{"location":"helpers/#Unit-conversion","page":"Helpers","title":"Unit conversion","text":"","category":"section"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"DryUtilities.nm3_h_to_kg_h\nDryUtilities.kg_h_to_nm3_h","category":"page"},{"location":"helpers/#DryUtilities.nm3_h_to_kg_h","page":"Helpers","title":"DryUtilities.nm3_h_to_kg_h","text":"Convert [Nm³/h] to [kg/h].\n\n\n\n\n\n","category":"function"},{"location":"helpers/#DryUtilities.kg_h_to_nm3_h","page":"Helpers","title":"DryUtilities.kg_h_to_nm3_h","text":"Convert [kg/h] to [Nm³/h].\n\n\n\n\n\n","category":"function"},{"location":"helpers/#Others","page":"Helpers","title":"Others","text":"","category":"section"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"DryUtilities.defaultvalue","category":"page"},{"location":"helpers/#DryUtilities.defaultvalue","page":"Helpers","title":"DryUtilities.defaultvalue","text":"Syntax sugar for handling a possibly nothing value.\n\n\n\n\n\n","category":"function"},{"location":"helpers/#Abstract-types","page":"Helpers","title":"Abstract types","text":"","category":"section"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"CurrentModule = DryAbstract","category":"page"},{"location":"helpers/#Fixed-state-materials","page":"Helpers","title":"Fixed state materials","text":"","category":"section"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"DryAbstract.AbstractMaterial\nDryAbstract.AbstractSolidMaterial\nDryAbstract.AbstractLiquidMaterial\nDryAbstract.AbstractGasMaterial\nDryAbstract.AbstractSolidMineralPhase","category":"page"},{"location":"helpers/#DryAbstract.AbstractMaterial","page":"Helpers","title":"DryAbstract.AbstractMaterial","text":"Base type for any material substance.\n\n\n\n\n\n","category":"type"},{"location":"helpers/#DryAbstract.AbstractSolidMaterial","page":"Helpers","title":"DryAbstract.AbstractSolidMaterial","text":"Base type for solid materials.\n\n\n\n\n\n","category":"type"},{"location":"helpers/#DryAbstract.AbstractLiquidMaterial","page":"Helpers","title":"DryAbstract.AbstractLiquidMaterial","text":"Base type for liquid materials.\n\n\n\n\n\n","category":"type"},{"location":"helpers/#DryAbstract.AbstractGasMaterial","page":"Helpers","title":"DryAbstract.AbstractGasMaterial","text":"Base type for gas materials.\n\n\n\n\n\n","category":"type"},{"location":"helpers/#DryAbstract.AbstractSolidMineralPhase","page":"Helpers","title":"DryAbstract.AbstractSolidMineralPhase","text":"Base type for any mineral material.\n\n\n\n\n\n","category":"type"},{"location":"helpers/#Problem-solving-and-physical-models","page":"Helpers","title":"Problem solving and physical models","text":"","category":"section"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"DryAbstract.AbstractMatrixProblem\nDryAbstract.AbstractIterativeSolver\nDryAbstract.AbstractSolutionStorage\nDryAbstract.AbstractPhysicalModel","category":"page"},{"location":"helpers/#DryAbstract.AbstractMatrixProblem","page":"Helpers","title":"DryAbstract.AbstractMatrixProblem","text":"Base type for linear algebra problems.\n\n\n\n\n\n","category":"type"},{"location":"helpers/#DryAbstract.AbstractIterativeSolver","page":"Helpers","title":"DryAbstract.AbstractIterativeSolver","text":"Base type for (nonlinear) iterative solvers.\n\n\n\n\n\n","category":"type"},{"location":"helpers/#DryAbstract.AbstractSolutionStorage","page":"Helpers","title":"DryAbstract.AbstractSolutionStorage","text":"Base type for storing simulation solution.\n\n\n\n\n\n","category":"type"},{"location":"helpers/#DryAbstract.AbstractPhysicalModel","page":"Helpers","title":"DryAbstract.AbstractPhysicalModel","text":"Base type for physical models.\n\n\n\n\n\n","category":"type"},{"location":"helpers/#Transport,-thermodynamics,-and-kinetics","page":"Helpers","title":"Transport, thermodynamics, and kinetics","text":"","category":"section"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"DryAbstract.AbstractTransportModel\nDryAbstract.AbstractSolidTransport\nDryAbstract.AbstractGasThermo\nDryAbstract.AbstractSolidThermo\nDryAbstract.AbstractMixtureSubstance\nDryAbstract.AbstractMixturePhase\nDryAbstract.AbstractKineticsMechanism","category":"page"},{"location":"helpers/#DryAbstract.AbstractTransportModel","page":"Helpers","title":"DryAbstract.AbstractTransportModel","text":"Base type for transport models.\n\n\n\n\n\n","category":"type"},{"location":"helpers/#DryAbstract.AbstractSolidTransport","page":"Helpers","title":"DryAbstract.AbstractSolidTransport","text":"Base type for transport models.\n\n\n\n\n\n","category":"type"},{"location":"helpers/#DryAbstract.AbstractGasThermo","page":"Helpers","title":"DryAbstract.AbstractGasThermo","text":"Base type for thermodynamic models.\n\n\n\n\n\n","category":"type"},{"location":"helpers/#DryAbstract.AbstractSolidThermo","page":"Helpers","title":"DryAbstract.AbstractSolidThermo","text":"Base type for thermodynamic models.\n\n\n\n\n\n","category":"type"},{"location":"helpers/#DryAbstract.AbstractMixtureSubstance","page":"Helpers","title":"DryAbstract.AbstractMixtureSubstance","text":"Base type for simplified mixture substances.\n\n\n\n\n\n","category":"type"},{"location":"helpers/#DryAbstract.AbstractMixturePhase","page":"Helpers","title":"DryAbstract.AbstractMixturePhase","text":"Base type for simplified mixture phases.\n\n\n\n\n\n","category":"type"},{"location":"helpers/#DryAbstract.AbstractKineticsMechanism","page":"Helpers","title":"DryAbstract.AbstractKineticsMechanism","text":"Base type for coded kinetics mechanisms.\n\n\n\n\n\n","category":"type"},{"location":"helpers/#Finite-volume-method-and-relatives","page":"Helpers","title":"Finite volume method and relatives","text":"","category":"section"},{"location":"helpers/","page":"Helpers","title":"Helpers","text":"DryAbstract.AbstractDiffusionModel1D\nDryAbstract.AbstractGrid1D","category":"page"},{"location":"helpers/#DryAbstract.AbstractDiffusionModel1D","page":"Helpers","title":"DryAbstract.AbstractDiffusionModel1D","text":"Base type for diffusion (heat, species, ...) models.\n\n\n\n\n\n","category":"type"},{"location":"helpers/#DryAbstract.AbstractGrid1D","page":"Helpers","title":"DryAbstract.AbstractGrid1D","text":"Base type of one-dimensional grids.\n\n\n\n\n\n","category":"type"},{"location":"References/@Lu2021a/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Lu2021a/","page":"-","title":"-","text":"title: Physics-informed neural networks with hard constraints for inverse design authors: Lu Lu, Raphael Pestourie, Wenjie Yao, Zhicheng Wang, Francesc Verdugo, Steven G. Johnson year: 2021 URL: https://doi.org/10.48550/arXiv.2102.04626 –-","category":"page"},{"location":"Teaching/Ansys Fluent/UDF/#General-purpose","page":"-","title":"General purpose","text":"","category":"section"},{"location":"Teaching/Ansys Fluent/UDF/","page":"-","title":"-","text":"Macro Notes\nData_Valid_P Test if parameters required by UDF have been initialized. It is a good practice to use this macro on top of UDF's to avoid crashes.\nMessage Displays a message, to be used from host.\nError Display and throw an error message. Compiled only.","category":"page"},{"location":"Teaching/Ansys Fluent/UDF/#Macro-parallelization","page":"-","title":"Macro parallelization","text":"","category":"section"},{"location":"Teaching/Ansys Fluent/UDF/","page":"-","title":"-","text":"Macro Notes\nPRINCIPAL_FACE_P When looping across faces in a thread using begin_f_loop (or another equivalent macro) in a parallel setting, we might access elements that actually belong to other nodes (because of how MPI works). This macro allows us to check the current face is part of the chunk belonging to current node, what allows us to avoid computing a quantity multiple times, leading to wrong results. Compiled only.\nRP_HOST Used in #if directives to tell code must be evaluated only in host.\nRP_NODE Used in #if directives to tell code must be evaluated only in nodes.\nPRF_GRSUM1 Performs aggregation of real R values through sum SUM1. This function is called in nodes and there are other cousins for different aggregations.\nnode_to_host_{type}_{n} Pass n values of type from node to host. It is called after, e.g. aggregations such as PRF_GRSUM1 are used in node. There is also an equivalent host_to_node_{type}_{n}.","category":"page"},{"location":"Teaching/Transport Phenomena/Analysis of Transport Phenomena/","page":"-","title":"-","text":"","category":"page"},{"location":"Teaching/Transport Phenomena/Analysis of Transport Phenomena/#Models","page":"-","title":"Models","text":"","category":"section"},{"location":"Teaching/Transport Phenomena/Analysis of Transport Phenomena/","page":"-","title":"-","text":"Theses notes intend to provide in a very concise way the mathematical fundamentals of transport phenomena. In this sense, they are devoted to generalities rather than specific closure models. ","category":"page"},{"location":"Teaching/Transport Phenomena/Analysis of Transport Phenomena/","page":"-","title":"-","text":"Most physical phenomena are actually discrete processes (particles); many phenomena such as heat transfer are actual discrete vibrations in materials. Such systems are described by large systems of coupled ordinary differential equations (ODE's) which quickly become intractable and require numerical solution. Continuum approximations, i.e. an averaging process over a representative volume element (RVE), are used to generate a single partial differential equation (PDE) from many such ODE's. This transformation leads to the concept of conservation equations.","category":"page"},{"location":"Teaching/Transport Phenomena/Analysis of Transport Phenomena/","page":"-","title":"-","text":"Say we have a quantity b such as it represents a number concentration of a given physical quantity. Associated to this quantity we have a flux density vecF through the boundaries of the system and a rate production in volume B_v as summarized in the following table.","category":"page"},{"location":"Teaching/Transport Phenomena/Analysis of Transport Phenomena/","page":"-","title":"-","text":"$","category":"page"},{"location":"Teaching/Transport Phenomena/Analysis of Transport Phenomena/","page":"-","title":"-","text":"\\begin{align} b &= \\dfrac{#}{volume} &\\qquad\\text{concentration} \\\n\\vec{F} &= \\dfrac{#}{area\\cdotp{}time} &\\qquad\\text{flux density} \\\nB_{v} &= \\dfrac{#}{volume\\cdotp{}time} &\\qquad\\text{production rate} \\end{align} $","category":"page"},{"location":"Teaching/Transport Phenomena/Analysis of Transport Phenomena/","page":"-","title":"-","text":"The most general statement of conservation of this quantity b writes then:","category":"page"},{"location":"Teaching/Transport Phenomena/Analysis of Transport Phenomena/","page":"-","title":"-","text":"$","category":"page"},{"location":"Teaching/Transport Phenomena/Analysis of Transport Phenomena/","page":"-","title":"-","text":"\\frac{d}{dt}\\left(\\int{V}bdV\\right) = -\\int{\\Omega}\\vec{n}\\cdotp\\vec{F}dA+\\int{V}B{v}dV $","category":"page"},{"location":"Teaching/Transport Phenomena/Analysis of Transport Phenomena/","page":"-","title":"-","text":"Using divergence theorem this can be converted into:","category":"page"},{"location":"Teaching/Transport Phenomena/Analysis of Transport Phenomena/","page":"-","title":"-","text":"$","category":"page"},{"location":"Teaching/Transport Phenomena/Analysis of Transport Phenomena/","page":"-","title":"-","text":"\\frac{d}{dt}\\left(\\int{V}bdV\\right) = -\\int{V}\\nabla{\\vec{F}}dV+\\int{V}B{v}dV $","category":"page"},{"location":"Teaching/Transport Phenomena/Analysis of Transport Phenomena/","page":"-","title":"-","text":"Assuming an Eulerian reference frame (fixed) to the volume V we can move the time derivative of the above expression inside the left-hand side integral. Rearranging we have","category":"page"},{"location":"Teaching/Transport Phenomena/Analysis of Transport Phenomena/","page":"-","title":"-","text":"$","category":"page"},{"location":"Teaching/Transport Phenomena/Analysis of Transport Phenomena/","page":"-","title":"-","text":"\\int{V}\\left(\\frac{\\partial{}b}{\\partial{}t} + \\nabla{\\vec{F}} - B{v}\\right)dV = 0 $","category":"page"},{"location":"Teaching/Transport Phenomena/Analysis of Transport Phenomena/","page":"-","title":"-","text":"For a differential volume dV the integrand must be identically zero, from which the PDE arise:","category":"page"},{"location":"Teaching/Transport Phenomena/Analysis of Transport Phenomena/","page":"-","title":"-","text":"$","category":"page"},{"location":"Teaching/Transport Phenomena/Analysis of Transport Phenomena/","page":"-","title":"-","text":"\\frac{\\partial{}b}{\\partial{}t} + \\nabla{\\vec{F}} - B_{v} = 0 $","category":"page"},{"location":"Teaching/Transport Phenomena/Analysis of Transport Phenomena/#Diffusion-equation","page":"-","title":"Diffusion equation","text":"","category":"section"},{"location":"Teaching/Transport Phenomena/Analysis of Transport Phenomena/","page":"-","title":"-","text":"In the nineteenth century, Fick demonstrated empirically that the flux density of a species submitted to concentration gradient field responded linearly to its concentration gradient.","category":"page"},{"location":"Teaching/Transport Phenomena/Analysis of Transport Phenomena/","page":"-","title":"-","text":"$","category":"page"},{"location":"Teaching/Transport Phenomena/Analysis of Transport Phenomena/","page":"-","title":"-","text":"\\vec{F}\\propto{}-\\nabla\\cdotp{}b $","category":"page"},{"location":"Teaching/Transport Phenomena/Analysis of Transport Phenomena/","page":"-","title":"-","text":"This is actually the simplest form of diffusion modeling and, in general, is valid only in very specific cases, i.e. when a single species is being transported in a system without the effect of other components. Introducing a proportionality coefficient D, the diffusivity, we have:","category":"page"},{"location":"Teaching/Transport Phenomena/Analysis of Transport Phenomena/","page":"-","title":"-","text":"$","category":"page"},{"location":"Teaching/Transport Phenomena/Analysis of Transport Phenomena/","page":"-","title":"-","text":"\\vec{F}=-D\\nabla\\cdotp{}b $","category":"page"},{"location":"Teaching/Transport Phenomena/Analysis of Transport Phenomena/","page":"-","title":"-","text":"Using this expression in our conservation equation leads to:","category":"page"},{"location":"Teaching/Transport Phenomena/Analysis of Transport Phenomena/","page":"-","title":"-","text":"$","category":"page"},{"location":"Teaching/Transport Phenomena/Analysis of Transport Phenomena/","page":"-","title":"-","text":"\\frac{\\partial{}b}{\\partial{}t} - \\nabla{\\left(D\\nabla\\cdotp{}b\\right)} - B_{v} = 0 $","category":"page"},{"location":"Teaching/Transport Phenomena/Analysis of Transport Phenomena/","page":"-","title":"-","text":"Under the very specific case where there is no production rate B_v, i.e. no chemical reactions, and constant diffusivity D, i.e. no composition or space dependence, this simplifies to the well-studied form of the so called Fick's second law:","category":"page"},{"location":"Teaching/Transport Phenomena/Analysis of Transport Phenomena/","page":"-","title":"-","text":"$","category":"page"},{"location":"Teaching/Transport Phenomena/Analysis of Transport Phenomena/","page":"-","title":"-","text":"\\frac{\\partial{}b}{\\partial{}t} = D\\nabla^{2}{b} $","category":"page"},{"location":"Teaching/Transport Phenomena/Analysis of Transport Phenomena/","page":"-","title":"-","text":"This expression happens to be isomorph with heat diffusion equation for a constant specific heat medium because Fourier's law is analogous to Fick's first law, leading to the same final mathematical form. Using the thermodynamic definition dh=rhoc_pdT we have","category":"page"},{"location":"Teaching/Transport Phenomena/Analysis of Transport Phenomena/","page":"-","title":"-","text":"$","category":"page"},{"location":"Teaching/Transport Phenomena/Analysis of Transport Phenomena/","page":"-","title":"-","text":"\\frac{\\partial{}T}{\\partial{}t} = \\frac{k}{\\rho{}c_{p}}\\nabla^{2}{T} $","category":"page"},{"location":"Teaching/Transport Phenomena/Analysis of Transport Phenomena/","page":"-","title":"-","text":"It must be noticed that in the general case, the quantity being transported in heat equation is the enthalpy density h and the potential field is linearized in terms of temperature T through Fourier's equation. Without the constant specific heat simplification and with variable thermal conductivity k it is stated as:","category":"page"},{"location":"Teaching/Transport Phenomena/Analysis of Transport Phenomena/","page":"-","title":"-","text":"$","category":"page"},{"location":"Teaching/Transport Phenomena/Analysis of Transport Phenomena/","page":"-","title":"-","text":"\\frac{\\partial{}h}{\\partial{}t} = \\nabla\\left(k\\nabla\\cdotp{T}\\right) $","category":"page"},{"location":"Teaching/Transport Phenomena/Analysis of Transport Phenomena/","page":"-","title":"-","text":"Other than for very simple enthalpy-specific heat relationships (such as the constant approximation discussed above), this PDE must be solved numerically with a coupled system of nonlinear equations for computing the field of temperatures in terms of enthalpies. In the above we neglect the volumetric heat production rate, which would be present, e.g. in a reacting system or a material undergoing nuclear fission. ","category":"page"},{"location":"Teaching/Transport Phenomena/Analysis of Transport Phenomena/","page":"-","title":"-","text":"","category":"page"},{"location":"Teaching/Transport Phenomena/Analysis of Transport Phenomena/#Math-appendix","page":"-","title":"Math appendix","text":"","category":"section"},{"location":"Teaching/Transport Phenomena/Analysis of Transport Phenomena/","page":"-","title":"-","text":"[ ] Proof of mean value theorem (null integral implies null integrand)\n[ ] Derivation of Gauss (divergence) theorem","category":"page"},{"location":"Teaching/OpenFOAM/#OpenFOAM-11","page":"OpenFOAM","title":"OpenFOAM 11","text":"","category":"section"},{"location":"Teaching/OpenFOAM/#Table-of-Contents","page":"OpenFOAM","title":"Table of Contents","text":"","category":"section"},{"location":"Teaching/OpenFOAM/","page":"OpenFOAM","title":"OpenFOAM","text":"Solver Modules\nPhysical Models","category":"page"},{"location":"Teaching/OpenFOAM/#Tips-and-reminders","page":"OpenFOAM","title":"Tips and reminders","text":"","category":"section"},{"location":"Teaching/OpenFOAM/#General-topics","page":"OpenFOAM","title":"General topics","text":"","category":"section"},{"location":"Teaching/OpenFOAM/","page":"OpenFOAM","title":"OpenFOAM","text":"When converting to OpenFOAM v11 viscosityModel instead of transportModel in physicalProperties files. Currently setting transportModel Newtonian does not raise any errors.\nWhen working with a 2-D extruded mesh (1-cell in thickness), the mass flow rate must be scaled by the width of the domain to keep consistency with what would be expected in 3-D.","category":"page"},{"location":"Teaching/OpenFOAM/#Granular-flows","page":"OpenFOAM","title":"Granular flows","text":"","category":"section"},{"location":"Teaching/OpenFOAM/","page":"OpenFOAM","title":"OpenFOAM","text":"It is a good idea to set SOI to a value higher than zero (dimensioned to match the global time-scale of the problem) so that flow is fully developed before particles arrive.\nIf it makes sense to do so, make parameter U0 in the entries of injectionModels of cloudProperties identical to the velocity specified for the corresponding path. In most cases this applies, except when modeling a particle jet that originates from another source outside of the computational domain.","category":"page"},{"location":"References/@Raissi2017/","page":"-","title":"-","text":"","category":"page"},{"location":"References/@Raissi2017/","page":"-","title":"-","text":"title: \"Physics informed deep learning (part I): Data-driven solutions of nonlinear partial differential equations\" authors: Maziar Raissi, Paris Perdikaris, George Em Karniadakis year: 2017 DOI: https://doi.org/10.48550/arXiv.1711.10561 Drive: https://1drv.ms/b/s!Ar4x-UlrYAiZla5YwhmbwapFcSs-8A?e=XiDCyF –-","category":"page"},{"location":"Teaching/OpenFOAM/Cases/sedimentationBox/","page":"-","title":"-","text":"The goal of this study is to verify the role of some drag models over particle drop dynamics. Other than the drag models, particle size and role of parameter applyGravity in implicit packing model. The later was added because of unexpected results found in some cases of horizontalMixer and dustCollector.","category":"page"},{"location":"Teaching/OpenFOAM/Cases/sedimentationBox/#Analytical-solution","page":"-","title":"Analytical solution","text":"","category":"section"}] } diff --git a/dev/toc/index.html b/dev/toc/index.html index cf0515551..d5f379a8d 100644 --- a/dev/toc/index.html +++ b/dev/toc/index.html @@ -1,2 +1,2 @@ -Table of Contents · WallyToolbox.jl

Table of contents

+Table of Contents · WallyToolbox.jl

Table of contents