├── Assets ├── 02AdvectionEquation.meta ├── 02AdvectionEquation │ ├── Manager.cs │ ├── Manager.cs.meta │ ├── Material.meta │ ├── Material │ │ ├── AdvectionMat.mat │ │ ├── AdvectionMat.mat.meta │ │ ├── InitDensityMat.mat │ │ ├── InitDensityMat.mat.meta │ │ ├── UpdateDensityLeftMat.mat │ │ ├── UpdateDensityLeftMat.mat.meta │ │ ├── UpdateVelocityMat.mat │ │ └── UpdateVelocityMat.mat.meta │ ├── RenderTextures.meta │ ├── RenderTextures │ │ ├── LeftDensity.renderTexture │ │ ├── LeftDensity.renderTexture.meta │ │ ├── NowDensity.renderTexture │ │ ├── NowDensity.renderTexture.meta │ │ ├── PreDensity.renderTexture │ │ ├── PreDensity.renderTexture.meta │ │ ├── VelocityRT.renderTexture │ │ └── VelocityRT.renderTexture.meta │ ├── Shaders.meta │ ├── Shaders │ │ ├── Advection.shader │ │ ├── Advection.shader.meta │ │ ├── InitDensity.shader │ │ ├── InitDensity.shader.meta │ │ ├── UpdateDensityLeft.shader │ │ ├── UpdateDensityLeft.shader.meta │ │ ├── UpdateVelocity.shader │ │ └── UpdateVelocity.shader.meta │ ├── arrow.png │ ├── arrow.png.meta │ ├── arrowPrefab.prefab │ ├── arrowPrefab.prefab.meta │ ├── lesson2.unity │ └── lesson2.unity.meta ├── 03WaveEquation.meta ├── 03WaveEquation │ ├── 2dwave.unity │ ├── 2dwave.unity.meta │ ├── 3dwave.unity │ ├── 3dwave.unity.meta │ ├── wave2d.cs │ ├── wave2d.cs.meta │ ├── wave2dMat.mat │ ├── wave2dMat.mat.meta │ ├── wave2dShader.shader │ ├── wave2dShader.shader.meta │ ├── wave2drt0.renderTexture │ ├── wave2drt0.renderTexture.meta │ ├── wave2drt1.renderTexture │ ├── wave2drt1.renderTexture.meta │ ├── wave2drt2.renderTexture │ ├── wave2drt2.renderTexture.meta │ ├── wave2drt3.renderTexture │ ├── wave2drt3.renderTexture.meta │ ├── wave3d.cs │ └── wave3d.cs.meta ├── 04EulerEquation.meta ├── 04EulerEquation │ ├── Euler.cs │ ├── Euler.cs.meta │ ├── EulerEquation.unity │ ├── EulerEquation.unity.meta │ ├── Shader.meta │ ├── Shader │ │ ├── Advection.shader │ │ ├── Advection.shader.meta │ │ ├── AdvectionMat.mat │ │ ├── AdvectionMat.mat.meta │ │ ├── Display.shader │ │ ├── Display.shader.meta │ │ ├── DisplayMat.mat │ │ ├── DisplayMat.mat.meta │ │ ├── Divergence.shader │ │ ├── Divergence.shader.meta │ │ ├── DivergenceMat.mat │ │ ├── DivergenceMat.mat.meta │ │ ├── InitDye.shader │ │ ├── InitDye.shader.meta │ │ ├── InitDyeMat.mat │ │ ├── InitDyeMat.mat.meta │ │ ├── InitVelocity.shader │ │ ├── InitVelocity.shader.meta │ │ ├── InitVelocityMat.mat │ │ ├── InitVelocityMat.mat.meta │ │ ├── Pressure.shader │ │ ├── Pressure.shader.meta │ │ ├── PressureMat.mat │ │ ├── PressureMat.mat.meta │ │ ├── Splat.shader │ │ ├── Splat.shader.meta │ │ ├── SplatMat.mat │ │ ├── SplatMat.mat.meta │ │ ├── Subtract.shader │ │ ├── Subtract.shader.meta │ │ ├── SubtractMat.mat │ │ └── SubtractMat.mat.meta │ ├── water_new_height.png │ └── water_new_height.png.meta ├── 06NavierStokes.meta ├── 06NavierStokes │ ├── Cavity2D.cs │ ├── Cavity2D.cs.meta │ ├── NaiverEquation_Viscosity.mat │ ├── NaiverEquation_Viscosity.mat.meta │ ├── NavierStokes.cs │ ├── NavierStokes.cs.meta │ ├── Viscosity.shader │ ├── Viscosity.shader.meta │ ├── cavity.unity │ ├── cavity.unity.meta │ ├── city.jpg │ ├── city.jpg.meta │ ├── navier.unity │ └── navier.unity.meta ├── 09ShallowWater.meta ├── 09ShallowWater │ ├── Compute.meta │ ├── Compute │ │ ├── ComputeFG.compute │ │ ├── ComputeFG.compute.meta │ │ ├── ComputeManager.cs │ │ ├── ComputeManager.cs.meta │ │ ├── ComputeU.compute │ │ ├── ComputeU.compute.meta │ │ ├── ComputefgHalf.compute │ │ ├── ComputefgHalf.compute.meta │ │ ├── UpdateU.compute │ │ └── UpdateU.compute.meta │ ├── Shallow.unity │ ├── Shallow.unity.meta │ ├── ShallowWater.cs │ ├── ShallowWater.cs.meta │ ├── WaterMat.mat │ ├── WaterMat.mat.meta │ ├── WaterSurface.shader │ ├── WaterSurface.shader.meta │ ├── monte_scherbelino_1k.hdr │ └── monte_scherbelino_1k.hdr.meta ├── 10Smoke2d.meta ├── 10Smoke2d │ ├── Shaders.meta │ ├── Shaders │ │ ├── Advection_S.shader │ │ ├── Advection_S.shader.meta │ │ ├── Curl_S.shader │ │ ├── Curl_S.shader.meta │ │ ├── Divergence_S.shader │ │ ├── Divergence_S.shader.meta │ │ ├── Pressure_S.shader │ │ ├── Pressure_S.shader.meta │ │ ├── Smoke2d_Advection_S.mat │ │ ├── Smoke2d_Advection_S.mat.meta │ │ ├── Smoke2d_Curl_S.mat │ │ ├── Smoke2d_Curl_S.mat.meta │ │ ├── Smoke2d_Divergence_S.mat │ │ ├── Smoke2d_Divergence_S.mat.meta │ │ ├── Smoke2d_Pressure_S.mat │ │ ├── Smoke2d_Pressure_S.mat.meta │ │ ├── Smoke2d_Splat_S.mat │ │ ├── Smoke2d_Splat_S.mat.meta │ │ ├── Smoke2d_Substract.mat │ │ ├── Smoke2d_Substract.mat.meta │ │ ├── Smoke2d_Vorticity_S.mat │ │ ├── Smoke2d_Vorticity_S.mat.meta │ │ ├── Splat_S.shader │ │ ├── Splat_S.shader.meta │ │ ├── Substract_S.shader │ │ ├── Substract_S.shader.meta │ │ ├── Vorticity_S.shader │ │ └── Vorticity_S.shader.meta │ ├── SmokeManager.cs │ ├── SmokeManager.cs.meta │ ├── smoke.unity │ └── smoke.unity.meta ├── 11StreamLine.meta ├── 11StreamLine │ ├── SourcePanel.meta │ ├── SourcePanel │ │ ├── SPManager.cs │ │ ├── SPManager.cs.meta │ │ ├── SourcePanel.unity │ │ ├── SourcePanel.unity.meta │ │ ├── StreamLine.shader │ │ ├── StreamLine.shader.meta │ │ ├── StreamLineMat.mat │ │ └── StreamLineMat.mat.meta │ ├── SourceVortex.meta │ ├── SourceVortex │ │ ├── SourceVortex.unity │ │ ├── SourceVortex.unity.meta │ │ ├── SourceVortexManager.cs │ │ ├── SourceVortexManager.cs.meta │ │ ├── SourceVortexMat.mat │ │ ├── SourceVortexMat.mat.meta │ │ ├── SourceVortexShader.shader │ │ └── SourceVortexShader.shader.meta │ ├── VortexPanel.meta │ └── VortexPanel │ │ ├── VPMMat.mat │ │ ├── VPMMat.mat.meta │ │ ├── VPManager.cs │ │ ├── VPManager.cs.meta │ │ ├── VortexPanel.unity │ │ ├── VortexPanel.unity.meta │ │ ├── VortexStreamLine.shader │ │ └── VortexStreamLine.shader.meta ├── 12VortexStreet.meta ├── 12VortexStreet │ ├── BlackWhite.png │ ├── BlackWhite.png.meta │ ├── Block_KMat.mat │ ├── Block_KMat.mat.meta │ ├── Shaders.meta │ ├── Shaders │ │ ├── AdvectionDye_K.shader │ │ ├── AdvectionDye_K.shader.meta │ │ ├── AdvectionDye_KMat.mat │ │ ├── AdvectionDye_KMat.mat.meta │ │ ├── AdvectionVelocity_K.shader │ │ ├── AdvectionVelocity_K.shader.meta │ │ ├── AdvectionVelocity_KMat.mat │ │ ├── AdvectionVelocity_KMat.mat.meta │ │ ├── Block_K.shader │ │ ├── Block_K.shader.meta │ │ ├── DisplayRainow.shader │ │ ├── DisplayRainow.shader.meta │ │ ├── DisplayRainowMat.mat │ │ ├── DisplayRainowMat.mat.meta │ │ ├── Display_K.shader │ │ ├── Display_K.shader.meta │ │ ├── Display_KMat.mat │ │ ├── Display_KMat.mat.meta │ │ ├── InitDye_K.shader │ │ ├── InitDye_K.shader.meta │ │ ├── InitDye_KMat.mat │ │ └── InitDye_KMat.mat.meta │ ├── VortexGenerator.jpg │ ├── VortexGenerator.jpg.meta │ ├── VortexStreet.unity │ ├── VortexStreet.unity.meta │ ├── VortexStreetManager.cs │ ├── VortexStreetManager.cs.meta │ ├── airfoil.jpg │ ├── airfoil.jpg.meta │ ├── car.jpg │ ├── car.jpg.meta │ ├── cylinder.jpg │ ├── cylinder.jpg.meta │ ├── plane.jpg │ ├── plane.jpg.meta │ ├── square.jpg │ └── square.jpg.meta ├── 15FiniteElement.meta ├── 15FiniteElement │ ├── AdvancingFront.meta │ ├── AdvancingFront │ │ ├── Sphere.prefab │ │ ├── Sphere.prefab.meta │ │ ├── ad.unity │ │ ├── ad.unity.meta │ │ ├── advancingMananger.cs │ │ └── advancingMananger.cs.meta │ ├── FEMcompare.meta │ ├── FEMcompare │ │ ├── CompareManager.cs │ │ ├── CompareManager.cs.meta │ │ ├── Sphere.prefab │ │ ├── Sphere.prefab.meta │ │ ├── femdamp.unity │ │ ├── femdamp.unity.meta │ │ ├── fempoisson.unity │ │ ├── fempoisson.unity.meta │ │ ├── femyoung.unity │ │ └── femyoung.unity.meta │ ├── FEMjelly.meta │ └── FEMjelly │ │ ├── jelly.unity │ │ ├── jelly.unity.meta │ │ ├── jellyManager.cs │ │ ├── jellyManager.cs.meta │ │ ├── jellyMat.mat │ │ └── jellyMat.mat.meta ├── 16NewtonMethod.meta ├── 16NewtonMethod │ ├── Sphere.prefab │ ├── Sphere.prefab.meta │ ├── newton.unity │ ├── newton.unity.meta │ ├── newtonSphere.cs │ ├── newtonSphere.cs.meta │ ├── sur1.mat │ ├── sur1.mat.meta │ ├── sur2.mat │ ├── sur2.mat.meta │ ├── surface.cs │ └── surface.cs.meta ├── Scenes.meta └── Scenes │ ├── SampleScene.unity │ └── SampleScene.unity.meta ├── ProjectSettings ├── AudioManager.asset ├── ClusterInputManager.asset ├── DynamicsManager.asset ├── EditorBuildSettings.asset ├── EditorSettings.asset ├── GraphicsSettings.asset ├── InputManager.asset ├── NavMeshAreas.asset ├── PackageManagerSettings.asset ├── Physics2DSettings.asset ├── PresetManager.asset ├── ProjectSettings.asset ├── ProjectVersion.txt ├── QualitySettings.asset ├── TagManager.asset ├── TimeManager.asset ├── UnityConnectSettings.asset ├── VFXManager.asset ├── VersionControlSettings.asset └── XRSettings.asset ├── Readme.md ├── images ├── ch03WaveEquation.PNG ├── ch05EulerEquation.PNG ├── ch06NavierStokes.PNG ├── ch09ShallowWater.PNG ├── ch10smoke2d.PNG ├── ch11SourceSink.PNG ├── ch12VortexStreet.PNG ├── ch15jelly.PNG └── ch15meshgen.PNG └── python ├── Compressible ├── GalerkinForwardStep.py ├── ShockTubeLaxFriedriches.py ├── ShockTubeLaxFriedriches1d.py ├── ShockTubeLaxWendroff1d.py ├── ShockTubeMUSCL.py ├── ShockTubeMacCormack1d.py ├── ShockTubeRoe1d.py ├── ShockTubeVanleer.py ├── ShockTubeWENO51d.py ├── Tidy2dShock.py └── pyrokh.py ├── CompressibleBubble ├── bubble1.py ├── bubble2.py └── bubble3.py ├── ElectricMagnetic └── lorenz.py ├── FiniteDifference └── LinearConvection2d.py ├── FiniteElement ├── fem1d.py ├── fem1dx2.py ├── fem2d.py ├── fem2dadvection.py ├── fem2ddiffusion.py ├── fem2dv2.py └── femfuck.py ├── FiniteElement2 ├── Diffusion1d.py ├── Diffusion2d.py ├── carstensen1.py ├── carstensen2.py ├── datafile │ ├── coordinates1.dat │ ├── coordinates2.dat │ ├── dirichlet1.dat │ ├── dirichlet2.dat │ ├── elements1.dat │ ├── elements2.dat │ ├── neumann1.dat │ └── neumann2.dat ├── distancesToAir.mat ├── distancesToWater.mat ├── fem01.py ├── fem02.py ├── fluidnodes.mat ├── fluids.py ├── nonlinear01.py ├── nonlinear02.py ├── nonlinear03.py ├── nonlinear04.py ├── nonlinear05.py ├── realfem.py └── triangle.py ├── FiniteVolume ├── RungeKutta2.py ├── RungeKutta3.py ├── RungeKutta4.py ├── advection.py ├── advectionGodunov.py ├── advectionLaxFriedrichs.py ├── advectionMUSCL.py ├── advectionMUSCLminmod.py ├── advectionMacCormack.py ├── advectionRK2.py ├── advectionRK2CD.py └── advectionminmod.py ├── ImmersedBoundary ├── ib1.py ├── ib2.py ├── ib3.py ├── ib4.py ├── ib5.py ├── xlag.mat └── ylag.mat ├── LevelSet ├── ConVection.py ├── NormalStarToolbox.py ├── NormalStarToolboxPure.py ├── _chan_vese.py ├── image0.mat ├── level0.py ├── level1.py ├── level2.py ├── levelsetOldDemo1.py ├── ls1d.py ├── shrink1.py ├── vof0.py ├── vof1d.py └── vof2.py ├── LinearSystemOfEquation ├── BiCG.py ├── CG2.py ├── CGLS.py ├── Cholesky.py ├── ConjugateGradient.py ├── ConjugateGradientStable.py ├── FRCG.py ├── GMRES.py └── QuasiNewtonBFGS.py ├── RiemannSolver ├── Burgers1dGodunov.py ├── Burgers1dHLL.py ├── Burgers1dLaxFriedchs.py ├── Burgers1dLaxWendroff.py ├── Burgers1dLaxWendroffV2.py ├── Burgers1dMUSCLminmod.py ├── Burgers1dMarCormack.py ├── Burgers1dMinmod.py ├── Burgers1dRoe.py ├── Burgers1dUpwind.py ├── Shallow1dLaxFriedrichs.py ├── Shallow1dLaxWendroff.py ├── Shallow1dMacCormack.py ├── Shallow1dSlopeLaxFriedrichs.py ├── Shallow2dLaxFriedrichs.py └── Shallow2dMacCormack.py ├── SIMPLE ├── Poisson1d.py ├── Poisson2d.py ├── Poisson2dBoundary.py ├── PoissonObstacle2d.py ├── PoissonWeight1d.py ├── PoissonWeight2d.py ├── SIMPLEbackwardV2.py ├── SIMPLEbacward.py ├── SIMPLEcavity.py ├── SIMPLEflowoversquare.py └── SIMPLEpipeflow.py ├── SpectralMethod ├── AdvectionFFT1D.py ├── AdvectionFFT2D.py ├── DFT1Dexample.py ├── DFT2Dexample.py ├── FFT1Dexample.py ├── FFT2Dexample.py ├── advection1d.py ├── derivation.py ├── diffusion1d.py └── testkdv.py ├── Unsteady └── Antonio1.py ├── VolumeOfFluid ├── Conservation1d.py ├── Conservation1d2.py ├── Conservation2d.py └── c02.gif ├── VortexMethod ├── PoissonStreamFunction.py ├── VortexMethodBackwardFacingStep.py ├── VortexMethodChannelFlow.py └── VortexMethodLidDrivenCavity.py └── approx.py /Assets/02AdvectionEquation.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 111c0b25bb90c6d449d3a9e5055a0a07 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/02AdvectionEquation/Manager.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3456db9b1b51b1b44b8b06ff44c433d4 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/02AdvectionEquation/Material.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a88067291ed3dc4449978caad1314f98 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/02AdvectionEquation/Material/AdvectionMat.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 6 6 | m_ObjectHideFlags: 0 7 | m_CorrespondingSourceObject: {fileID: 0} 8 | m_PrefabInstance: {fileID: 0} 9 | m_PrefabAsset: {fileID: 0} 10 | m_Name: AdvectionMat 11 | m_Shader: {fileID: 4800000, guid: 41eccc4fb034cd44196f27d4793ddd7f, type: 3} 12 | m_ShaderKeywords: 13 | m_LightmapFlags: 4 14 | m_EnableInstancingVariants: 0 15 | m_DoubleSidedGI: 0 16 | m_CustomRenderQueue: -1 17 | stringTagMap: {} 18 | disabledShaderPasses: [] 19 | m_SavedProperties: 20 | serializedVersion: 3 21 | m_TexEnvs: 22 | - _DensityLeft: 23 | m_Texture: {fileID: 8400000, guid: 677168d08dee64b43b789554cfb64194, type: 2} 24 | m_Scale: {x: 1, y: 1} 25 | m_Offset: {x: 0, y: 0} 26 | - _MainTex: 27 | m_Texture: {fileID: 8400000, guid: 390969080c5783140bfa43f32db2f8f8, type: 2} 28 | m_Scale: {x: 1, y: 1} 29 | m_Offset: {x: 0, y: 0} 30 | - _VelocityTex: 31 | m_Texture: {fileID: 8400000, guid: 4ada4a5dda3b57b45b3055f36bb15051, type: 2} 32 | m_Scale: {x: 1, y: 1} 33 | m_Offset: {x: 0, y: 0} 34 | m_Floats: [] 35 | m_Colors: [] 36 | -------------------------------------------------------------------------------- /Assets/02AdvectionEquation/Material/AdvectionMat.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 55895625d3a74ed44af551748288f1d7 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/02AdvectionEquation/Material/InitDensityMat.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 6 6 | m_ObjectHideFlags: 0 7 | m_CorrespondingSourceObject: {fileID: 0} 8 | m_PrefabInstance: {fileID: 0} 9 | m_PrefabAsset: {fileID: 0} 10 | m_Name: InitDensityMat 11 | m_Shader: {fileID: 4800000, guid: 38a95d1ca6c132746aea376bbf882ee7, type: 3} 12 | m_ShaderKeywords: 13 | m_LightmapFlags: 4 14 | m_EnableInstancingVariants: 0 15 | m_DoubleSidedGI: 0 16 | m_CustomRenderQueue: -1 17 | stringTagMap: {} 18 | disabledShaderPasses: [] 19 | m_SavedProperties: 20 | serializedVersion: 3 21 | m_TexEnvs: 22 | - _MainTex: 23 | m_Texture: {fileID: 0} 24 | m_Scale: {x: 1, y: 1} 25 | m_Offset: {x: 0, y: 0} 26 | m_Floats: [] 27 | m_Colors: [] 28 | m_BuildTextureStacks: [] 29 | -------------------------------------------------------------------------------- /Assets/02AdvectionEquation/Material/InitDensityMat.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b7648d21334b5ae4aa17b378db3116c0 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/02AdvectionEquation/Material/UpdateDensityLeftMat.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 6 6 | m_ObjectHideFlags: 0 7 | m_CorrespondingSourceObject: {fileID: 0} 8 | m_PrefabInstance: {fileID: 0} 9 | m_PrefabAsset: {fileID: 0} 10 | m_Name: UpdateDensityLeftMat 11 | m_Shader: {fileID: 4800000, guid: c78fbff51c9d9e441a8f647ad5c43fa0, type: 3} 12 | m_ShaderKeywords: 13 | m_LightmapFlags: 4 14 | m_EnableInstancingVariants: 0 15 | m_DoubleSidedGI: 0 16 | m_CustomRenderQueue: -1 17 | stringTagMap: {} 18 | disabledShaderPasses: [] 19 | m_SavedProperties: 20 | serializedVersion: 3 21 | m_TexEnvs: 22 | - _MainTex: 23 | m_Texture: {fileID: 0} 24 | m_Scale: {x: 1, y: 1} 25 | m_Offset: {x: 0, y: 0} 26 | m_Floats: [] 27 | m_Colors: [] 28 | m_BuildTextureStacks: [] 29 | -------------------------------------------------------------------------------- /Assets/02AdvectionEquation/Material/UpdateDensityLeftMat.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 90aee382027eb974d9c771d4a86f5329 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/02AdvectionEquation/Material/UpdateVelocityMat.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 6 6 | m_ObjectHideFlags: 0 7 | m_CorrespondingSourceObject: {fileID: 0} 8 | m_PrefabInstance: {fileID: 0} 9 | m_PrefabAsset: {fileID: 0} 10 | m_Name: UpdateVelocityMat 11 | m_Shader: {fileID: 4800000, guid: 03fbf0b283bce8a40bfb8e4c0be55982, type: 3} 12 | m_ShaderKeywords: 13 | m_LightmapFlags: 4 14 | m_EnableInstancingVariants: 0 15 | m_DoubleSidedGI: 0 16 | m_CustomRenderQueue: -1 17 | stringTagMap: {} 18 | disabledShaderPasses: [] 19 | m_SavedProperties: 20 | serializedVersion: 3 21 | m_TexEnvs: 22 | - _MainTex: 23 | m_Texture: {fileID: 0} 24 | m_Scale: {x: 1, y: 1} 25 | m_Offset: {x: 0, y: 0} 26 | m_Floats: [] 27 | m_Colors: [] 28 | m_BuildTextureStacks: [] 29 | -------------------------------------------------------------------------------- /Assets/02AdvectionEquation/Material/UpdateVelocityMat.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 42b1c0d6013dd5747bbcfce2e8a6b691 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/02AdvectionEquation/RenderTextures.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4e44b0084fc9f05459c5f3ef73cbabc1 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/02AdvectionEquation/RenderTextures/LeftDensity.renderTexture: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!84 &8400000 4 | RenderTexture: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_Name: LeftDensity 10 | m_ImageContentsHash: 11 | serializedVersion: 2 12 | Hash: 00000000000000000000000000000000 13 | m_ForcedFallbackFormat: 4 14 | m_DownscaleFallback: 0 15 | serializedVersion: 3 16 | m_Width: 2048 17 | m_Height: 2048 18 | m_AntiAliasing: 1 19 | m_MipCount: -1 20 | m_DepthFormat: 2 21 | m_ColorFormat: 8 22 | m_MipMap: 0 23 | m_GenerateMips: 1 24 | m_SRGB: 0 25 | m_UseDynamicScale: 0 26 | m_BindMS: 0 27 | m_EnableCompatibleFormat: 1 28 | m_TextureSettings: 29 | serializedVersion: 2 30 | m_FilterMode: 1 31 | m_Aniso: 0 32 | m_MipBias: 0 33 | m_WrapU: 1 34 | m_WrapV: 1 35 | m_WrapW: 1 36 | m_Dimension: 2 37 | m_VolumeDepth: 1 38 | -------------------------------------------------------------------------------- /Assets/02AdvectionEquation/RenderTextures/LeftDensity.renderTexture.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 677168d08dee64b43b789554cfb64194 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/02AdvectionEquation/RenderTextures/NowDensity.renderTexture: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!84 &8400000 4 | RenderTexture: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_Name: NowDensity 10 | m_ImageContentsHash: 11 | serializedVersion: 2 12 | Hash: 00000000000000000000000000000000 13 | m_ForcedFallbackFormat: 4 14 | m_DownscaleFallback: 0 15 | serializedVersion: 3 16 | m_Width: 2048 17 | m_Height: 2048 18 | m_AntiAliasing: 1 19 | m_MipCount: -1 20 | m_DepthFormat: 2 21 | m_ColorFormat: 8 22 | m_MipMap: 0 23 | m_GenerateMips: 1 24 | m_SRGB: 0 25 | m_UseDynamicScale: 0 26 | m_BindMS: 0 27 | m_EnableCompatibleFormat: 1 28 | m_TextureSettings: 29 | serializedVersion: 2 30 | m_FilterMode: 1 31 | m_Aniso: 0 32 | m_MipBias: 0 33 | m_WrapU: 1 34 | m_WrapV: 1 35 | m_WrapW: 1 36 | m_Dimension: 2 37 | m_VolumeDepth: 1 38 | -------------------------------------------------------------------------------- /Assets/02AdvectionEquation/RenderTextures/NowDensity.renderTexture.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: dea58893c876aec438e79148d7040758 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/02AdvectionEquation/RenderTextures/PreDensity.renderTexture: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!84 &8400000 4 | RenderTexture: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_Name: PreDensity 10 | m_ImageContentsHash: 11 | serializedVersion: 2 12 | Hash: 00000000000000000000000000000000 13 | m_ForcedFallbackFormat: 4 14 | m_DownscaleFallback: 0 15 | serializedVersion: 3 16 | m_Width: 2048 17 | m_Height: 2048 18 | m_AntiAliasing: 1 19 | m_MipCount: -1 20 | m_DepthFormat: 2 21 | m_ColorFormat: 8 22 | m_MipMap: 0 23 | m_GenerateMips: 1 24 | m_SRGB: 0 25 | m_UseDynamicScale: 0 26 | m_BindMS: 0 27 | m_EnableCompatibleFormat: 1 28 | m_TextureSettings: 29 | serializedVersion: 2 30 | m_FilterMode: 1 31 | m_Aniso: 0 32 | m_MipBias: 0 33 | m_WrapU: 1 34 | m_WrapV: 1 35 | m_WrapW: 1 36 | m_Dimension: 2 37 | m_VolumeDepth: 1 38 | -------------------------------------------------------------------------------- /Assets/02AdvectionEquation/RenderTextures/PreDensity.renderTexture.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 390969080c5783140bfa43f32db2f8f8 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/02AdvectionEquation/RenderTextures/VelocityRT.renderTexture: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!84 &8400000 4 | RenderTexture: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_Name: VelocityRT 10 | m_ImageContentsHash: 11 | serializedVersion: 2 12 | Hash: 00000000000000000000000000000000 13 | m_ForcedFallbackFormat: 4 14 | m_DownscaleFallback: 0 15 | serializedVersion: 3 16 | m_Width: 2048 17 | m_Height: 2048 18 | m_AntiAliasing: 1 19 | m_MipCount: -1 20 | m_DepthFormat: 0 21 | m_ColorFormat: 12 22 | m_MipMap: 0 23 | m_GenerateMips: 1 24 | m_SRGB: 0 25 | m_UseDynamicScale: 0 26 | m_BindMS: 0 27 | m_EnableCompatibleFormat: 1 28 | m_TextureSettings: 29 | serializedVersion: 2 30 | m_FilterMode: 1 31 | m_Aniso: 1 32 | m_MipBias: 0 33 | m_WrapU: 1 34 | m_WrapV: 1 35 | m_WrapW: 1 36 | m_Dimension: 2 37 | m_VolumeDepth: 1 38 | -------------------------------------------------------------------------------- /Assets/02AdvectionEquation/RenderTextures/VelocityRT.renderTexture.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4ada4a5dda3b57b45b3055f36bb15051 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/02AdvectionEquation/Shaders.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 76100cb93e978d248bfe7addebff5d0f 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/02AdvectionEquation/Shaders/Advection.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 41eccc4fb034cd44196f27d4793ddd7f 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/02AdvectionEquation/Shaders/InitDensity.shader: -------------------------------------------------------------------------------- 1 | Shader "AdvectionEquation/InitDensity" 2 | { 3 | Properties 4 | { 5 | _MainTex ("Texture", 2D) = "white" {} 6 | } 7 | SubShader 8 | { 9 | Tags { "RenderType"="Opaque" } 10 | LOD 100 11 | 12 | Pass 13 | { 14 | CGPROGRAM 15 | #pragma vertex vert 16 | #pragma fragment frag 17 | // make fog work 18 | #pragma multi_compile_fog 19 | 20 | #include "UnityCG.cginc" 21 | 22 | struct appdata 23 | { 24 | float4 vertex : POSITION; 25 | float2 uv : TEXCOORD0; 26 | }; 27 | 28 | struct v2f 29 | { 30 | float2 uv : TEXCOORD0; 31 | UNITY_FOG_COORDS(1) 32 | float4 vertex : SV_POSITION; 33 | }; 34 | 35 | sampler2D _MainTex; 36 | float4 _MainTex_ST; 37 | 38 | v2f vert (appdata v) 39 | { 40 | v2f o; 41 | o.vertex = UnityObjectToClipPos(v.vertex); 42 | o.uv = TRANSFORM_TEX(v.uv, _MainTex); 43 | UNITY_TRANSFER_FOG(o,o.vertex); 44 | return o; 45 | } 46 | 47 | fixed4 frag (v2f i) : SV_Target 48 | { 49 | int _TexelNumber = 16; 50 | int intuvx = floor(i.uv.x * _TexelNumber); 51 | int intuvy = floor(i.uv.y * _TexelNumber); 52 | 53 | if ((intuvx + intuvy) % 2)return float4(1.0f, 1.0f, 1.0f, 1.0f); 54 | else return float4(0.0f, 0.0f, 0.0f, 0.0f); 55 | } 56 | ENDCG 57 | } 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /Assets/02AdvectionEquation/Shaders/InitDensity.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 38a95d1ca6c132746aea376bbf882ee7 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/02AdvectionEquation/Shaders/UpdateDensityLeft.shader: -------------------------------------------------------------------------------- 1 | Shader "AdvectionEquation/UpdateDensityLeft" 2 | { 3 | Properties 4 | { 5 | _MainTex ("Texture", 2D) = "white" {} 6 | } 7 | SubShader 8 | { 9 | Tags { "RenderType"="Opaque" } 10 | LOD 100 11 | 12 | Pass 13 | { 14 | CGPROGRAM 15 | #pragma vertex vert 16 | #pragma fragment frag 17 | // make fog work 18 | #pragma multi_compile_fog 19 | 20 | #include "UnityCG.cginc" 21 | 22 | struct appdata 23 | { 24 | float4 vertex : POSITION; 25 | float2 uv : TEXCOORD0; 26 | }; 27 | 28 | struct v2f 29 | { 30 | float2 uv : TEXCOORD0; 31 | UNITY_FOG_COORDS(1) 32 | float4 vertex : SV_POSITION; 33 | }; 34 | 35 | sampler2D _MainTex; 36 | float4 _MainTex_ST; 37 | 38 | v2f vert (appdata v) 39 | { 40 | v2f o; 41 | o.vertex = UnityObjectToClipPos(v.vertex); 42 | o.uv = TRANSFORM_TEX(v.uv, _MainTex); 43 | UNITY_TRANSFER_FOG(o,o.vertex); 44 | return o; 45 | } 46 | 47 | fixed4 frag (v2f i) : SV_Target 48 | { 49 | float uvx = i.uv.x - 1.0f / 256.0f; 50 | if (uvx < 0) uvx += 1.0f; 51 | fixed4 col = tex2D(_MainTex, float2(uvx, i.uv.y)); 52 | return col; 53 | } 54 | ENDCG 55 | } 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /Assets/02AdvectionEquation/Shaders/UpdateDensityLeft.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c78fbff51c9d9e441a8f647ad5c43fa0 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/02AdvectionEquation/Shaders/UpdateVelocity.shader: -------------------------------------------------------------------------------- 1 | Shader "AdvectionEquation/UpdateVelocity" 2 | { 3 | Properties 4 | { 5 | _MainTex ("Texture", 2D) = "white" {} 6 | } 7 | SubShader 8 | { 9 | Tags { "RenderType"="Opaque" } 10 | LOD 100 11 | 12 | Pass 13 | { 14 | CGPROGRAM 15 | #pragma vertex vert 16 | #pragma fragment frag 17 | // make fog work 18 | #pragma multi_compile_fog 19 | 20 | #include "UnityCG.cginc" 21 | 22 | struct appdata 23 | { 24 | float4 vertex : POSITION; 25 | float2 uv : TEXCOORD0; 26 | }; 27 | 28 | struct v2f 29 | { 30 | float2 uv : TEXCOORD0; 31 | UNITY_FOG_COORDS(1) 32 | float4 vertex : SV_POSITION; 33 | }; 34 | 35 | sampler2D _MainTex; 36 | float4 _MainTex_ST; 37 | uniform float _ArrowRotation[256]; 38 | 39 | v2f vert (appdata v) 40 | { 41 | v2f o; 42 | o.vertex = UnityObjectToClipPos(v.vertex); 43 | o.uv = TRANSFORM_TEX(v.uv, _MainTex); 44 | UNITY_TRANSFER_FOG(o,o.vertex); 45 | return o; 46 | } 47 | 48 | fixed4 frag (v2f i) : SV_Target 49 | { 50 | 51 | int _TexelNumber = 16; 52 | int intuvx = floor(i.uv.x * _TexelNumber); 53 | int intuvy = floor(i.uv.y * _TexelNumber); 54 | float rad = _ArrowRotation[intuvy * _TexelNumber + intuvx] * 3.1415927f / 180.0f; 55 | float cosRes = cos(rad); 56 | float sinRes = sin(rad); 57 | return float4(cosRes,sinRes, 0.0f, 1.0f); 58 | } 59 | ENDCG 60 | } 61 | } 62 | } -------------------------------------------------------------------------------- /Assets/02AdvectionEquation/Shaders/UpdateVelocity.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 03fbf0b283bce8a40bfb8e4c0be55982 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/02AdvectionEquation/arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clatterrr/FluidSimulationTutorialsUnity/f5d269d57576a7f579a6797f8c74079ff5199baf/Assets/02AdvectionEquation/arrow.png -------------------------------------------------------------------------------- /Assets/02AdvectionEquation/arrowPrefab.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 79ed005eee6be7a4b80b235ee0b04f59 3 | PrefabImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/02AdvectionEquation/lesson2.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: abf884d7f6acd85418d8fd9592fb5452 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/03WaveEquation.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2311898900cac6249b38fd33688a18ca 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/03WaveEquation/2dwave.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2253e357d78ec52468731dcd5f97355d 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/03WaveEquation/3dwave.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ba4814411fbfdc647988561635a87c6b 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/03WaveEquation/wave2d.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.Collections.Generic; 3 | using UnityEngine; 4 | 5 | public class wave2d : MonoBehaviour 6 | { 7 | public Material _mat; 8 | public RenderTexture _rtNull;//初始什么都没有 9 | public RenderTexture _rtm2;//上两帧图形 10 | public RenderTexture _rtm1;//上一帧图像 11 | public RenderTexture _rt0;//本帧图形 12 | [Range(2, 100)] 13 | public int _TexelNumber;//设定网格的数量 14 | [Range(0.5f, 2.0f)] 15 | public float _Speed;//设定波传播的速度 16 | 17 | private void Start() 18 | { 19 | Graphics.Blit(_rtNull, _rtm2); 20 | Graphics.Blit(_rtNull, _rtm1); 21 | Application.targetFrameRate = 10; 22 | _TexelNumber = 51; 23 | _Speed = 0.4f; 24 | } 25 | private void Update() 26 | { 27 | _mat.SetInt("_TexelNumber", _TexelNumber); 28 | _mat.SetFloat("_Speed", _Speed); 29 | _mat.SetTexture("_MainTex", _rtm2); 30 | _mat.SetTexture("_TimeTexM1", _rtm1); 31 | } 32 | 33 | private void OnRenderImage(RenderTexture source, RenderTexture destination) 34 | { 35 | Graphics.Blit(_rtm2, _rt0, _mat);//将上一帧的图像经过迭代计算后放到这一帧的图像上 36 | Graphics.Blit(_rt0, destination);//将这一帧图像输出的屏幕上 37 | Graphics.Blit(_rtm1, _rtm2);//将上帧图像变为上两帧图像 38 | Graphics.Blit(_rt0, _rtm1);//将一帧图像变为上一帧图像 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /Assets/03WaveEquation/wave2d.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 54389ba9e7c6fbf46ade6d87104dda9a 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/03WaveEquation/wave2dMat.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 6 6 | m_ObjectHideFlags: 0 7 | m_CorrespondingSourceObject: {fileID: 0} 8 | m_PrefabInstance: {fileID: 0} 9 | m_PrefabAsset: {fileID: 0} 10 | m_Name: wave2dMat 11 | m_Shader: {fileID: 4800000, guid: c8dd2dfade50cd649bb48dd8dfce7205, type: 3} 12 | m_ShaderKeywords: 13 | m_LightmapFlags: 4 14 | m_EnableInstancingVariants: 0 15 | m_DoubleSidedGI: 0 16 | m_CustomRenderQueue: -1 17 | stringTagMap: {} 18 | disabledShaderPasses: [] 19 | m_SavedProperties: 20 | serializedVersion: 3 21 | m_TexEnvs: 22 | - _MainTex: 23 | m_Texture: {fileID: 8400000, guid: 7985075f1385f5042842693297b13f62, type: 2} 24 | m_Scale: {x: 1, y: 1} 25 | m_Offset: {x: 0, y: 0} 26 | m_Floats: [] 27 | m_Colors: [] 28 | m_BuildTextureStacks: [] 29 | -------------------------------------------------------------------------------- /Assets/03WaveEquation/wave2dMat.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 423292ccd5a0a874ea7cc77cc82a1b37 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/03WaveEquation/wave2dShader.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c8dd2dfade50cd649bb48dd8dfce7205 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/03WaveEquation/wave2drt0.renderTexture: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!84 &8400000 4 | RenderTexture: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_Name: wave2drt0 10 | m_ImageContentsHash: 11 | serializedVersion: 2 12 | Hash: 00000000000000000000000000000000 13 | m_ForcedFallbackFormat: 4 14 | m_DownscaleFallback: 0 15 | serializedVersion: 3 16 | m_Width: 256 17 | m_Height: 256 18 | m_AntiAliasing: 1 19 | m_MipCount: -1 20 | m_DepthFormat: 2 21 | m_ColorFormat: 8 22 | m_MipMap: 0 23 | m_GenerateMips: 1 24 | m_SRGB: 0 25 | m_UseDynamicScale: 0 26 | m_BindMS: 0 27 | m_EnableCompatibleFormat: 1 28 | m_TextureSettings: 29 | serializedVersion: 2 30 | m_FilterMode: 1 31 | m_Aniso: 0 32 | m_MipBias: 0 33 | m_WrapU: 1 34 | m_WrapV: 1 35 | m_WrapW: 1 36 | m_Dimension: 2 37 | m_VolumeDepth: 1 38 | -------------------------------------------------------------------------------- /Assets/03WaveEquation/wave2drt0.renderTexture.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e2f491611cbdcf54eb4a66d7187cabf6 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/03WaveEquation/wave2drt1.renderTexture: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!84 &8400000 4 | RenderTexture: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_Name: wave2drt1 10 | m_ImageContentsHash: 11 | serializedVersion: 2 12 | Hash: 00000000000000000000000000000000 13 | m_ForcedFallbackFormat: 4 14 | m_DownscaleFallback: 0 15 | serializedVersion: 3 16 | m_Width: 256 17 | m_Height: 256 18 | m_AntiAliasing: 1 19 | m_MipCount: -1 20 | m_DepthFormat: 2 21 | m_ColorFormat: 8 22 | m_MipMap: 0 23 | m_GenerateMips: 1 24 | m_SRGB: 0 25 | m_UseDynamicScale: 0 26 | m_BindMS: 0 27 | m_EnableCompatibleFormat: 1 28 | m_TextureSettings: 29 | serializedVersion: 2 30 | m_FilterMode: 1 31 | m_Aniso: 0 32 | m_MipBias: 0 33 | m_WrapU: 1 34 | m_WrapV: 1 35 | m_WrapW: 1 36 | m_Dimension: 2 37 | m_VolumeDepth: 1 38 | -------------------------------------------------------------------------------- /Assets/03WaveEquation/wave2drt1.renderTexture.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7985075f1385f5042842693297b13f62 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/03WaveEquation/wave2drt2.renderTexture: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!84 &8400000 4 | RenderTexture: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_Name: wave2drt2 10 | m_ImageContentsHash: 11 | serializedVersion: 2 12 | Hash: 00000000000000000000000000000000 13 | m_ForcedFallbackFormat: 4 14 | m_DownscaleFallback: 0 15 | serializedVersion: 3 16 | m_Width: 256 17 | m_Height: 256 18 | m_AntiAliasing: 1 19 | m_MipCount: -1 20 | m_DepthFormat: 2 21 | m_ColorFormat: 8 22 | m_MipMap: 0 23 | m_GenerateMips: 1 24 | m_SRGB: 0 25 | m_UseDynamicScale: 0 26 | m_BindMS: 0 27 | m_EnableCompatibleFormat: 1 28 | m_TextureSettings: 29 | serializedVersion: 2 30 | m_FilterMode: 1 31 | m_Aniso: 0 32 | m_MipBias: 0 33 | m_WrapU: 1 34 | m_WrapV: 1 35 | m_WrapW: 1 36 | m_Dimension: 2 37 | m_VolumeDepth: 1 38 | -------------------------------------------------------------------------------- /Assets/03WaveEquation/wave2drt2.renderTexture.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c344ba31859ab3045a67e0860d573654 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/03WaveEquation/wave2drt3.renderTexture: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!84 &8400000 4 | RenderTexture: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_Name: wave2drt3 10 | m_ImageContentsHash: 11 | serializedVersion: 2 12 | Hash: 00000000000000000000000000000000 13 | m_ForcedFallbackFormat: 4 14 | m_DownscaleFallback: 0 15 | serializedVersion: 3 16 | m_Width: 256 17 | m_Height: 256 18 | m_AntiAliasing: 1 19 | m_MipCount: -1 20 | m_DepthFormat: 2 21 | m_ColorFormat: 8 22 | m_MipMap: 0 23 | m_GenerateMips: 1 24 | m_SRGB: 0 25 | m_UseDynamicScale: 0 26 | m_BindMS: 0 27 | m_EnableCompatibleFormat: 1 28 | m_TextureSettings: 29 | serializedVersion: 2 30 | m_FilterMode: 1 31 | m_Aniso: 0 32 | m_MipBias: 0 33 | m_WrapU: 1 34 | m_WrapV: 1 35 | m_WrapW: 1 36 | m_Dimension: 2 37 | m_VolumeDepth: 1 38 | -------------------------------------------------------------------------------- /Assets/03WaveEquation/wave2drt3.renderTexture.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 276b49a992d8d0a4490fbaf6b5c30df5 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/03WaveEquation/wave3d.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a903458b1f8576048b268456bef1d69d 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/04EulerEquation.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2539ec4fbda1c694fa3e7fad9556423a 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/04EulerEquation/Euler.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f122ebc463e023f48860974a11f03f99 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/04EulerEquation/EulerEquation.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: fb6648e5a0e3b084e8bac04605cbcdb3 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/04EulerEquation/Shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7b4b42add2cbb81479965b3ebaa268a1 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/04EulerEquation/Shader/Advection.shader: -------------------------------------------------------------------------------- 1 | Shader "EulerEquation/Advection" 2 | { 3 | Properties 4 | { 5 | _MainTex ("Texture", 2D) = "white" {} 6 | _VelocityTex("Texture", 2D) = "white" {} 7 | } 8 | SubShader 9 | { 10 | Tags { "RenderType"="Opaque" } 11 | LOD 100 12 | 13 | Pass 14 | { 15 | CGPROGRAM 16 | #pragma vertex vert 17 | #pragma fragment frag 18 | // make fog work 19 | #pragma multi_compile_fog 20 | 21 | #include "UnityCG.cginc" 22 | 23 | struct appdata 24 | { 25 | float4 vertex : POSITION; 26 | float2 uv : TEXCOORD0; 27 | }; 28 | 29 | struct v2f 30 | { 31 | float2 uv : TEXCOORD0; 32 | UNITY_FOG_COORDS(1) 33 | float4 vertex : SV_POSITION; 34 | }; 35 | 36 | sampler2D _MainTex; 37 | sampler2D _VelocityTex; 38 | float2 _MainTex_TexelSize; 39 | float4 _MainTex_ST; 40 | 41 | v2f vert (appdata v) 42 | { 43 | v2f o; 44 | o.vertex = UnityObjectToClipPos(v.vertex); 45 | o.uv = TRANSFORM_TEX(v.uv, _MainTex); 46 | UNITY_TRANSFER_FOG(o,o.vertex); 47 | return o; 48 | } 49 | 50 | fixed4 frag(v2f i) : SV_Target 51 | { 52 | float speed = 5.0f; 53 | float2 coord = i.uv - speed * _MainTex_TexelSize.x * tex2D(_VelocityTex, i.uv).xy; 54 | float ratio = 0.99f; 55 | float4 col = ratio * tex2D(_VelocityTex, coord); 56 | return col; 57 | } 58 | ENDCG 59 | } 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /Assets/04EulerEquation/Shader/Advection.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8c4fbfb61aacfbf44973f682028c0b16 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/04EulerEquation/Shader/AdvectionMat.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 6 6 | m_ObjectHideFlags: 0 7 | m_CorrespondingSourceObject: {fileID: 0} 8 | m_PrefabInstance: {fileID: 0} 9 | m_PrefabAsset: {fileID: 0} 10 | m_Name: AdvectionMat 11 | m_Shader: {fileID: 4800000, guid: 8c4fbfb61aacfbf44973f682028c0b16, type: 3} 12 | m_ShaderKeywords: 13 | m_LightmapFlags: 4 14 | m_EnableInstancingVariants: 0 15 | m_DoubleSidedGI: 0 16 | m_CustomRenderQueue: -1 17 | stringTagMap: {} 18 | disabledShaderPasses: [] 19 | m_SavedProperties: 20 | serializedVersion: 3 21 | m_TexEnvs: 22 | - _MainTex: 23 | m_Texture: {fileID: 8400000, guid: 4b57a6c8d1f5b8b4c97ee627934617c0, type: 2} 24 | m_Scale: {x: 1, y: 1} 25 | m_Offset: {x: 0, y: 0} 26 | - _VelocityTex: 27 | m_Texture: {fileID: 0} 28 | m_Scale: {x: 1, y: 1} 29 | m_Offset: {x: 0, y: 0} 30 | m_Floats: [] 31 | m_Colors: [] 32 | -------------------------------------------------------------------------------- /Assets/04EulerEquation/Shader/AdvectionMat.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a53ad56b950691249a258079b87e95bb 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/04EulerEquation/Shader/Display.shader: -------------------------------------------------------------------------------- 1 | Shader "EulerEquation/Display" 2 | { 3 | Properties 4 | { 5 | _MainTex ("Texture", 2D) = "white" {} 6 | _VelocityTex("Texture", 2D) = "white" {} 7 | _DyeTex("Texture", 2D) = "white" {} 8 | 9 | } 10 | SubShader 11 | { 12 | Tags { "RenderType"="Opaque" } 13 | LOD 100 14 | 15 | Pass 16 | { 17 | CGPROGRAM 18 | #pragma vertex vert 19 | #pragma fragment frag 20 | // make fog work 21 | #pragma multi_compile_fog 22 | 23 | #include "UnityCG.cginc" 24 | 25 | struct appdata 26 | { 27 | float4 vertex : POSITION; 28 | float2 uv : TEXCOORD0; 29 | }; 30 | 31 | struct v2f 32 | { 33 | float2 uv : TEXCOORD0; 34 | UNITY_FOG_COORDS(1) 35 | float4 vertex : SV_POSITION; 36 | }; 37 | 38 | sampler2D _MainTex; 39 | sampler2D _VelocityTex; 40 | sampler2D _DyeTex; 41 | float2 _VelocityTex_TexelSize; 42 | float4 _MainTex_ST; 43 | 44 | v2f vert (appdata v) 45 | { 46 | v2f o; 47 | o.vertex = UnityObjectToClipPos(v.vertex); 48 | o.uv = TRANSFORM_TEX(v.uv, _MainTex); 49 | UNITY_TRANSFER_FOG(o,o.vertex); 50 | return o; 51 | } 52 | 53 | fixed4 frag(v2f i) : SV_Target 54 | { 55 | float2 coord = i.uv - _VelocityTex_TexelSize.x * tex2D(_VelocityTex,i.uv).xy; 56 | float4 col = tex2D(_DyeTex, coord); 57 | return col; 58 | } 59 | ENDCG 60 | } 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /Assets/04EulerEquation/Shader/Display.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f1c456bcdfbb2af4090b58916d7e3c4a 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/04EulerEquation/Shader/DisplayMat.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 6 6 | m_ObjectHideFlags: 0 7 | m_CorrespondingSourceObject: {fileID: 0} 8 | m_PrefabInstance: {fileID: 0} 9 | m_PrefabAsset: {fileID: 0} 10 | m_Name: DisplayMat 11 | m_Shader: {fileID: 4800000, guid: f1c456bcdfbb2af4090b58916d7e3c4a, type: 3} 12 | m_ShaderKeywords: 13 | m_LightmapFlags: 4 14 | m_EnableInstancingVariants: 0 15 | m_DoubleSidedGI: 0 16 | m_CustomRenderQueue: -1 17 | stringTagMap: {} 18 | disabledShaderPasses: [] 19 | m_SavedProperties: 20 | serializedVersion: 3 21 | m_TexEnvs: 22 | - _DyeTex: 23 | m_Texture: {fileID: 0} 24 | m_Scale: {x: 1, y: 1} 25 | m_Offset: {x: 0, y: 0} 26 | - _MainTex: 27 | m_Texture: {fileID: 0} 28 | m_Scale: {x: 1, y: 1} 29 | m_Offset: {x: 0, y: 0} 30 | - _VelocityTex: 31 | m_Texture: {fileID: 0} 32 | m_Scale: {x: 1, y: 1} 33 | m_Offset: {x: 0, y: 0} 34 | m_Floats: [] 35 | m_Colors: [] 36 | -------------------------------------------------------------------------------- /Assets/04EulerEquation/Shader/DisplayMat.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 53573eb52809ace4987cd0793974f470 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/04EulerEquation/Shader/Divergence.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: fa2e681dcf76889459b06bb3d7f0f1b2 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/04EulerEquation/Shader/DivergenceMat.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 6 6 | m_ObjectHideFlags: 0 7 | m_CorrespondingSourceObject: {fileID: 0} 8 | m_PrefabInstance: {fileID: 0} 9 | m_PrefabAsset: {fileID: 0} 10 | m_Name: DivergenceMat 11 | m_Shader: {fileID: 4800000, guid: fa2e681dcf76889459b06bb3d7f0f1b2, type: 3} 12 | m_ShaderKeywords: 13 | m_LightmapFlags: 4 14 | m_EnableInstancingVariants: 0 15 | m_DoubleSidedGI: 0 16 | m_CustomRenderQueue: -1 17 | stringTagMap: {} 18 | disabledShaderPasses: [] 19 | m_SavedProperties: 20 | serializedVersion: 3 21 | m_TexEnvs: 22 | - _MainTex: 23 | m_Texture: {fileID: 8400000, guid: 4b57a6c8d1f5b8b4c97ee627934617c0, type: 2} 24 | m_Scale: {x: 1, y: 1} 25 | m_Offset: {x: 0, y: 0} 26 | - _VelocityTex: 27 | m_Texture: {fileID: 0} 28 | m_Scale: {x: 1, y: 1} 29 | m_Offset: {x: 0, y: 0} 30 | m_Floats: [] 31 | m_Colors: [] 32 | -------------------------------------------------------------------------------- /Assets/04EulerEquation/Shader/DivergenceMat.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 63f32f0b7dbe9f243858770b36d6ed3c 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/04EulerEquation/Shader/InitDye.shader: -------------------------------------------------------------------------------- 1 | Shader "EulerEquation/InitDye" 2 | { 3 | Properties 4 | { 5 | _MainTex ("Texture", 2D) = "white" {} 6 | } 7 | SubShader 8 | { 9 | Tags { "RenderType"="Opaque" } 10 | LOD 100 11 | 12 | Pass 13 | { 14 | CGPROGRAM 15 | #pragma vertex vert 16 | #pragma fragment frag 17 | // make fog work 18 | #pragma multi_compile_fog 19 | 20 | #include "UnityCG.cginc" 21 | 22 | struct appdata 23 | { 24 | float4 vertex : POSITION; 25 | float2 uv : TEXCOORD0; 26 | }; 27 | 28 | struct v2f 29 | { 30 | float2 uv : TEXCOORD0; 31 | UNITY_FOG_COORDS(1) 32 | float4 vertex : SV_POSITION; 33 | }; 34 | 35 | sampler2D _MainTex; 36 | float4 _MainTex_ST; 37 | 38 | v2f vert (appdata v) 39 | { 40 | v2f o; 41 | o.vertex = UnityObjectToClipPos(v.vertex); 42 | o.uv = TRANSFORM_TEX(v.uv, _MainTex); 43 | UNITY_TRANSFER_FOG(o,o.vertex); 44 | return o; 45 | } 46 | 47 | fixed4 frag (v2f i) : SV_Target 48 | { 49 | // sample the texture 50 | fixed4 col = tex2D(_MainTex, i.uv); 51 | // apply fog 52 | UNITY_APPLY_FOG(i.fogCoord, col); 53 | return col; 54 | } 55 | ENDCG 56 | } 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /Assets/04EulerEquation/Shader/InitDye.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9424ab39332c282448e97ae31ea73621 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/04EulerEquation/Shader/InitDyeMat.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 6 6 | m_ObjectHideFlags: 0 7 | m_CorrespondingSourceObject: {fileID: 0} 8 | m_PrefabInstance: {fileID: 0} 9 | m_PrefabAsset: {fileID: 0} 10 | m_Name: InitDyeMat 11 | m_Shader: {fileID: 4800000, guid: 9424ab39332c282448e97ae31ea73621, type: 3} 12 | m_ShaderKeywords: 13 | m_LightmapFlags: 4 14 | m_EnableInstancingVariants: 0 15 | m_DoubleSidedGI: 0 16 | m_CustomRenderQueue: -1 17 | stringTagMap: {} 18 | disabledShaderPasses: [] 19 | m_SavedProperties: 20 | serializedVersion: 3 21 | m_TexEnvs: 22 | - _MainTex: 23 | m_Texture: {fileID: 2800000, guid: 822d17d679333a6419b339181e7237d0, type: 3} 24 | m_Scale: {x: 1, y: 1} 25 | m_Offset: {x: 0, y: 0} 26 | m_Floats: [] 27 | m_Colors: [] 28 | m_BuildTextureStacks: [] 29 | -------------------------------------------------------------------------------- /Assets/04EulerEquation/Shader/InitDyeMat.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6f96f3419becdc4488dcb27dbe4e265f 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/04EulerEquation/Shader/InitVelocity.shader: -------------------------------------------------------------------------------- 1 | Shader "EulerEquation/InitVelocity" 2 | { 3 | Properties 4 | { 5 | _MainTex ("Texture", 2D) = "white" {} 6 | } 7 | SubShader 8 | { 9 | Tags { "RenderType"="Opaque" } 10 | LOD 100 11 | 12 | Pass 13 | { 14 | CGPROGRAM 15 | #pragma vertex vert 16 | #pragma fragment frag 17 | // make fog work 18 | #pragma multi_compile_fog 19 | 20 | #include "UnityCG.cginc" 21 | 22 | struct appdata 23 | { 24 | float4 vertex : POSITION; 25 | float2 uv : TEXCOORD0; 26 | }; 27 | 28 | struct v2f 29 | { 30 | float2 uv : TEXCOORD0; 31 | UNITY_FOG_COORDS(1) 32 | float4 vertex : SV_POSITION; 33 | }; 34 | 35 | sampler2D _MainTex; 36 | float4 _MainTex_ST; 37 | 38 | v2f vert (appdata v) 39 | { 40 | v2f o; 41 | o.vertex = UnityObjectToClipPos(v.vertex); 42 | o.uv = TRANSFORM_TEX(v.uv, _MainTex); 43 | UNITY_TRANSFER_FOG(o,o.vertex); 44 | return o; 45 | } 46 | 47 | fixed4 frag (v2f i) : SV_Target 48 | { 49 | return float4(0.0f, 0.0f, 0.0f, 1.0f); 50 | } 51 | ENDCG 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /Assets/04EulerEquation/Shader/InitVelocity.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: deb4d97f6d2f4d74782b5e4157ce94c8 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/04EulerEquation/Shader/InitVelocityMat.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 6 6 | m_ObjectHideFlags: 0 7 | m_CorrespondingSourceObject: {fileID: 0} 8 | m_PrefabInstance: {fileID: 0} 9 | m_PrefabAsset: {fileID: 0} 10 | m_Name: InitVelocityMat 11 | m_Shader: {fileID: 4800000, guid: deb4d97f6d2f4d74782b5e4157ce94c8, type: 3} 12 | m_ShaderKeywords: 13 | m_LightmapFlags: 4 14 | m_EnableInstancingVariants: 0 15 | m_DoubleSidedGI: 0 16 | m_CustomRenderQueue: -1 17 | stringTagMap: {} 18 | disabledShaderPasses: [] 19 | m_SavedProperties: 20 | serializedVersion: 3 21 | m_TexEnvs: 22 | - _MainTex: 23 | m_Texture: {fileID: 0} 24 | m_Scale: {x: 1, y: 1} 25 | m_Offset: {x: 0, y: 0} 26 | m_Floats: [] 27 | m_Colors: [] 28 | m_BuildTextureStacks: [] 29 | -------------------------------------------------------------------------------- /Assets/04EulerEquation/Shader/InitVelocityMat.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 80070064e876afd48bb54ff3b51da071 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/04EulerEquation/Shader/Pressure.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 66b10d5c244191f40aa9eead4d2d630b 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/04EulerEquation/Shader/PressureMat.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 6 6 | m_ObjectHideFlags: 0 7 | m_CorrespondingSourceObject: {fileID: 0} 8 | m_PrefabInstance: {fileID: 0} 9 | m_PrefabAsset: {fileID: 0} 10 | m_Name: PressureMat 11 | m_Shader: {fileID: 4800000, guid: 66b10d5c244191f40aa9eead4d2d630b, type: 3} 12 | m_ShaderKeywords: 13 | m_LightmapFlags: 4 14 | m_EnableInstancingVariants: 0 15 | m_DoubleSidedGI: 0 16 | m_CustomRenderQueue: -1 17 | stringTagMap: {} 18 | disabledShaderPasses: [] 19 | m_SavedProperties: 20 | serializedVersion: 3 21 | m_TexEnvs: 22 | - _DivergenceTex: 23 | m_Texture: {fileID: 0} 24 | m_Scale: {x: 1, y: 1} 25 | m_Offset: {x: 0, y: 0} 26 | - _MainTex: 27 | m_Texture: {fileID: 8400000, guid: d6e285a926a9b5449bdb04e8e5e4b3fd, type: 2} 28 | m_Scale: {x: 1, y: 1} 29 | m_Offset: {x: 0, y: 0} 30 | - _PressureTex: 31 | m_Texture: {fileID: 0} 32 | m_Scale: {x: 1, y: 1} 33 | m_Offset: {x: 0, y: 0} 34 | m_Floats: [] 35 | m_Colors: [] 36 | -------------------------------------------------------------------------------- /Assets/04EulerEquation/Shader/PressureMat.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 958481df47ba4db4fab7f5bb2526e346 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/04EulerEquation/Shader/Splat.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ee98fdbd8f813a649b07ecf01b62c5c5 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/04EulerEquation/Shader/SplatMat.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 6 6 | m_ObjectHideFlags: 0 7 | m_CorrespondingSourceObject: {fileID: 0} 8 | m_PrefabInstance: {fileID: 0} 9 | m_PrefabAsset: {fileID: 0} 10 | m_Name: SplatMat 11 | m_Shader: {fileID: 4800000, guid: ee98fdbd8f813a649b07ecf01b62c5c5, type: 3} 12 | m_ShaderKeywords: 13 | m_LightmapFlags: 4 14 | m_EnableInstancingVariants: 0 15 | m_DoubleSidedGI: 0 16 | m_CustomRenderQueue: -1 17 | stringTagMap: {} 18 | disabledShaderPasses: [] 19 | m_SavedProperties: 20 | serializedVersion: 3 21 | m_TexEnvs: 22 | - _MainTex: 23 | m_Texture: {fileID: 8400000, guid: 0ac9b6a3b4d7866439c645ce1df3655f, type: 2} 24 | m_Scale: {x: 1, y: 1} 25 | m_Offset: {x: 0, y: 0} 26 | - _VelocityTex: 27 | m_Texture: {fileID: 0} 28 | m_Scale: {x: 1, y: 1} 29 | m_Offset: {x: 0, y: 0} 30 | m_Floats: [] 31 | m_Colors: [] 32 | -------------------------------------------------------------------------------- /Assets/04EulerEquation/Shader/SplatMat.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 34644c0add533ab409c4bbc9bb44302e 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/04EulerEquation/Shader/Subtract.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 966ac81acff4ab642aa016ad5c060c36 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/04EulerEquation/Shader/SubtractMat.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 6 6 | m_ObjectHideFlags: 0 7 | m_CorrespondingSourceObject: {fileID: 0} 8 | m_PrefabInstance: {fileID: 0} 9 | m_PrefabAsset: {fileID: 0} 10 | m_Name: SubtractMat 11 | m_Shader: {fileID: 4800000, guid: 966ac81acff4ab642aa016ad5c060c36, type: 3} 12 | m_ShaderKeywords: 13 | m_LightmapFlags: 4 14 | m_EnableInstancingVariants: 0 15 | m_DoubleSidedGI: 0 16 | m_CustomRenderQueue: -1 17 | stringTagMap: {} 18 | disabledShaderPasses: [] 19 | m_SavedProperties: 20 | serializedVersion: 3 21 | m_TexEnvs: 22 | - _MainTex: 23 | m_Texture: {fileID: 8400000, guid: 4b57a6c8d1f5b8b4c97ee627934617c0, type: 2} 24 | m_Scale: {x: 1, y: 1} 25 | m_Offset: {x: 0, y: 0} 26 | - _PressureTex: 27 | m_Texture: {fileID: 0} 28 | m_Scale: {x: 1, y: 1} 29 | m_Offset: {x: 0, y: 0} 30 | - _VelocityTex: 31 | m_Texture: {fileID: 0} 32 | m_Scale: {x: 1, y: 1} 33 | m_Offset: {x: 0, y: 0} 34 | m_Floats: [] 35 | m_Colors: [] 36 | -------------------------------------------------------------------------------- /Assets/04EulerEquation/Shader/SubtractMat.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3ac0ef903d40a8445b68dc638fe80b7d 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/04EulerEquation/water_new_height.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clatterrr/FluidSimulationTutorialsUnity/f5d269d57576a7f579a6797f8c74079ff5199baf/Assets/04EulerEquation/water_new_height.png -------------------------------------------------------------------------------- /Assets/06NavierStokes.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 56ed5d940bc2dd34f8e07e0ab3a45468 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/06NavierStokes/Cavity2D.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2a99467948f5081428856e179735b39a 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/06NavierStokes/NaiverEquation_Viscosity.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 6 6 | m_ObjectHideFlags: 0 7 | m_CorrespondingSourceObject: {fileID: 0} 8 | m_PrefabInstance: {fileID: 0} 9 | m_PrefabAsset: {fileID: 0} 10 | m_Name: NaiverEquation_Viscosity 11 | m_Shader: {fileID: 4800000, guid: 0e707bf8bcc47bf448e139e8fb4dce5b, type: 3} 12 | m_ShaderKeywords: 13 | m_LightmapFlags: 4 14 | m_EnableInstancingVariants: 0 15 | m_DoubleSidedGI: 0 16 | m_CustomRenderQueue: -1 17 | stringTagMap: {} 18 | disabledShaderPasses: [] 19 | m_SavedProperties: 20 | serializedVersion: 3 21 | m_TexEnvs: 22 | - _MainTex: 23 | m_Texture: {fileID: 0} 24 | m_Scale: {x: 1, y: 1} 25 | m_Offset: {x: 0, y: 0} 26 | - _VelocityTex: 27 | m_Texture: {fileID: 0} 28 | m_Scale: {x: 1, y: 1} 29 | m_Offset: {x: 0, y: 0} 30 | m_Floats: [] 31 | m_Colors: [] 32 | -------------------------------------------------------------------------------- /Assets/06NavierStokes/NaiverEquation_Viscosity.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4c1e9a6ce703343488330a6807dbc0b4 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 2100000 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/06NavierStokes/NavierStokes.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 770370762bd19c9498ca3c353ecd1918 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/06NavierStokes/Viscosity.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0e707bf8bcc47bf448e139e8fb4dce5b 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/06NavierStokes/cavity.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6a395566b4f756346be1a2c1ed6bbbc7 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/06NavierStokes/city.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clatterrr/FluidSimulationTutorialsUnity/f5d269d57576a7f579a6797f8c74079ff5199baf/Assets/06NavierStokes/city.jpg -------------------------------------------------------------------------------- /Assets/06NavierStokes/navier.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f94ad2b69c82bf7438e55bec1a7dbf39 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/09ShallowWater.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 42d1418b48ae87441861c81818d3d016 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/09ShallowWater/Compute.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0f21c1336e1b229438e1f952ce171f71 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/09ShallowWater/Compute/ComputeFG.compute: -------------------------------------------------------------------------------- 1 | // Each #kernel tells which function to compile; you can have many kernels 2 | #pragma kernel CSMain 3 | 4 | struct huvStruct 5 | { 6 | float h; 7 | float u; 8 | float v; 9 | }; 10 | struct FGStruct 11 | { 12 | float F1, F2, F3, G1, G2, G3; 13 | }; 14 | RWStructuredBuffer huv; 15 | RWStructuredBuffer FG; 16 | [numthreads(32, 1, 1)] 17 | void CSMain(uint3 id : SV_DispatchThreadID) 18 | { 19 | FG[id.x].F1 = huv[id.x].h * huv[id.x].u; 20 | FG[id.x].F2 = huv[id.x].h * huv[id.x].u * huv[id.x].u + 0.5f * 10.0f * huv[id.x].h * huv[id.x].h; 21 | FG[id.x].F3 = huv[id.x].h * huv[id.x].u * huv[id.x].v; 22 | FG[id.x].G1 = huv[id.x].h * huv[id.x].v; 23 | FG[id.x].G2 = huv[id.x].h * huv[id.x].u * huv[id.x].v; 24 | FG[id.x].G3 = huv[id.x].h * huv[id.x].v * huv[id.x].v + 0.5f * 10.0f * huv[id.x].h * huv[id.x].h; 25 | } 26 | -------------------------------------------------------------------------------- /Assets/09ShallowWater/Compute/ComputeFG.compute.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0017add8a3c085e40a24eebf374a3646 3 | ComputeShaderImporter: 4 | externalObjects: {} 5 | currentAPIMask: 4 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/09ShallowWater/Compute/ComputeManager.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 123ee9ca19a3928498622bd9d5d6324f 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/09ShallowWater/Compute/ComputeU.compute: -------------------------------------------------------------------------------- 1 | // Each #kernel tells which function to compile; you can have many kernels 2 | #pragma kernel CSMain 3 | 4 | struct huvStruct 5 | { 6 | float h; 7 | float u; 8 | float v; 9 | }; 10 | struct UStruct 11 | { 12 | float U1, U2, U3; 13 | }; 14 | StructuredBuffer huv; 15 | RWStructuredBuffer U; 16 | int nmax; 17 | 18 | [numthreads(32, 1, 1)] 19 | void CSMain(uint3 id : SV_DispatchThreadID) 20 | { 21 | U[id.x].U1 = huv[id.x].h; 22 | U[id.x].U2 = huv[id.x].h * huv[id.x].u; 23 | U[id.x].U3 = huv[id.x].h * huv[id.x].v; 24 | 25 | } 26 | -------------------------------------------------------------------------------- /Assets/09ShallowWater/Compute/ComputeU.compute.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 91a5b8679e3ac7343ac5e6450f5253f4 3 | ComputeShaderImporter: 4 | externalObjects: {} 5 | currentAPIMask: 4 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/09ShallowWater/Compute/ComputefgHalf.compute.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 553fd611fe3a703458138fa9828a3698 3 | ComputeShaderImporter: 4 | externalObjects: {} 5 | currentAPIMask: 4 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/09ShallowWater/Compute/UpdateU.compute: -------------------------------------------------------------------------------- 1 | // Each #kernel tells which function to compile; you can have many kernels 2 | #pragma kernel CSMain 3 | 4 | struct fgHalfStruct 5 | { 6 | float f1, f2, f3, g1, g2, g3; 7 | }; 8 | struct UStruct 9 | { 10 | float U1, U2, U3; 11 | }; 12 | struct huvStruct 13 | { 14 | float h, u, v; 15 | }; 16 | RWStructuredBuffer fgHalf; 17 | RWStructuredBuffer U; 18 | RWStructuredBuffer huv; 19 | int nmax; 20 | float dt_dx; 21 | 22 | [numthreads(32, 1, 1)] 23 | void CSMain(uint3 id : SV_DispatchThreadID) 24 | { 25 | int columX = id.x % nmax; 26 | int rowY = id.x / nmax; 27 | int fHalfIdx = rowY * (nmax + 1) + columX; 28 | int gHalfIdx = rowY * nmax + columX; 29 | if (id.x < nmax * nmax) 30 | { 31 | U[id.x].U1 -= dt_dx * (fgHalf[fHalfIdx + 1].f1 - fgHalf[fHalfIdx].f1) - dt_dx * (fgHalf[gHalfIdx + nmax].g1 - fgHalf[gHalfIdx].g1); 32 | U[id.x].U2 -= dt_dx * (fgHalf[fHalfIdx + 1].f2 - fgHalf[fHalfIdx].f2) - dt_dx * (fgHalf[gHalfIdx + nmax].g2 - fgHalf[gHalfIdx].g2); 33 | U[id.x].U3 -= dt_dx * (fgHalf[fHalfIdx + 1].f3 - fgHalf[fHalfIdx].f3) - dt_dx * (fgHalf[gHalfIdx + nmax].g3 - fgHalf[gHalfIdx].g3); 34 | huv[id.x].h = U[id.x].U1; 35 | huv[id.x].u = U[id.x].U2 / U[id.x].U1; 36 | huv[id.x].v = U[id.x].U3 / U[id.x].U1; 37 | } 38 | 39 | } 40 | -------------------------------------------------------------------------------- /Assets/09ShallowWater/Compute/UpdateU.compute.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d2646d34870d6da4ba16337642d1fc7c 3 | ComputeShaderImporter: 4 | externalObjects: {} 5 | currentAPIMask: 4 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/09ShallowWater/Shallow.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 00e5b3b372b038340a9f6b5e6eb555b0 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/09ShallowWater/ShallowWater.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d9f58c078dd9a7442823f93bd6c79a4a 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/09ShallowWater/WaterMat.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 876ffe0fcc093da46b0949e70dbdb2e7 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/09ShallowWater/WaterSurface.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f00f3d44739a1d9478dc24cfdc03e9dc 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/09ShallowWater/monte_scherbelino_1k.hdr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clatterrr/FluidSimulationTutorialsUnity/f5d269d57576a7f579a6797f8c74079ff5199baf/Assets/09ShallowWater/monte_scherbelino_1k.hdr -------------------------------------------------------------------------------- /Assets/10Smoke2d.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0c4f7e6dc52f14e43992a2358d1bc5ee 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/10Smoke2d/Shaders.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1d48e6a0ff7783e44a527ca1cf5b8e00 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/10Smoke2d/Shaders/Advection_S.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 58363e0b99f3e134780a732ba6716ab4 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/10Smoke2d/Shaders/Curl_S.shader: -------------------------------------------------------------------------------- 1 | Shader "Smoke2d/Curl_S" 2 | { 3 | Properties 4 | { 5 | _MainTex ("Texture", 2D) = "white" {} 6 | VelocityTex("VelocityTex", 2D) = "white" {} 7 | } 8 | SubShader 9 | { 10 | Tags { "RenderType"="Opaque" } 11 | LOD 100 12 | 13 | Pass 14 | { 15 | CGPROGRAM 16 | #pragma vertex vert 17 | #pragma fragment frag 18 | // make fog work 19 | #pragma multi_compile_fog 20 | 21 | #include "UnityCG.cginc" 22 | 23 | struct appdata 24 | { 25 | float4 vertex : POSITION; 26 | float2 uv : TEXCOORD0; 27 | }; 28 | 29 | struct v2f 30 | { 31 | float2 uv : TEXCOORD0; 32 | UNITY_FOG_COORDS(1) 33 | float4 vertex : SV_POSITION; 34 | }; 35 | 36 | sampler2D VelocityTex; 37 | float4 VelocityTex_TexelSize; 38 | float2 TexelSize; 39 | sampler2D _MainTex; 40 | float4 _MainTex_ST; 41 | 42 | v2f vert (appdata v) 43 | { 44 | v2f o; 45 | o.vertex = UnityObjectToClipPos(v.vertex); 46 | o.uv = TRANSFORM_TEX(v.uv, _MainTex); 47 | UNITY_TRANSFER_FOG(o,o.vertex); 48 | return o; 49 | } 50 | 51 | float4 frag(v2f i) :SV_Target{ 52 | float L = tex2D(VelocityTex,i.uv - float2(VelocityTex_TexelSize.x,0.0f)).y; 53 | float R = tex2D(VelocityTex,i.uv + float2(VelocityTex_TexelSize.x, 0.0f)).y; 54 | float T = tex2D(VelocityTex, i.uv + float2(0.0f, VelocityTex_TexelSize.y)).x; 55 | float B = tex2D(VelocityTex, i.uv - float2(0.0f, VelocityTex_TexelSize.y)).x; 56 | float vorticity = 0.5f*(R - L - T + B); 57 | return float4(vorticity,0.,0.,1.); 58 | } 59 | ENDCG 60 | } 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /Assets/10Smoke2d/Shaders/Curl_S.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d850a37f8cb09384d906c4d2d7ee8dbd 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/10Smoke2d/Shaders/Divergence_S.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ca11c30d3d0499d4bab3a470a72b5215 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/10Smoke2d/Shaders/Pressure_S.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c250dabb7ad90e5428af0c559912f8e3 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/10Smoke2d/Shaders/Smoke2d_Advection_S.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 6 6 | m_ObjectHideFlags: 0 7 | m_CorrespondingSourceObject: {fileID: 0} 8 | m_PrefabInstance: {fileID: 0} 9 | m_PrefabAsset: {fileID: 0} 10 | m_Name: Smoke2d_Advection_S 11 | m_Shader: {fileID: 4800000, guid: 58363e0b99f3e134780a732ba6716ab4, type: 3} 12 | m_ShaderKeywords: 13 | m_LightmapFlags: 4 14 | m_EnableInstancingVariants: 0 15 | m_DoubleSidedGI: 0 16 | m_CustomRenderQueue: -1 17 | stringTagMap: {} 18 | disabledShaderPasses: [] 19 | m_SavedProperties: 20 | serializedVersion: 3 21 | m_TexEnvs: 22 | - VelocityDensityTex: 23 | m_Texture: {fileID: 0} 24 | m_Scale: {x: 1, y: 1} 25 | m_Offset: {x: 0, y: 0} 26 | - VelocityTex: 27 | m_Texture: {fileID: 0} 28 | m_Scale: {x: 1, y: 1} 29 | m_Offset: {x: 0, y: 0} 30 | - _MainTex: 31 | m_Texture: {fileID: 0} 32 | m_Scale: {x: 1, y: 1} 33 | m_Offset: {x: 0, y: 0} 34 | m_Floats: [] 35 | m_Colors: [] 36 | -------------------------------------------------------------------------------- /Assets/10Smoke2d/Shaders/Smoke2d_Advection_S.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7a4952efa64186e4593c98b3ae19aed1 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 2100000 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/10Smoke2d/Shaders/Smoke2d_Curl_S.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 6 6 | m_ObjectHideFlags: 0 7 | m_CorrespondingSourceObject: {fileID: 0} 8 | m_PrefabInstance: {fileID: 0} 9 | m_PrefabAsset: {fileID: 0} 10 | m_Name: Smoke2d_Curl_S 11 | m_Shader: {fileID: 4800000, guid: d850a37f8cb09384d906c4d2d7ee8dbd, type: 3} 12 | m_ShaderKeywords: 13 | m_LightmapFlags: 4 14 | m_EnableInstancingVariants: 0 15 | m_DoubleSidedGI: 0 16 | m_CustomRenderQueue: -1 17 | stringTagMap: {} 18 | disabledShaderPasses: [] 19 | m_SavedProperties: 20 | serializedVersion: 3 21 | m_TexEnvs: 22 | - VelocityTex: 23 | m_Texture: {fileID: 0} 24 | m_Scale: {x: 1, y: 1} 25 | m_Offset: {x: 0, y: 0} 26 | - _MainTex: 27 | m_Texture: {fileID: 0} 28 | m_Scale: {x: 1, y: 1} 29 | m_Offset: {x: 0, y: 0} 30 | m_Floats: [] 31 | m_Colors: [] 32 | -------------------------------------------------------------------------------- /Assets/10Smoke2d/Shaders/Smoke2d_Curl_S.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 41c0375cd590e60488d73d71a0fbb9c9 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 2100000 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/10Smoke2d/Shaders/Smoke2d_Divergence_S.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 6 6 | m_ObjectHideFlags: 0 7 | m_CorrespondingSourceObject: {fileID: 0} 8 | m_PrefabInstance: {fileID: 0} 9 | m_PrefabAsset: {fileID: 0} 10 | m_Name: Smoke2d_Divergence_S 11 | m_Shader: {fileID: 4800000, guid: ca11c30d3d0499d4bab3a470a72b5215, type: 3} 12 | m_ShaderKeywords: 13 | m_LightmapFlags: 4 14 | m_EnableInstancingVariants: 0 15 | m_DoubleSidedGI: 0 16 | m_CustomRenderQueue: -1 17 | stringTagMap: {} 18 | disabledShaderPasses: [] 19 | m_SavedProperties: 20 | serializedVersion: 3 21 | m_TexEnvs: 22 | - VelocityTex: 23 | m_Texture: {fileID: 0} 24 | m_Scale: {x: 1, y: 1} 25 | m_Offset: {x: 0, y: 0} 26 | - _MainTex: 27 | m_Texture: {fileID: 0} 28 | m_Scale: {x: 1, y: 1} 29 | m_Offset: {x: 0, y: 0} 30 | m_Floats: [] 31 | m_Colors: [] 32 | -------------------------------------------------------------------------------- /Assets/10Smoke2d/Shaders/Smoke2d_Divergence_S.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: de3ade5729d32f74e9b9218dc3a67ffd 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 2100000 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/10Smoke2d/Shaders/Smoke2d_Pressure_S.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 6 6 | m_ObjectHideFlags: 0 7 | m_CorrespondingSourceObject: {fileID: 0} 8 | m_PrefabInstance: {fileID: 0} 9 | m_PrefabAsset: {fileID: 0} 10 | m_Name: Smoke2d_Pressure_S 11 | m_Shader: {fileID: 4800000, guid: c250dabb7ad90e5428af0c559912f8e3, type: 3} 12 | m_ShaderKeywords: 13 | m_LightmapFlags: 4 14 | m_EnableInstancingVariants: 0 15 | m_DoubleSidedGI: 0 16 | m_CustomRenderQueue: -1 17 | stringTagMap: {} 18 | disabledShaderPasses: [] 19 | m_SavedProperties: 20 | serializedVersion: 3 21 | m_TexEnvs: 22 | - DivergenceTex: 23 | m_Texture: {fileID: 0} 24 | m_Scale: {x: 1, y: 1} 25 | m_Offset: {x: 0, y: 0} 26 | - PressureTex: 27 | m_Texture: {fileID: 0} 28 | m_Scale: {x: 1, y: 1} 29 | m_Offset: {x: 0, y: 0} 30 | - _MainTex: 31 | m_Texture: {fileID: 0} 32 | m_Scale: {x: 1, y: 1} 33 | m_Offset: {x: 0, y: 0} 34 | m_Floats: [] 35 | m_Colors: [] 36 | -------------------------------------------------------------------------------- /Assets/10Smoke2d/Shaders/Smoke2d_Pressure_S.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: af2799047ad9f42429166e31ef27c019 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 2100000 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/10Smoke2d/Shaders/Smoke2d_Splat_S.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 6 6 | m_ObjectHideFlags: 0 7 | m_CorrespondingSourceObject: {fileID: 0} 8 | m_PrefabInstance: {fileID: 0} 9 | m_PrefabAsset: {fileID: 0} 10 | m_Name: Smoke2d_Splat_S 11 | m_Shader: {fileID: 4800000, guid: 1e89beac74952a34fb179cd11db90771, type: 3} 12 | m_ShaderKeywords: 13 | m_LightmapFlags: 4 14 | m_EnableInstancingVariants: 0 15 | m_DoubleSidedGI: 0 16 | m_CustomRenderQueue: -1 17 | stringTagMap: {} 18 | disabledShaderPasses: [] 19 | m_SavedProperties: 20 | serializedVersion: 3 21 | m_TexEnvs: 22 | - VelocityDensityTex: 23 | m_Texture: {fileID: 0} 24 | m_Scale: {x: 1, y: 1} 25 | m_Offset: {x: 0, y: 0} 26 | - _MainTex: 27 | m_Texture: {fileID: 0} 28 | m_Scale: {x: 1, y: 1} 29 | m_Offset: {x: 0, y: 0} 30 | m_Floats: 31 | - radius: 0.001 32 | m_Colors: 33 | - pointerpos: {r: 451, g: 190, b: 0, a: 0} 34 | -------------------------------------------------------------------------------- /Assets/10Smoke2d/Shaders/Smoke2d_Splat_S.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6b15e5718bc1e264e8aef52bbcab4f0f 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 2100000 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/10Smoke2d/Shaders/Smoke2d_Substract.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 6 6 | m_ObjectHideFlags: 0 7 | m_CorrespondingSourceObject: {fileID: 0} 8 | m_PrefabInstance: {fileID: 0} 9 | m_PrefabAsset: {fileID: 0} 10 | m_Name: Smoke2d_Substract 11 | m_Shader: {fileID: 4800000, guid: accad863656a237419d78d1ced57a6a3, type: 3} 12 | m_ShaderKeywords: 13 | m_LightmapFlags: 4 14 | m_EnableInstancingVariants: 0 15 | m_DoubleSidedGI: 0 16 | m_CustomRenderQueue: -1 17 | stringTagMap: {} 18 | disabledShaderPasses: [] 19 | m_SavedProperties: 20 | serializedVersion: 3 21 | m_TexEnvs: 22 | - PressureTex: 23 | m_Texture: {fileID: 0} 24 | m_Scale: {x: 1, y: 1} 25 | m_Offset: {x: 0, y: 0} 26 | - VelocityTex: 27 | m_Texture: {fileID: 0} 28 | m_Scale: {x: 1, y: 1} 29 | m_Offset: {x: 0, y: 0} 30 | - _MainTex: 31 | m_Texture: {fileID: 0} 32 | m_Scale: {x: 1, y: 1} 33 | m_Offset: {x: 0, y: 0} 34 | m_Floats: [] 35 | m_Colors: [] 36 | -------------------------------------------------------------------------------- /Assets/10Smoke2d/Shaders/Smoke2d_Substract.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 92f99533b5e90ef45aa79bf114252c4b 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 2100000 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/10Smoke2d/Shaders/Smoke2d_Vorticity_S.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 6 6 | m_ObjectHideFlags: 0 7 | m_CorrespondingSourceObject: {fileID: 0} 8 | m_PrefabInstance: {fileID: 0} 9 | m_PrefabAsset: {fileID: 0} 10 | m_Name: Smoke2d_Vorticity_S 11 | m_Shader: {fileID: 4800000, guid: 6fec5ccac1ee7454ca85ee4acb94f440, type: 3} 12 | m_ShaderKeywords: 13 | m_LightmapFlags: 4 14 | m_EnableInstancingVariants: 0 15 | m_DoubleSidedGI: 0 16 | m_CustomRenderQueue: -1 17 | stringTagMap: {} 18 | disabledShaderPasses: [] 19 | m_SavedProperties: 20 | serializedVersion: 3 21 | m_TexEnvs: 22 | - CurlTex: 23 | m_Texture: {fileID: 0} 24 | m_Scale: {x: 1, y: 1} 25 | m_Offset: {x: 0, y: 0} 26 | - VelocityTex: 27 | m_Texture: {fileID: 0} 28 | m_Scale: {x: 1, y: 1} 29 | m_Offset: {x: 0, y: 0} 30 | - _MainTex: 31 | m_Texture: {fileID: 0} 32 | m_Scale: {x: 1, y: 1} 33 | m_Offset: {x: 0, y: 0} 34 | m_Floats: [] 35 | m_Colors: [] 36 | -------------------------------------------------------------------------------- /Assets/10Smoke2d/Shaders/Smoke2d_Vorticity_S.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a0e02f2a0509f5946a4aab0b0005f8ca 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 2100000 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/10Smoke2d/Shaders/Splat_S.shader: -------------------------------------------------------------------------------- 1 | Shader "Smoke2d/Splat_S" 2 | { 3 | Properties 4 | { 5 | _MainTex ("Texture", 2D) = "white" {} 6 | VelocityDensityTex("VelocityDensityTex", 2D) = "white" {} 7 | pointerpos ("pointerpos", vector) = (0,0,0,0) 8 | radius ("radius", float) = 0 9 | } 10 | SubShader 11 | { 12 | Tags { "RenderType"="Opaque" } 13 | LOD 100 14 | 15 | Pass 16 | { 17 | CGPROGRAM 18 | #pragma vertex vert 19 | #pragma fragment frag 20 | // make fog work 21 | #pragma multi_compile_fog 22 | 23 | #include "UnityCG.cginc" 24 | 25 | struct appdata 26 | { 27 | float4 vertex : POSITION; 28 | float2 uv : TEXCOORD0; 29 | }; 30 | 31 | struct v2f 32 | { 33 | float2 uv : TEXCOORD0; 34 | UNITY_FOG_COORDS(1) 35 | float4 vertex : SV_POSITION; 36 | }; 37 | 38 | sampler2D VelocityDensityTex; 39 | float3 color; 40 | float2 pointerpos; 41 | float radius; 42 | sampler2D _MainTex; 43 | float4 _MainTex_ST; 44 | 45 | v2f vert (appdata v) 46 | { 47 | v2f o; 48 | o.vertex = UnityObjectToClipPos(v.vertex); 49 | o.uv = TRANSFORM_TEX(v.uv, _MainTex); 50 | UNITY_TRANSFER_FOG(o,o.vertex); 51 | return o; 52 | } 53 | 54 | float4 frag(v2f i) :SV_Target{ 55 | float2 p = i.uv - pointerpos.xy/_ScreenParams.xy; 56 | p.x *= (_ScreenParams.x/_ScreenParams.y); 57 | half3 splat = exp(-dot(p,p)/radius)*color; 58 | half3 base = tex2D(VelocityDensityTex,i.uv).rgb; 59 | return half4(base+splat,1.); 60 | } 61 | ENDCG 62 | } 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /Assets/10Smoke2d/Shaders/Splat_S.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1e89beac74952a34fb179cd11db90771 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/10Smoke2d/Shaders/Substract_S.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: accad863656a237419d78d1ced57a6a3 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/10Smoke2d/Shaders/Vorticity_S.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6fec5ccac1ee7454ca85ee4acb94f440 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/10Smoke2d/SmokeManager.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f3b7088773f4c0245a0f64c4acb21515 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/10Smoke2d/smoke.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5e937d0633e2bca4e8d4a3ab1d7b4900 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/11StreamLine.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7b86741e1f4f59847bc1152dd0d035a0 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/11StreamLine/SourcePanel.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: aae4e8533cb94574592d5f374edd724a 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/11StreamLine/SourcePanel/SPManager.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ac88a47192e3bde4da7aacdbb98a199b 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/11StreamLine/SourcePanel/SourcePanel.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 902616bc84d81da419727a2ff54b16a5 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/11StreamLine/SourcePanel/StreamLine.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: dba3017dcab1b0148b62b991b099781b 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/11StreamLine/SourcePanel/StreamLineMat.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 6 6 | m_ObjectHideFlags: 0 7 | m_CorrespondingSourceObject: {fileID: 0} 8 | m_PrefabInstance: {fileID: 0} 9 | m_PrefabAsset: {fileID: 0} 10 | m_Name: StreamLineMat 11 | m_Shader: {fileID: 4800000, guid: dba3017dcab1b0148b62b991b099781b, type: 3} 12 | m_ShaderKeywords: 13 | m_LightmapFlags: 4 14 | m_EnableInstancingVariants: 0 15 | m_DoubleSidedGI: 0 16 | m_CustomRenderQueue: -1 17 | stringTagMap: {} 18 | disabledShaderPasses: [] 19 | m_SavedProperties: 20 | serializedVersion: 3 21 | m_TexEnvs: 22 | - _MainTex: 23 | m_Texture: {fileID: 0} 24 | m_Scale: {x: 1, y: 1} 25 | m_Offset: {x: 0, y: 0} 26 | m_Floats: [] 27 | m_Colors: [] 28 | m_BuildTextureStacks: [] 29 | -------------------------------------------------------------------------------- /Assets/11StreamLine/SourcePanel/StreamLineMat.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 63ee813cf1bd02141867b3ba3c04df46 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/11StreamLine/SourceVortex.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9e0eb7ffc514feb48a558bd983b07ed4 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/11StreamLine/SourceVortex/SourceVortex.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8b898a99a5cc7824ab207b7fc0e2141f 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/11StreamLine/SourceVortex/SourceVortexManager.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e2643d01dd1c61d4fb1f207db9d4f0f2 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/11StreamLine/SourceVortex/SourceVortexMat.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 6 6 | m_ObjectHideFlags: 0 7 | m_CorrespondingSourceObject: {fileID: 0} 8 | m_PrefabInstance: {fileID: 0} 9 | m_PrefabAsset: {fileID: 0} 10 | m_Name: SourceVortexMat 11 | m_Shader: {fileID: 4800000, guid: f95a9adaa5a40704db2245fe7dc9df84, type: 3} 12 | m_ShaderKeywords: 13 | m_LightmapFlags: 4 14 | m_EnableInstancingVariants: 0 15 | m_DoubleSidedGI: 0 16 | m_CustomRenderQueue: -1 17 | stringTagMap: {} 18 | disabledShaderPasses: [] 19 | m_SavedProperties: 20 | serializedVersion: 3 21 | m_TexEnvs: 22 | - _MainTex: 23 | m_Texture: {fileID: 0} 24 | m_Scale: {x: 1, y: 1} 25 | m_Offset: {x: 0, y: 0} 26 | m_Floats: [] 27 | m_Colors: [] 28 | m_BuildTextureStacks: [] 29 | -------------------------------------------------------------------------------- /Assets/11StreamLine/SourceVortex/SourceVortexMat.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 92c96d85d3be29f49b28d1974974c856 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/11StreamLine/SourceVortex/SourceVortexShader.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f95a9adaa5a40704db2245fe7dc9df84 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/11StreamLine/VortexPanel.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a2a6a9cad706c024e86a3fb198f06f7c 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/11StreamLine/VortexPanel/VPMMat.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 6 6 | m_ObjectHideFlags: 0 7 | m_CorrespondingSourceObject: {fileID: 0} 8 | m_PrefabInstance: {fileID: 0} 9 | m_PrefabAsset: {fileID: 0} 10 | m_Name: VPMMat 11 | m_Shader: {fileID: 4800000, guid: 0c64404f2742ad9418c04b2f80eac807, type: 3} 12 | m_ShaderKeywords: 13 | m_LightmapFlags: 4 14 | m_EnableInstancingVariants: 0 15 | m_DoubleSidedGI: 0 16 | m_CustomRenderQueue: -1 17 | stringTagMap: {} 18 | disabledShaderPasses: [] 19 | m_SavedProperties: 20 | serializedVersion: 3 21 | m_TexEnvs: 22 | - _MainTex: 23 | m_Texture: {fileID: 0} 24 | m_Scale: {x: 1, y: 1} 25 | m_Offset: {x: 0, y: 0} 26 | m_Floats: [] 27 | m_Colors: [] 28 | m_BuildTextureStacks: [] 29 | -------------------------------------------------------------------------------- /Assets/11StreamLine/VortexPanel/VPMMat.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 525146236d1891a4fbd41bc300622b29 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/11StreamLine/VortexPanel/VPManager.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2c1e3185c64301e489735501cccb20f4 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/11StreamLine/VortexPanel/VortexPanel.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 64cb10d9e603da24d85e294cc9be6fca 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/11StreamLine/VortexPanel/VortexStreamLine.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0c64404f2742ad9418c04b2f80eac807 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/12VortexStreet.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2a714e06c82ef0c4aad827c9d1edb46d 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/12VortexStreet/BlackWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clatterrr/FluidSimulationTutorialsUnity/f5d269d57576a7f579a6797f8c74079ff5199baf/Assets/12VortexStreet/BlackWhite.png -------------------------------------------------------------------------------- /Assets/12VortexStreet/Block_KMat.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 6 6 | m_ObjectHideFlags: 0 7 | m_CorrespondingSourceObject: {fileID: 0} 8 | m_PrefabInstance: {fileID: 0} 9 | m_PrefabAsset: {fileID: 0} 10 | m_Name: Block_KMat 11 | m_Shader: {fileID: 4800000, guid: 4f798bbbd5515d549b9453a3cdad2e6d, type: 3} 12 | m_ShaderKeywords: 13 | m_LightmapFlags: 4 14 | m_EnableInstancingVariants: 0 15 | m_DoubleSidedGI: 0 16 | m_CustomRenderQueue: -1 17 | stringTagMap: {} 18 | disabledShaderPasses: [] 19 | m_SavedProperties: 20 | serializedVersion: 3 21 | m_TexEnvs: 22 | - _MainTex: 23 | m_Texture: {fileID: 2800000, guid: 043931c2fbc455b4d904f4ff27be08ca, type: 3} 24 | m_Scale: {x: 1, y: 1} 25 | m_Offset: {x: 0, y: 0} 26 | m_Floats: [] 27 | m_Colors: [] 28 | -------------------------------------------------------------------------------- /Assets/12VortexStreet/Block_KMat.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: eefdfdfe64aa91a4db579811329ebf45 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 2100000 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/12VortexStreet/Shaders.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ca8e516d48f2f3d499f9d6545895a9df 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/12VortexStreet/Shaders/AdvectionDye_K.shader: -------------------------------------------------------------------------------- 1 | Shader "VortexStreet/AdvectionDye_K" 2 | { 3 | Properties 4 | { 5 | _MainTex("Texture", 2D) = "white" {} 6 | VelocityTex("VelocityTex", 2D) = "white" {} 7 | DensityTex("DensityTex", 2D) = "white" {} 8 | InitDyeTex("InitDyeTex", 2D) = "white" {} 9 | BlockTex("BlockTex", 2D) = "white" {} 10 | } 11 | SubShader 12 | { 13 | Tags { "RenderType"="Opaque" } 14 | LOD 100 15 | 16 | Pass 17 | { 18 | CGPROGRAM 19 | #pragma vertex vert 20 | #pragma fragment frag 21 | // make fog work 22 | #pragma multi_compile_fog 23 | 24 | #include "UnityCG.cginc" 25 | 26 | struct appdata 27 | { 28 | float4 vertex : POSITION; 29 | float2 uv : TEXCOORD0; 30 | }; 31 | 32 | struct v2f 33 | { 34 | float2 uv : TEXCOORD0; 35 | UNITY_FOG_COORDS(1) 36 | float4 vertex : SV_POSITION; 37 | }; 38 | 39 | sampler2D VelocityTex; 40 | sampler2D DensityTex; 41 | sampler2D InitDyeTex; 42 | sampler2D BlockTex; 43 | float dt; 44 | sampler2D _MainTex; 45 | float4 _MainTex_ST; 46 | 47 | v2f vert (appdata v) 48 | { 49 | v2f o; 50 | o.vertex = UnityObjectToClipPos(v.vertex); 51 | o.uv = TRANSFORM_TEX(v.uv, _MainTex); 52 | UNITY_TRANSFER_FOG(o,o.vertex); 53 | return o; 54 | } 55 | float4 frag(v2f i) :SV_Target{ 56 | float2 vel = tex2D(VelocityTex, i.uv).xy; 57 | float4 col = tex2D(DensityTex, i.uv - 0.01f*vel); 58 | if(i.uv.x < 0.1f)col = tex2D(InitDyeTex, i.uv); 59 | return col; 60 | } 61 | ENDCG 62 | } 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /Assets/12VortexStreet/Shaders/AdvectionDye_K.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a33d35c66f8798f408b97da5252f1d2c 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/12VortexStreet/Shaders/AdvectionDye_KMat.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 6 6 | m_ObjectHideFlags: 0 7 | m_CorrespondingSourceObject: {fileID: 0} 8 | m_PrefabInstance: {fileID: 0} 9 | m_PrefabAsset: {fileID: 0} 10 | m_Name: AdvectionDye_KMat 11 | m_Shader: {fileID: 4800000, guid: a33d35c66f8798f408b97da5252f1d2c, type: 3} 12 | m_ShaderKeywords: 13 | m_LightmapFlags: 4 14 | m_EnableInstancingVariants: 0 15 | m_DoubleSidedGI: 0 16 | m_CustomRenderQueue: -1 17 | stringTagMap: {} 18 | disabledShaderPasses: [] 19 | m_SavedProperties: 20 | serializedVersion: 3 21 | m_TexEnvs: 22 | - BlockTex: 23 | m_Texture: {fileID: 0} 24 | m_Scale: {x: 1, y: 1} 25 | m_Offset: {x: 0, y: 0} 26 | - DensityTex: 27 | m_Texture: {fileID: 0} 28 | m_Scale: {x: 1, y: 1} 29 | m_Offset: {x: 0, y: 0} 30 | - InitDyeTex: 31 | m_Texture: {fileID: 0} 32 | m_Scale: {x: 1, y: 1} 33 | m_Offset: {x: 0, y: 0} 34 | - VelocityDensityTex: 35 | m_Texture: {fileID: 0} 36 | m_Scale: {x: 1, y: 1} 37 | m_Offset: {x: 0, y: 0} 38 | - VelocityTex: 39 | m_Texture: {fileID: 0} 40 | m_Scale: {x: 1, y: 1} 41 | m_Offset: {x: 0, y: 0} 42 | - _MainTex: 43 | m_Texture: {fileID: 2800000, guid: c4c737e1b9c8e2a42b34e40e2b7fec28, type: 3} 44 | m_Scale: {x: 1, y: 1} 45 | m_Offset: {x: 0, y: 0} 46 | m_Floats: [] 47 | m_Colors: [] 48 | -------------------------------------------------------------------------------- /Assets/12VortexStreet/Shaders/AdvectionDye_KMat.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: cd9674e6455856942bb3de7c2b032558 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 2100000 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/12VortexStreet/Shaders/AdvectionVelocity_K.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 988381cd0a4c92f4b87d9d73b80f52a1 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/12VortexStreet/Shaders/AdvectionVelocity_KMat.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 6 6 | m_ObjectHideFlags: 0 7 | m_CorrespondingSourceObject: {fileID: 0} 8 | m_PrefabInstance: {fileID: 0} 9 | m_PrefabAsset: {fileID: 0} 10 | m_Name: AdvectionVelocity_KMat 11 | m_Shader: {fileID: 4800000, guid: 988381cd0a4c92f4b87d9d73b80f52a1, type: 3} 12 | m_ShaderKeywords: 13 | m_LightmapFlags: 4 14 | m_EnableInstancingVariants: 0 15 | m_DoubleSidedGI: 0 16 | m_CustomRenderQueue: -1 17 | stringTagMap: {} 18 | disabledShaderPasses: [] 19 | m_SavedProperties: 20 | serializedVersion: 3 21 | m_TexEnvs: 22 | - BlockTex: 23 | m_Texture: {fileID: 0} 24 | m_Scale: {x: 1, y: 1} 25 | m_Offset: {x: 0, y: 0} 26 | - VelocityDensityTex: 27 | m_Texture: {fileID: 0} 28 | m_Scale: {x: 1, y: 1} 29 | m_Offset: {x: 0, y: 0} 30 | - VelocityTex: 31 | m_Texture: {fileID: 0} 32 | m_Scale: {x: 1, y: 1} 33 | m_Offset: {x: 0, y: 0} 34 | - _MainTex: 35 | m_Texture: {fileID: 0} 36 | m_Scale: {x: 1, y: 1} 37 | m_Offset: {x: 0, y: 0} 38 | m_Floats: [] 39 | m_Colors: [] 40 | -------------------------------------------------------------------------------- /Assets/12VortexStreet/Shaders/AdvectionVelocity_KMat.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: bfed491c825fe2041a8b67317bfbb78d 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 2100000 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/12VortexStreet/Shaders/Block_K.shader: -------------------------------------------------------------------------------- 1 | Shader "Vortex/Block_K" 2 | { 3 | Properties 4 | { 5 | _MainTex ("Texture", 2D) = "white" {} 6 | } 7 | SubShader 8 | { 9 | Tags { "RenderType"="Opaque" } 10 | LOD 100 11 | 12 | Pass 13 | { 14 | CGPROGRAM 15 | #pragma vertex vert 16 | #pragma fragment frag 17 | // make fog work 18 | #pragma multi_compile_fog 19 | 20 | #include "UnityCG.cginc" 21 | 22 | struct appdata 23 | { 24 | float4 vertex : POSITION; 25 | float2 uv : TEXCOORD0; 26 | }; 27 | 28 | struct v2f 29 | { 30 | float2 uv : TEXCOORD0; 31 | UNITY_FOG_COORDS(1) 32 | float4 vertex : SV_POSITION; 33 | }; 34 | 35 | sampler2D _MainTex; 36 | float4 _MainTex_ST; 37 | 38 | v2f vert (appdata v) 39 | { 40 | v2f o; 41 | o.vertex = UnityObjectToClipPos(v.vertex); 42 | o.uv = TRANSFORM_TEX(v.uv, _MainTex); 43 | UNITY_TRANSFER_FOG(o,o.vertex); 44 | return o; 45 | } 46 | 47 | fixed4 frag (v2f i) : SV_Target 48 | { 49 | // sample the texture 50 | fixed4 col = tex2D(_MainTex, i.uv); 51 | // apply fog 52 | UNITY_APPLY_FOG(i.fogCoord, col); 53 | return col; 54 | } 55 | ENDCG 56 | } 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /Assets/12VortexStreet/Shaders/Block_K.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4f798bbbd5515d549b9453a3cdad2e6d 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/12VortexStreet/Shaders/DisplayRainow.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ced04864e3ca19148a8ead1d4da63aff 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/12VortexStreet/Shaders/DisplayRainowMat.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 6 6 | m_ObjectHideFlags: 0 7 | m_CorrespondingSourceObject: {fileID: 0} 8 | m_PrefabInstance: {fileID: 0} 9 | m_PrefabAsset: {fileID: 0} 10 | m_Name: DisplayRainowMat 11 | m_Shader: {fileID: 4800000, guid: ced04864e3ca19148a8ead1d4da63aff, type: 3} 12 | m_ShaderKeywords: 13 | m_LightmapFlags: 4 14 | m_EnableInstancingVariants: 0 15 | m_DoubleSidedGI: 0 16 | m_CustomRenderQueue: -1 17 | stringTagMap: {} 18 | disabledShaderPasses: [] 19 | m_SavedProperties: 20 | serializedVersion: 3 21 | m_TexEnvs: 22 | - BlockTex: 23 | m_Texture: {fileID: 0} 24 | m_Scale: {x: 1, y: 1} 25 | m_Offset: {x: 0, y: 0} 26 | - _MainTex: 27 | m_Texture: {fileID: 0} 28 | m_Scale: {x: 1, y: 1} 29 | m_Offset: {x: 0, y: 0} 30 | m_Floats: [] 31 | m_Colors: [] 32 | -------------------------------------------------------------------------------- /Assets/12VortexStreet/Shaders/DisplayRainowMat.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b211a9984203fd14d99f85a2cc9476f8 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 2100000 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/12VortexStreet/Shaders/Display_K.shader: -------------------------------------------------------------------------------- 1 | Shader "VortexStreet/Display_K" 2 | { 3 | Properties 4 | { 5 | _MainTex ("Texture", 2D) = "white" {} 6 | BlockTex("BlockTex", 2D) = "white" {} 7 | } 8 | SubShader 9 | { 10 | Tags { "RenderType"="Opaque" } 11 | LOD 100 12 | 13 | Pass 14 | { 15 | CGPROGRAM 16 | #pragma vertex vert 17 | #pragma fragment frag 18 | // make fog work 19 | #pragma multi_compile_fog 20 | 21 | #include "UnityCG.cginc" 22 | 23 | struct appdata 24 | { 25 | float4 vertex : POSITION; 26 | float2 uv : TEXCOORD0; 27 | }; 28 | 29 | struct v2f 30 | { 31 | float2 uv : TEXCOORD0; 32 | UNITY_FOG_COORDS(1) 33 | float4 vertex : SV_POSITION; 34 | }; 35 | 36 | sampler2D _MainTex; 37 | float4 _MainTex_ST; 38 | sampler2D BlockTex; 39 | 40 | v2f vert (appdata v) 41 | { 42 | v2f o; 43 | o.vertex = UnityObjectToClipPos(v.vertex); 44 | o.uv = TRANSFORM_TEX(v.uv, _MainTex); 45 | UNITY_TRANSFER_FOG(o,o.vertex); 46 | return o; 47 | } 48 | 49 | fixed4 frag (v2f i) : SV_Target 50 | { 51 | fixed4 col = tex2D(_MainTex, i.uv); 52 | 53 | if (tex2D(BlockTex, i.uv).x > 0.9f)col.xyz = float3(0.9f, 0.5f,0.0f); 54 | //float2 dir = i.uv - float2(0.3f, 0.5f); 55 | //float dis = dir.x*dir.x + dir.y*dir.y; 56 | //if (dis < 0.001f)col.xyz = float3(0.9f, 0.5f, 0.0f); 57 | return col; 58 | } 59 | ENDCG 60 | } 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /Assets/12VortexStreet/Shaders/Display_K.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 051c991fe72493f46aca078ea7ebbef3 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/12VortexStreet/Shaders/Display_KMat.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 6 6 | m_ObjectHideFlags: 0 7 | m_CorrespondingSourceObject: {fileID: 0} 8 | m_PrefabInstance: {fileID: 0} 9 | m_PrefabAsset: {fileID: 0} 10 | m_Name: Display_KMat 11 | m_Shader: {fileID: 4800000, guid: 051c991fe72493f46aca078ea7ebbef3, type: 3} 12 | m_ShaderKeywords: 13 | m_LightmapFlags: 4 14 | m_EnableInstancingVariants: 0 15 | m_DoubleSidedGI: 0 16 | m_CustomRenderQueue: -1 17 | stringTagMap: {} 18 | disabledShaderPasses: [] 19 | m_SavedProperties: 20 | serializedVersion: 3 21 | m_TexEnvs: 22 | - BlockTex: 23 | m_Texture: {fileID: 0} 24 | m_Scale: {x: 1, y: 1} 25 | m_Offset: {x: 0, y: 0} 26 | - _MainTex: 27 | m_Texture: {fileID: 0} 28 | m_Scale: {x: 1, y: 1} 29 | m_Offset: {x: 0, y: 0} 30 | m_Floats: [] 31 | m_Colors: [] 32 | -------------------------------------------------------------------------------- /Assets/12VortexStreet/Shaders/Display_KMat.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ffff3f3ba1de2df439bdcbd3f37eb086 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 2100000 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/12VortexStreet/Shaders/InitDye_K.shader: -------------------------------------------------------------------------------- 1 | Shader "VortexStreet/InitDye_K" 2 | { 3 | Properties 4 | { 5 | _MainTex ("Texture", 2D) = "white" {} 6 | } 7 | SubShader 8 | { 9 | Tags { "RenderType"="Opaque" } 10 | LOD 100 11 | 12 | Pass 13 | { 14 | CGPROGRAM 15 | #pragma vertex vert 16 | #pragma fragment frag 17 | // make fog work 18 | #pragma multi_compile_fog 19 | 20 | #include "UnityCG.cginc" 21 | 22 | struct appdata 23 | { 24 | float4 vertex : POSITION; 25 | float2 uv : TEXCOORD0; 26 | }; 27 | 28 | struct v2f 29 | { 30 | float2 uv : TEXCOORD0; 31 | UNITY_FOG_COORDS(1) 32 | float4 vertex : SV_POSITION; 33 | }; 34 | 35 | sampler2D _MainTex; 36 | float4 _MainTex_ST; 37 | 38 | v2f vert (appdata v) 39 | { 40 | v2f o; 41 | o.vertex = UnityObjectToClipPos(v.vertex); 42 | o.uv = TRANSFORM_TEX(v.uv, _MainTex); 43 | UNITY_TRANSFER_FOG(o,o.vertex); 44 | return o; 45 | } 46 | 47 | fixed4 frag (v2f i) : SV_Target 48 | { 49 | // sample the texture 50 | fixed4 col = tex2D(_MainTex, i.uv); 51 | // apply fog 52 | UNITY_APPLY_FOG(i.fogCoord, col); 53 | return col; 54 | } 55 | ENDCG 56 | } 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /Assets/12VortexStreet/Shaders/InitDye_K.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8daee9e2b2c67804d93cd1a7747fba94 3 | ShaderImporter: 4 | externalObjects: {} 5 | defaultTextures: [] 6 | nonModifiableTextures: [] 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/12VortexStreet/Shaders/InitDye_KMat.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 6 6 | m_ObjectHideFlags: 0 7 | m_CorrespondingSourceObject: {fileID: 0} 8 | m_PrefabInstance: {fileID: 0} 9 | m_PrefabAsset: {fileID: 0} 10 | m_Name: InitDye_KMat 11 | m_Shader: {fileID: 4800000, guid: 8daee9e2b2c67804d93cd1a7747fba94, type: 3} 12 | m_ShaderKeywords: 13 | m_LightmapFlags: 4 14 | m_EnableInstancingVariants: 0 15 | m_DoubleSidedGI: 0 16 | m_CustomRenderQueue: -1 17 | stringTagMap: {} 18 | disabledShaderPasses: [] 19 | m_SavedProperties: 20 | serializedVersion: 3 21 | m_TexEnvs: 22 | - _MainTex: 23 | m_Texture: {fileID: 2800000, guid: c4c737e1b9c8e2a42b34e40e2b7fec28, type: 3} 24 | m_Scale: {x: 1, y: 1} 25 | m_Offset: {x: 0, y: 0} 26 | m_Floats: [] 27 | m_Colors: [] 28 | -------------------------------------------------------------------------------- /Assets/12VortexStreet/Shaders/InitDye_KMat.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: aad81fb25e703b440b207aafafea1d9b 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 2100000 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/12VortexStreet/VortexGenerator.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clatterrr/FluidSimulationTutorialsUnity/f5d269d57576a7f579a6797f8c74079ff5199baf/Assets/12VortexStreet/VortexGenerator.jpg -------------------------------------------------------------------------------- /Assets/12VortexStreet/VortexStreet.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6e0900f8d2c6f8b41811b13019d19801 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/12VortexStreet/VortexStreetManager.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d491175125a6b0c43a104c2df3b64329 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/12VortexStreet/airfoil.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clatterrr/FluidSimulationTutorialsUnity/f5d269d57576a7f579a6797f8c74079ff5199baf/Assets/12VortexStreet/airfoil.jpg -------------------------------------------------------------------------------- /Assets/12VortexStreet/car.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clatterrr/FluidSimulationTutorialsUnity/f5d269d57576a7f579a6797f8c74079ff5199baf/Assets/12VortexStreet/car.jpg -------------------------------------------------------------------------------- /Assets/12VortexStreet/cylinder.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clatterrr/FluidSimulationTutorialsUnity/f5d269d57576a7f579a6797f8c74079ff5199baf/Assets/12VortexStreet/cylinder.jpg -------------------------------------------------------------------------------- /Assets/12VortexStreet/plane.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clatterrr/FluidSimulationTutorialsUnity/f5d269d57576a7f579a6797f8c74079ff5199baf/Assets/12VortexStreet/plane.jpg -------------------------------------------------------------------------------- /Assets/12VortexStreet/square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clatterrr/FluidSimulationTutorialsUnity/f5d269d57576a7f579a6797f8c74079ff5199baf/Assets/12VortexStreet/square.jpg -------------------------------------------------------------------------------- /Assets/15FiniteElement.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 59484b4b7df03f042ac985428c7aaef0 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/15FiniteElement/AdvancingFront.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: fbec89365db64894da26fb7a1ec51b64 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/15FiniteElement/AdvancingFront/Sphere.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6e7a038a8674e2440afcf32031ea12ee 3 | PrefabImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/15FiniteElement/AdvancingFront/ad.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 843a55a5e3c24e247be79ef47007573a 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/15FiniteElement/AdvancingFront/advancingMananger.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: da9127b6cbaf5c14daa253896750285e 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/15FiniteElement/FEMcompare.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e9bf76b6389c66d4e9ffbcb9c296d3f3 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/15FiniteElement/FEMcompare/CompareManager.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b0d045577a2cb5e4db1204c51049c9ae 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/15FiniteElement/FEMcompare/Sphere.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 19582458a5887e24c96312a58f9a3813 3 | PrefabImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/15FiniteElement/FEMcompare/femdamp.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c2550460aab61324eb12a98a44f2aaf3 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/15FiniteElement/FEMcompare/fempoisson.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f106808179e4be14a870c83881bc8f07 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/15FiniteElement/FEMcompare/femyoung.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 09922697f74e5ff4b89fddcbabe08fb7 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/15FiniteElement/FEMjelly.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 39f468424f131f046a0f538f3a6bff32 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/15FiniteElement/FEMjelly/jelly.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: cbb47d868d45f9f4dbee5c82cbbef5df 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/15FiniteElement/FEMjelly/jellyManager.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: badae83ec43ba3b479a71efdb52c1eee 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/15FiniteElement/FEMjelly/jellyMat.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ad1c34e823362a842982f181f30bdfe8 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 2100000 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/16NewtonMethod.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 562730bef9a0f7f40907c895b5a9eddb 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/16NewtonMethod/Sphere.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3b9680fe0c37ab24a82c761f2e950281 3 | PrefabImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/16NewtonMethod/newton.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9105e729a9c67114594fd96398b87000 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/16NewtonMethod/newtonSphere.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.Collections.Generic; 3 | using UnityEngine; 4 | 5 | public class newtonSphere : MonoBehaviour 6 | { 7 | public GameObject spherefab; 8 | private GameObject ball; 9 | private int NowFrame = 0; 10 | float valx = 15, valy = 15;//最初猜的值 11 | void Start() 12 | { 13 | ball = Instantiate(spherefab, new Vector3(valx, Fun(0, valx, valy) * 0.001f, valy), Quaternion.identity); 14 | } 15 | float Fun(float n, float x, float y) 16 | { 17 | if (n == 0) return (x + 2 * y) * (5 * x + 6 * y) + x - 432; 18 | else return -2 * (x + 2 * y) * (5 * x + 6 * y) + y + 854; 19 | } 20 | void Update() 21 | { 22 | NowFrame++; 23 | if (NowFrame < 60) return; 24 | float a = (Fun(0, valx + 1, valy) - Fun(0, valx - 1, valy)) / 2; 25 | float b = (Fun(0, valx, valy + 1) - Fun(0, valx, valy - 1)) / 2; 26 | float c = (Fun(1, valx + 1, valy) - Fun(1, valx - 1, valy)) / 2; 27 | float d = (Fun(1, valx, valy + 1) - Fun(1, valx, valy - 1)) / 2; 28 | float e = Fun(0, valx, valy); 29 | float f = Fun(1, valx, valy); 30 | float div = 1 / (a * d - b * c); 31 | float speed = 0.1f; 32 | valx = valx - speed * (d * e - b * f) * div; 33 | valy = valy - speed * (-c * e + a * f) * div; 34 | ball.transform.position = new Vector3(valx, Fun(0, valx, valy) * 0.001f, valy); 35 | Debug.Log("x = " + valx + " y = " + valy); 36 | 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /Assets/16NewtonMethod/newtonSphere.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5172f897cb89e094e8a8f64d39b8a9c2 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/16NewtonMethod/sur1.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a20bfa2a87fbcba4facafa29432a8640 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 2100000 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/16NewtonMethod/sur2.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ad9a2524fd0fdba4cbd56383bc9e7927 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 2100000 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/16NewtonMethod/surface.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6d838164d856f12459843c8200966922 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Scenes.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4b15302617e60124597b55e46f470d38 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Scenes/SampleScene.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9fc0d4010bbf28b4594072e72b8655ab 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /ProjectSettings/AudioManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!11 &1 4 | AudioManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Volume: 1 8 | Rolloff Scale: 1 9 | Doppler Factor: 1 10 | Default Speaker Mode: 2 11 | m_SampleRate: 0 12 | m_DSPBufferSize: 1024 13 | m_VirtualVoiceCount: 512 14 | m_RealVoiceCount: 32 15 | m_SpatializerPlugin: 16 | m_AmbisonicDecoderPlugin: 17 | m_DisableAudio: 0 18 | m_VirtualizeEffects: 1 19 | m_RequestedDSPBufferSize: 1024 20 | -------------------------------------------------------------------------------- /ProjectSettings/ClusterInputManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!236 &1 4 | ClusterInputManager: 5 | m_ObjectHideFlags: 0 6 | m_Inputs: [] 7 | -------------------------------------------------------------------------------- /ProjectSettings/DynamicsManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!55 &1 4 | PhysicsManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 11 7 | m_Gravity: {x: 0, y: -9.81, z: 0} 8 | m_DefaultMaterial: {fileID: 0} 9 | m_BounceThreshold: 2 10 | m_SleepThreshold: 0.005 11 | m_DefaultContactOffset: 0.01 12 | m_DefaultSolverIterations: 6 13 | m_DefaultSolverVelocityIterations: 1 14 | m_QueriesHitBackfaces: 0 15 | m_QueriesHitTriggers: 1 16 | m_EnableAdaptiveForce: 0 17 | m_ClothInterCollisionDistance: 0 18 | m_ClothInterCollisionStiffness: 0 19 | m_ContactsGeneration: 1 20 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 21 | m_AutoSimulation: 1 22 | m_AutoSyncTransforms: 0 23 | m_ReuseCollisionCallbacks: 1 24 | m_ClothInterCollisionSettingsToggle: 0 25 | m_ContactPairsMode: 0 26 | m_BroadphaseType: 0 27 | m_WorldBounds: 28 | m_Center: {x: 0, y: 0, z: 0} 29 | m_Extent: {x: 250, y: 250, z: 250} 30 | m_WorldSubdivisions: 8 31 | m_FrictionType: 0 32 | m_EnableEnhancedDeterminism: 0 33 | m_EnableUnifiedHeightmaps: 1 34 | m_DefaultMaxAngluarSpeed: 7 35 | -------------------------------------------------------------------------------- /ProjectSettings/EditorBuildSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1045 &1 4 | EditorBuildSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Scenes: [] 8 | m_configObjects: {} 9 | -------------------------------------------------------------------------------- /ProjectSettings/EditorSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!159 &1 4 | EditorSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 9 7 | m_ExternalVersionControlSupport: Hidden Meta Files 8 | m_SerializationMode: 2 9 | m_LineEndingsForNewScripts: 0 10 | m_DefaultBehaviorMode: 0 11 | m_PrefabRegularEnvironment: {fileID: 0} 12 | m_PrefabUIEnvironment: {fileID: 0} 13 | m_SpritePackerMode: 0 14 | m_SpritePackerPaddingPower: 1 15 | m_EtcTextureCompressorBehavior: 1 16 | m_EtcTextureFastCompressor: 1 17 | m_EtcTextureNormalCompressor: 2 18 | m_EtcTextureBestCompressor: 4 19 | m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd;asmdef;rsp;asmref 20 | m_ProjectGenerationRootNamespace: 21 | m_CollabEditorSettings: 22 | inProgressEnabled: 1 23 | m_EnableTextureStreamingInEditMode: 1 24 | m_EnableTextureStreamingInPlayMode: 1 25 | m_AsyncShaderCompilation: 1 26 | m_EnterPlayModeOptionsEnabled: 0 27 | m_EnterPlayModeOptions: 3 28 | m_ShowLightmapResolutionOverlay: 1 29 | m_UseLegacyProbeSampleCount: 0 30 | m_AssetPipelineMode: 1 31 | m_CacheServerMode: 0 32 | m_CacheServerEndpoint: 33 | m_CacheServerNamespacePrefix: default 34 | m_CacheServerEnableDownload: 1 35 | m_CacheServerEnableUpload: 1 36 | -------------------------------------------------------------------------------- /ProjectSettings/NavMeshAreas.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!126 &1 4 | NavMeshProjectSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | areas: 8 | - name: Walkable 9 | cost: 1 10 | - name: Not Walkable 11 | cost: 1 12 | - name: Jump 13 | cost: 2 14 | - name: 15 | cost: 1 16 | - name: 17 | cost: 1 18 | - name: 19 | cost: 1 20 | - name: 21 | cost: 1 22 | - name: 23 | cost: 1 24 | - name: 25 | cost: 1 26 | - name: 27 | cost: 1 28 | - name: 29 | cost: 1 30 | - name: 31 | cost: 1 32 | - name: 33 | cost: 1 34 | - name: 35 | cost: 1 36 | - name: 37 | cost: 1 38 | - name: 39 | cost: 1 40 | - name: 41 | cost: 1 42 | - name: 43 | cost: 1 44 | - name: 45 | cost: 1 46 | - name: 47 | cost: 1 48 | - name: 49 | cost: 1 50 | - name: 51 | cost: 1 52 | - name: 53 | cost: 1 54 | - name: 55 | cost: 1 56 | - name: 57 | cost: 1 58 | - name: 59 | cost: 1 60 | - name: 61 | cost: 1 62 | - name: 63 | cost: 1 64 | - name: 65 | cost: 1 66 | - name: 67 | cost: 1 68 | - name: 69 | cost: 1 70 | - name: 71 | cost: 1 72 | m_LastAgentTypeID: -887442657 73 | m_Settings: 74 | - serializedVersion: 2 75 | agentTypeID: 0 76 | agentRadius: 0.5 77 | agentHeight: 2 78 | agentSlope: 45 79 | agentClimb: 0.75 80 | ledgeDropHeight: 0 81 | maxJumpAcrossDistance: 0 82 | minRegionArea: 2 83 | manualCellSize: 0 84 | cellSize: 0.16666667 85 | manualTileSize: 0 86 | tileSize: 256 87 | accuratePlacement: 0 88 | debug: 89 | m_Flags: 0 90 | m_SettingNames: 91 | - Humanoid 92 | -------------------------------------------------------------------------------- /ProjectSettings/PackageManagerSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!114 &1 4 | MonoBehaviour: 5 | m_ObjectHideFlags: 61 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_GameObject: {fileID: 0} 10 | m_Enabled: 1 11 | m_EditorHideFlags: 0 12 | m_Script: {fileID: 13964, guid: 0000000000000000e000000000000000, type: 0} 13 | m_Name: 14 | m_EditorClassIdentifier: 15 | m_EnablePreviewPackages: 0 16 | m_EnablePackageDependencies: 0 17 | m_AdvancedSettingsExpanded: 1 18 | m_ScopedRegistriesSettingsExpanded: 1 19 | oneTimeWarningShown: 0 20 | m_Registries: 21 | - m_Id: main 22 | m_Name: 23 | m_Url: https://packages.unity.cn 24 | m_Scopes: [] 25 | m_IsDefault: 1 26 | m_Capabilities: 7 27 | m_UserSelectedRegistryName: 28 | m_UserAddingNewScopedRegistry: 0 29 | m_RegistryInfoDraft: 30 | m_ErrorMessage: 31 | m_Original: 32 | m_Id: 33 | m_Name: 34 | m_Url: 35 | m_Scopes: [] 36 | m_IsDefault: 0 37 | m_Capabilities: 0 38 | m_Modified: 0 39 | m_Name: 40 | m_Url: 41 | m_Scopes: 42 | - 43 | m_SelectedScopeIndex: 0 44 | -------------------------------------------------------------------------------- /ProjectSettings/PresetManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1386491679 &1 4 | PresetManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_DefaultPresets: {} 8 | -------------------------------------------------------------------------------- /ProjectSettings/ProjectVersion.txt: -------------------------------------------------------------------------------- 1 | m_EditorVersion: 2019.4.21f1c1 2 | m_EditorVersionWithRevision: 2019.4.21f1c1 (7fef87dbc35f) 3 | -------------------------------------------------------------------------------- /ProjectSettings/TagManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!78 &1 4 | TagManager: 5 | serializedVersion: 2 6 | tags: [] 7 | layers: 8 | - Default 9 | - TransparentFX 10 | - Ignore Raycast 11 | - 12 | - Water 13 | - UI 14 | - 15 | - 16 | - 17 | - 18 | - 19 | - 20 | - 21 | - 22 | - 23 | - 24 | - 25 | - 26 | - 27 | - 28 | - 29 | - 30 | - 31 | - 32 | - 33 | - 34 | - 35 | - 36 | - 37 | - 38 | - 39 | - 40 | m_SortingLayers: 41 | - name: Default 42 | uniqueID: 0 43 | locked: 0 44 | -------------------------------------------------------------------------------- /ProjectSettings/TimeManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!5 &1 4 | TimeManager: 5 | m_ObjectHideFlags: 0 6 | Fixed Timestep: 0.02 7 | Maximum Allowed Timestep: 0.33333334 8 | m_TimeScale: 1 9 | Maximum Particle Timestep: 0.03 10 | -------------------------------------------------------------------------------- /ProjectSettings/UnityConnectSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!310 &1 4 | UnityConnectSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 1 7 | m_Enabled: 0 8 | m_TestMode: 0 9 | m_EventOldUrl: https://api.uca.cloud.unity3d.com/v1/events 10 | m_EventUrl: https://cdp.cloud.unity3d.com/v1/events 11 | m_ConfigUrl: https://config.uca.cloud.unity3d.com 12 | m_TestInitMode: 0 13 | CrashReportingSettings: 14 | m_EventUrl: https://perf-events.cloud.unity.cn 15 | m_Enabled: 0 16 | m_LogBufferSize: 10 17 | m_CaptureEditorExceptions: 1 18 | UnityPurchasingSettings: 19 | m_Enabled: 0 20 | m_TestMode: 0 21 | UnityAnalyticsSettings: 22 | m_Enabled: 0 23 | m_TestMode: 0 24 | m_InitializeOnStartup: 1 25 | UnityAdsSettings: 26 | m_Enabled: 0 27 | m_InitializeOnStartup: 1 28 | m_TestMode: 0 29 | m_IosGameId: 30 | m_AndroidGameId: 31 | m_GameIds: {} 32 | m_GameId: 33 | PerformanceReportingSettings: 34 | m_Enabled: 0 35 | -------------------------------------------------------------------------------- /ProjectSettings/VFXManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!937362698 &1 4 | VFXManager: 5 | m_ObjectHideFlags: 0 6 | m_IndirectShader: {fileID: 0} 7 | m_CopyBufferShader: {fileID: 0} 8 | m_SortShader: {fileID: 0} 9 | m_StripUpdateShader: {fileID: 0} 10 | m_RenderPipeSettingsPath: 11 | m_FixedTimeStep: 0.016666668 12 | m_MaxDeltaTime: 0.05 13 | -------------------------------------------------------------------------------- /ProjectSettings/VersionControlSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!890905787 &1 4 | VersionControlSettings: 5 | m_ObjectHideFlags: 0 6 | m_Mode: Visible Meta Files 7 | m_CollabEditorSettings: 8 | inProgressEnabled: 1 9 | -------------------------------------------------------------------------------- /ProjectSettings/XRSettings.asset: -------------------------------------------------------------------------------- 1 | { 2 | "m_SettingKeys": [ 3 | "VR Device Disabled", 4 | "VR Device User Alert" 5 | ], 6 | "m_SettingValues": [ 7 | "False", 8 | "False" 9 | ] 10 | } -------------------------------------------------------------------------------- /images/ch03WaveEquation.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clatterrr/FluidSimulationTutorialsUnity/f5d269d57576a7f579a6797f8c74079ff5199baf/images/ch03WaveEquation.PNG -------------------------------------------------------------------------------- /images/ch05EulerEquation.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clatterrr/FluidSimulationTutorialsUnity/f5d269d57576a7f579a6797f8c74079ff5199baf/images/ch05EulerEquation.PNG -------------------------------------------------------------------------------- /images/ch06NavierStokes.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clatterrr/FluidSimulationTutorialsUnity/f5d269d57576a7f579a6797f8c74079ff5199baf/images/ch06NavierStokes.PNG -------------------------------------------------------------------------------- /images/ch09ShallowWater.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clatterrr/FluidSimulationTutorialsUnity/f5d269d57576a7f579a6797f8c74079ff5199baf/images/ch09ShallowWater.PNG -------------------------------------------------------------------------------- /images/ch10smoke2d.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clatterrr/FluidSimulationTutorialsUnity/f5d269d57576a7f579a6797f8c74079ff5199baf/images/ch10smoke2d.PNG -------------------------------------------------------------------------------- /images/ch11SourceSink.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clatterrr/FluidSimulationTutorialsUnity/f5d269d57576a7f579a6797f8c74079ff5199baf/images/ch11SourceSink.PNG -------------------------------------------------------------------------------- /images/ch12VortexStreet.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clatterrr/FluidSimulationTutorialsUnity/f5d269d57576a7f579a6797f8c74079ff5199baf/images/ch12VortexStreet.PNG -------------------------------------------------------------------------------- /images/ch15jelly.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clatterrr/FluidSimulationTutorialsUnity/f5d269d57576a7f579a6797f8c74079ff5199baf/images/ch15jelly.PNG -------------------------------------------------------------------------------- /images/ch15meshgen.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clatterrr/FluidSimulationTutorialsUnity/f5d269d57576a7f579a6797f8c74079ff5199baf/images/ch15meshgen.PNG -------------------------------------------------------------------------------- /python/Compressible/ShockTubeVanleer.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | #Lax-Friedriches For 1d Shock Tube 3 | tmax = 1000 4 | nmax = 12 5 | 6 | 7 | 8 | rho = np.zeros((tmax,nmax))#密度 9 | u = np.zeros((tmax,nmax))#速度 10 | E = np.zeros((tmax,nmax))#能量 11 | p = np.zeros((tmax,nmax))#压力 12 | e = np.zeros((tmax,nmax)) 13 | a = np.zeros((tmax,nmax))#声速 14 | H = np.zeros((tmax,nmax))#焓变 15 | 16 | U1 = np.zeros((tmax,nmax))#rho 17 | U2 = np.zeros((tmax,nmax))#rho*u 18 | U3 = np.zeros((tmax,nmax))#rho*E 19 | 20 | F1 = np.zeros((tmax,nmax))#rho 21 | F2 = np.zeros((tmax,nmax))#rho*u 22 | F3 = np.zeros((tmax,nmax))#rho*E 23 | 24 | f1 = np.zeros((tmax,nmax+1))#rho 25 | f2 = np.zeros((tmax,nmax+1))#rho*u 26 | f3 = np.zeros((tmax,nmax+1))#rho*E 27 | 28 | gamma = 1.4 29 | dt = 1 30 | dx = 0.2 31 | cfl = 0.9 32 | 33 | for i in range(0,nmax): 34 | if(i < nmax/2): 35 | rho[0,i] = 1 36 | p[0,i] = 1 37 | else: 38 | rho[0,i] = 0.125 39 | p[0,i] = 0.1 40 | 41 | for i in range(0,nmax): 42 | U1[0,i] = rho[0,i] 43 | U2[0,i] = rho[0,i]*u[0,i] 44 | #E = p ./ ((gamma-1) * rho) + u.^2/2; 45 | E[0,i] = p[0,i]/((gamma-1)*rho[0,i]) + u[0,i]*u[0,i]/2 46 | U3[0,i] = rho[0,i]*E[0,i] 47 | 48 | for t in range(0,tmax-2): 49 | 50 | 51 | for i in range(0,nmax): 52 | rho[t,i] = U1[t,i] 53 | u[t,i] = U2[t,i]/rho[t,i] 54 | E[t,i] = U3[t,i]/rho[t,i] 55 | p[t,i] = (gamma-1)*(E[t,i] - u[t,i]*u[t,i]/2)*rho[t,i] 56 | e[t,i] = p[t,i]/(gamma-1)/rho[t,i] 57 | a[t,i] = np.sqrt(gamma * p[t,i]/rho[t,i]) 58 | H[t,i] = (p[t,i] * gamma)/((gamma-1) * rho[t,i]) + u[t,i]*u[t,i]/2 59 | 60 | F1[t,i] = rho[t,i]*u[t,i] 61 | F2[t,i] = rho[t,i]*u[t,i]*u[t,i]+p[t,i] 62 | F3[t,i] = rho[t,i]*u[t,i]*H[t,i] 63 | 64 | smax = max(abs(u[t,:] + np.sqrt(gamma * p[t,:]/rho[t,:]))) 65 | dt = dx * cfl/smax -------------------------------------------------------------------------------- /python/ElectricMagnetic/lorenz.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | v0 = np.array([1.508870,-1.531271,25.46091]) 3 | sigma = 10 4 | beta = 8 / 3 5 | rho = 28 6 | H = np.array([1,0,0]) 7 | imQ = 10 # Variance of the model error 8 | R = 1 # Variance of the data error 9 | Qinit = 100 # Variance of the initial condition 10 | ncycle = 100 11 | Dt = 1 12 | nbv = 1000 13 | which = 1 14 | -------------------------------------------------------------------------------- /python/FiniteDifference/LinearConvection2d.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | ''' 3 | 二阶精度的线性对流方程,有限差分法 4 | 使用二阶龙格库塔,也就是二阶泰勒公式 5 | ''' 6 | nmax = 8 7 | mmax = 8 8 | f = np.zeros((nmax,mmax)) 9 | for i in range(nmax): 10 | for j in range(mmax): 11 | f[i,j] = i * i + j * j * 3 - 2 * i * j - 5 * i + 7 * j + 5 12 | 13 | dt = 0.5 14 | tmax = 10 15 | u = 1 16 | v = 1 17 | dx = np.zeros((nmax,mmax)) 18 | dy = np.zeros((nmax,mmax)) 19 | ft = np.zeros((tmax+1,nmax,mmax)) 20 | ft[0,:,:] = f[:,:] 21 | 22 | def RungeKutta(): 23 | for i in range(1,nmax-1): 24 | for j in range(0,mmax): 25 | dx[i,j] = (f[i+1,j] - f[i-1,j])/2 26 | 27 | dx[0,:] = dx[1,:] + (dx[1,:] - dx[2,:]) 28 | dx[nmax-1,:] = dx[nmax-2,:] + (dx[nmax-2,:] - dx[nmax-3,:]) 29 | for i in range(0,nmax): 30 | for j in range(1,mmax-1): 31 | dy[i,j] = (f[i,j+1] - f[i,j-1])/2 32 | 33 | dy[:,0] = dy[:,1] + (dy[:,1] - dy[:,2]) 34 | dy[:,nmax-1] = dy[:,nmax-2] + (dy[:,nmax-2] - dy[:,nmax-3]) 35 | 36 | for t in range(tmax): 37 | rk0 = f.copy() 38 | RungeKutta() 39 | f = f - dt * (dx*u + dy*v) 40 | RungeKutta() 41 | f = f - dt * (dx*u + dy*v) 42 | rk2 = f.copy() 43 | f = (rk0 + rk2)/2 44 | ft[t+1,:,:] = f[:,:] 45 | -------------------------------------------------------------------------------- /python/FiniteElement/fem1d.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | """ 3 | 有限体积法解一维一元函数,教程及程序作者:光影帽子 4 | https://zhuanlan.zhihu.com/p/358033368 5 | 解的偏微分方程为 dU/dx - a = 0 6 | U为未知变量,a为常数 7 | 8 | """ 9 | 10 | #可以修改的初始值 11 | idx = 1#初始条件,下面两个的意思是U[idx] = value,注意是从零开始 12 | value = 0 13 | a = 2#即上式dU/dx - a = 0中的a 14 | nmax = 8#需要求出的解的数量 15 | 16 | #接下来交给硅基生物完成,你们这些碳基生物快一边凉快去ε=ε=ε=(~ ̄▽ ̄)~ 17 | kmat = np.zeros((nmax,nmax)) 18 | kinv = np.zeros((nmax,nmax)) 19 | bmat = np.zeros((nmax)) 20 | res = np.zeros((nmax)) 21 | for i in range(0,nmax-1): 22 | kmat[i:i+2,i:i+2] += [[-0.5,0.5],[-0.5,0.5]] 23 | bmat[i:i+2] += [a*0.5,a*0.5] 24 | kinv[i,i] = 1 25 | #应用初始条件修改矩阵 26 | kmat[0,:] = 0 27 | kmat[0,idx] = 1 28 | bmat[0] = value 29 | #原矩阵主对角线上大部分都是零,为了方便求解逆矩阵 30 | #因此将原矩阵整体上移循环一位 31 | kmat2 = np.zeros((nmax,nmax)) 32 | kmat = kmat.copy() 33 | kmat2[0:nmax-1,:] = kmat[1:nmax,:] 34 | kmat2[nmax-1,:] = kmat[0,:] 35 | kmat = kmat2.copy() 36 | temp = bmat[0] 37 | for i in range(0,nmax-1): 38 | bmat[i] = bmat[i+1] 39 | bmat[nmax-1] = temp 40 | #消元法求解逆矩阵 41 | for i in range(0,nmax): 42 | temp = kmat[i,i] 43 | for j in range(0,nmax): 44 | kmat[i,j] = kmat[i,j]/temp 45 | kinv[i,j] = kinv[i,j]/temp 46 | for k in range(0,nmax): 47 | if i == k: 48 | continue 49 | mul = kmat[k,i] 50 | for j in range(0,nmax): 51 | kmat[k,j] -= mul*kmat[i,j] 52 | kinv[k,j] -= mul*kinv[i,j] 53 | #求解最后结果 54 | for i in range(0,nmax): 55 | temp = 0 56 | for j in range(0,nmax): 57 | temp += kinv[i,j]*bmat[j] 58 | res[i] = temp 59 | -------------------------------------------------------------------------------- /python/FiniteElement2/datafile/coordinates1.dat: -------------------------------------------------------------------------------- 1 | 0 1 0 2 | 0 1 0.567056 3 | 0.468971 1 0 4 | 0 0.5 0.5 5 | 0 1 1 6 | 0 0.456498 1 7 | 0.502112 1 1 8 | 0 0 0.5 9 | 0.5 0 0.5 10 | 0 0.5 0 11 | 0.5 0.5 0 12 | 0.510866 0 1 13 | 0.5 0.5 0.5 14 | 1 0 0.563143 15 | 0 0 1 16 | 1 0.561972 0 17 | 0.5 0 0 18 | 1 0 0 19 | 1 0.505696 1 20 | 1 1 0 21 | 1 1 0.503135 22 | 1 1 1 23 | 1 0 1 -------------------------------------------------------------------------------- /python/FiniteElement2/datafile/dirichlet1.dat: -------------------------------------------------------------------------------- 1 | 22 19 21 2 | 19 23 14 3 | 14 18 16 4 | 14 16 19 5 | 16 20 21 6 | 19 16 21 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /python/FiniteElement2/datafile/dirichlet2.dat: -------------------------------------------------------------------------------- 1 | 11 153 2 | 153 46 3 | 46 149 4 | 149 7 5 | 7 120 6 | 120 37 7 | 37 116 8 | 116 4 9 | 4 99 10 | 99 31 11 | 31 95 12 | 95 2 13 | 2 90 14 | 90 28 15 | 28 86 16 | 86 1 17 | -------------------------------------------------------------------------------- /python/FiniteElement2/datafile/elements1.dat: -------------------------------------------------------------------------------- 1 | 1 2 4 3 2 | 5 6 2 7 3 | 4 8 9 6 4 | 10 3 4 11 5 | 12 13 14 9 6 | 8 12 6 15 7 | 3 13 11 16 8 | 3 10 4 1 9 | 17 11 13 18 10 | 19 13 14 12 11 | 16 3 21 20 12 | 18 9 13 17 13 | 22 7 21 19 14 | 23 14 12 19 15 | 9 4 6 13 16 | 2 13 7 6 17 | 2 13 3 7 18 | 21 13 3 16 19 | 19 13 16 14 20 | 12 13 6 7 21 | 12 8 6 9 22 | 21 13 7 3 23 | 21 13 19 7 24 | 12 13 9 6 25 | 3 13 4 11 26 | 18 11 13 16 27 | 9 18 13 14 28 | 18 16 13 14 29 | 19 13 12 7 30 | 2 13 4 3 31 | 2 13 6 4 32 | 21 13 16 19 33 | -------------------------------------------------------------------------------- /python/FiniteElement2/datafile/neumann1.dat: -------------------------------------------------------------------------------- 1 | 18 17 11 2 | 20 16 3 3 | 16 18 11 4 | 1 3 10 5 | 11 10 3 6 | 16 11 3 7 | 14 9 18 8 | 23 12 14 9 | 9 14 12 10 | 15 8 12 11 | 17 18 9 12 | 9 12 8 13 | 19 22 7 14 | 23 19 12 15 | 7 5 6 16 | 6 12 7 17 | 15 12 6 18 | 19 7 12 19 | 10 4 11 20 | 13 11 4 21 | 9 17 13 22 | 11 13 17 23 | 8 9 4 24 | 13 4 9 25 | 5 2 6 26 | 10 4 1 27 | 15 6 8 28 | 4 8 6 29 | 4 6 2 30 | 2 1 4 31 | 2 5 7 32 | 1 2 3 33 | 21 3 7 34 | 7 22 21 35 | 20 3 21 36 | 2 7 3 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /python/FiniteElement2/datafile/neumann2.dat: -------------------------------------------------------------------------------- 1 | 1 85 2 | 85 26 3 | 26 87 4 | 87 3 5 | 3 108 6 | 108 33 7 | 33 109 8 | 109 6 9 | 6 141 10 | 141 42 11 | 42 142 12 | 142 10 13 | 10 186 14 | 186 54 15 | 54 187 16 | 187 15 17 | 15 232 18 | 232 66 19 | 66 231 20 | 231 19 21 | 19 263 22 | 263 74 23 | 74 262 24 | 262 22 25 | 22 282 26 | 282 79 27 | 79 281 28 | 281 24 29 | 24 289 30 | 289 81 31 | 81 287 32 | 287 25 33 | 25 286 34 | 286 80 35 | 80 288 36 | 288 23 37 | 23 267 38 | 267 75 39 | 75 269 40 | 269 20 41 | 20 236 42 | 236 67 43 | 67 238 44 | 238 16 45 | 16 196 46 | 196 57 47 | 57 193 48 | 193 11 49 | -------------------------------------------------------------------------------- /python/FiniteElement2/distancesToAir.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clatterrr/FluidSimulationTutorialsUnity/f5d269d57576a7f579a6797f8c74079ff5199baf/python/FiniteElement2/distancesToAir.mat -------------------------------------------------------------------------------- /python/FiniteElement2/distancesToWater.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clatterrr/FluidSimulationTutorialsUnity/f5d269d57576a7f579a6797f8c74079ff5199baf/python/FiniteElement2/distancesToWater.mat -------------------------------------------------------------------------------- /python/FiniteElement2/fem01.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | # 有限元法解决一维结构力学问题, 粒子排布在一水平条线上,仅仅受到垂直方向上重力与弹力的作用 3 | nmax = 5 # 多少个结点 4 | tmax = 100 5 | force = np.zeros((nmax)) # 受到的力 6 | pos = np.zeros((tmax + 1,nmax)) # 位移 7 | vel = np.zeros((tmax + 1,nmax)) # 位移 8 | for i in range(0,nmax): 9 | pos[0,i] = i 10 | Kmat = np.zeros((nmax,nmax)) # 刚度矩阵 11 | gravity = 1 12 | A = 1 # 面积 13 | E = 1 # 杨氏模量 14 | L = 1 # 长度 15 | Damp = 0.2 16 | fixed = np.zeros((nmax)) 17 | fixed[0] = 1 # 1 号节点固定 18 | constrain = np.zeros((nmax,2)) # 自己与哪些节点连接,2意味着左右连接 19 | for i in range(0,nmax): 20 | if i == 0: 21 | constrain[i,0] = -1 22 | else: 23 | constrain[i,0] = i - 1 24 | if i == nmax-1: 25 | constrain[i,1] = -1 26 | else: 27 | constrain[i,1] = i + 1 28 | for t in range(0,tmax): 29 | Kmat[:,:] = 0 30 | force[:] = 0 31 | for i in range(0,nmax): 32 | if fixed[i] == 1: 33 | Kmat[i,i] = 1 34 | force[i] = 0 35 | else: 36 | idx = int(i) 37 | idxleft = int(constrain[i,0]) 38 | idxright = int(constrain[i,1]) 39 | if idxleft >= 0: 40 | Kmat[idx,idx] += A*E/L 41 | Kmat[idx,idxleft] += -A*E/L 42 | force[idx] += (pos[t,idxleft] - pos[t,idx])*E 43 | if idxright >= 0: 44 | Kmat[idx,idx] += A*E/L 45 | Kmat[idx,idxright] += -A*E/L 46 | force[idx] += (pos[t,idxright] - pos[t,idx])*E 47 | force[idx] -= 1 48 | Kinv = np.linalg.inv(Kmat) 49 | for i in range(0,nmax): 50 | summ = 0 51 | for j in range(0,nmax): 52 | summ += Kinv[i,j]*force[j] 53 | # 这个0.8就是阻尼矩阵,作用于速度上。如果为一,那么杆模型将一直上下振动 54 | vel[t+1,i] = (1-Damp)*vel[t,i] + summ 55 | pos[t+1,i] = pos[t,i] + vel[t+1,i] 56 | 57 | -------------------------------------------------------------------------------- /python/FiniteElement2/fluidnodes.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clatterrr/FluidSimulationTutorialsUnity/f5d269d57576a7f579a6797f8c74079ff5199baf/python/FiniteElement2/fluidnodes.mat -------------------------------------------------------------------------------- /python/FiniteElement2/realfem.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | """ 3 | 参考:有限元法与matlab程序设计 郭吉坦 薛齐文 编著 4 | 5 | 本地代码 D:\FluidSim\FluidSim\FEMNEW\有限元与MTALAB程序设计程序文件\有限元与MTALAB程序设计程序文件\matlabfile 6 | 7 | 第七章 杆系结构 8 | """ 9 | E = 2e8 # 弹性模量 kN / m^2 10 | A = 0.006 # 截面面积 m^2 11 | nd = 4 # 节点总数 12 | pos = np.array([[0,0],[2,0],[0,2],[2,2]],dtype = int) 13 | ne = 6 # 单元总数 14 | ele = np.array([[0,1,0],[0,2,0],[0,3,0],[2,1,0],[2,3,0],[1,3,0]]) 15 | ng = 3 # 约束总数 16 | # 节点0的xy的方向都被约束,节点1的y方向被约束 17 | boundary = np.array([[0,1],[0,0],[1,0]]) 18 | nj = 1 # 集中力个数 19 | QJ = np.array([4,1,2]) 20 | Kmat = np.zeros((nd*2,nd*2)) 21 | for i in range(0,ne): 22 | dx = pos[ele[i,1],0] - pos[ele[i,0],0] 23 | dy = pos[ele[i,1],1] - pos[ele[i,0],1] 24 | dis = np.sqrt(dx*dx + dy*dy) 25 | c = dx / dis 26 | s = dy / dis 27 | Ke = np.array([[c*c,c*s,-c*c,-c*s],[c*s,s*s,-c*s,-s*s], 28 | [-c*c,-c*s,c*c,c*s],[-c*s,s*s,c*s,s*s]])*E*A/dis 29 | idx = np.zeros((4),dtype = int) 30 | idx[0] = ele[i,0]*2 # 节点0的x轴 31 | idx[1] = ele[i,0]*2 + 1 # 节点0的y轴 32 | idx[2] = ele[i,1]*2 # 节点1的x轴 33 | idx[3] = ele[i,1]*2 + 1 # 节点1的y轴 34 | for j in range(0,4): 35 | for k in range(0,4): 36 | Kmat[idx[j],idx[k]] += Ke[j,k] 37 | -------------------------------------------------------------------------------- /python/FiniteVolume/RungeKutta2.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | #Runge Kutta二阶 3 | nmax = 16 4 | h = np.zeros((4,nmax)) 5 | k = np.zeros((nmax)) 6 | 7 | for i in range(nmax): 8 | h[0,i] = i*i 9 | 10 | # 因为没有处理边界条件,所以不会把整列都算上 11 | # 计算完成后,h的最后一行的第4列到11列 12 | # 正好就是h的第一行的第3列到第10列 13 | for i in range(2,nmax-2): 14 | #k[i] = 3*i*i 15 | k[i] = (h[0,i-2] - 8*h[0,i-1] + 8*h[0,i+1] -h[0,i+2])/12 16 | h[1,i] = h[0,i] - k[i] 17 | 18 | for i in range(4,nmax-4): 19 | k[i] = (h[1,i-2] - 8*h[1,i-1] + 8*h[1,i+1] -h[1,i+2])/12 20 | h[2,i] = h[1,i] - k[i] 21 | h[3,i] = h[2,i]/2 + h[0,i]/2 22 | 23 | ''' 24 | 25 | \a b c\ \1\ = \1 \ 26 | \0 b 2c\ \1\ = \1 \ 27 | \0 0 c\ \1\ = \1/2\ 28 | 29 | c = 1/2 30 | a = 1/2 31 | ''' 32 | 33 | 34 | -------------------------------------------------------------------------------- /python/FiniteVolume/RungeKutta3.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | #Runge Kutta三阶 3 | nmax = 16 4 | mmax = 12 5 | h = np.zeros((5,nmax)) 6 | k = np.zeros((nmax)) 7 | 8 | for i in range(nmax): 9 | h[0,i] = i*i*i 10 | 11 | # 因为没有处理边界条件,所以不会把整列都算上 12 | # 计算完成后,h的最后一行的第6列到第9列 13 | # 正好就是h的第一行的第五列到第8列 14 | for i in range(2,nmax-2): 15 | #k[i] = 3*i*i 16 | k[i] = (h[0,i-2] - 8*h[0,i-1] + 8*h[0,i+1] -h[0,i+2])/12 17 | h[1,i] = h[0,i] - k[i] 18 | 19 | for i in range(4,nmax-4): 20 | k[i] = (h[1,i-2] - 8*h[1,i-1] + 8*h[1,i+1] -h[1,i+2])/12 21 | h[2,i] = h[1,i] - k[i] 22 | 23 | for i in range(6,nmax-6): 24 | k[i] = (h[2,i-2] - 8*h[2,i-1] + 8*h[2,i+1] -h[2,i+2])/12 25 | h[3,i] = h[2,i] - k[i] 26 | h[4,i] = h[3,i]/6 + h[1,i]/2 + h[0,i]/3 27 | 28 | ''' 29 | \a b c d\ \1\ = \1 \ 30 | \0 b 2c 3d\ \1\ = \1 \ 31 | \0 0 c 3d\ \1\ = \1/2\ 32 | \0 0 0 d\ \1\ = \1/6\ 33 | 34 | 35 | d = 1/6 36 | c = 0 37 | b = 1/2 38 | a = 1/3 39 | 40 | ''' -------------------------------------------------------------------------------- /python/FiniteVolume/RungeKutta4.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | #Runge Kutta四阶 3 | nmax = 20 4 | h = np.zeros((6,nmax)) 5 | k = np.zeros((nmax)) 6 | 7 | for i in range(nmax): 8 | h[0,i] = i*i*i*i 9 | 10 | # 因为没有处理边界条件,所以不会把整列都算上 11 | # 计算完成后,h的最后一行的第8列到第11列 12 | # 正好就是h的第一行的第7列到第10列 13 | for i in range(2,nmax-2): 14 | #k[i] = 3*i*i 15 | k[i] = (h[0,i-2] - 8*h[0,i-1] + 8*h[0,i+1] -h[0,i+2])/12 16 | h[1,i] = h[0,i] - k[i] 17 | 18 | for i in range(4,nmax-4): 19 | k[i] = (h[1,i-2] - 8*h[1,i-1] + 8*h[1,i+1] -h[1,i+2])/12 20 | h[2,i] = h[1,i] - k[i] 21 | 22 | for i in range(6,nmax-6): 23 | k[i] = (h[2,i-2] - 8*h[2,i-1] + 8*h[2,i+1] -h[2,i+2])/12 24 | h[3,i] = h[2,i] - k[i] 25 | 26 | for i in range(8,nmax-8): 27 | k[i] = (h[3,i-2] - 8*h[3,i-1] + 8*h[3,i+1] -h[3,i+2])/12 28 | h[4,i] = h[3,i] - k[i] 29 | h[5,i] = h[4,i]/24 + h[2,i]/4 + h[1,i]/3 + h[0,i]*9/24 30 | 31 | ''' 32 | \a b c d e\ \1\ = \1 \ 33 | \0 b 2c 3d 4e\ \1\ = \1 \ 34 | \0 0 c 3d 6e\ \1\ = \1/2\ 35 | \0 0 0 d 4e\ \1\ = \1/6\ 36 | \0 0 0 0 e\ \1\ = \1/24\ 37 | 38 | e = 1/24 39 | d = 0 40 | c = 1/4 41 | b = 1/3 42 | a = 9/24 43 | 44 | ''' 45 | -------------------------------------------------------------------------------- /python/FiniteVolume/advection.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | #初始条件为一次函数h(x) = -x + 10,速度为常数的有限体积法 3 | nmax = 10 4 | tmax = 50 5 | U = np.zeros((tmax,nmax)) 6 | Uhalf = np.zeros((tmax,nmax+1)) 7 | F = np.zeros((tmax,nmax+1)) 8 | a = 1#速度 9 | dx = 1 10 | for i in range(0,nmax): 11 | U[0,i] = 9.5 - i#piecewise 12 | 13 | for t in range(0,tmax-1): 14 | for i in range(0,nmax-1): 15 | Uhalf[t,i+1] = U[t,i] + (U[t,i+1] - U[t,i])/2/dx 16 | F[t,i+1] = a*Uhalf[t,i+1] 17 | 18 | #边界条件,外插法 19 | Uhalf[t,0] = U[t,0] - (U[t,1] - U[t,0])/2/dx 20 | F[t,0] = a*Uhalf[t,0] 21 | Uhalf[t,nmax] = U[t,nmax-1] + (U[t,nmax-1] - U[t,nmax-2])/2/dx 22 | F[t,nmax] = a*Uhalf[t,nmax] 23 | 24 | for i in range(0,nmax): 25 | U[t+1,i] = U[t,i] + (F[t,i] - F[t,i+1]) -------------------------------------------------------------------------------- /python/FiniteVolume/advectionGodunov.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | #初始条件为二次函数,使用二阶Runge-Kutta加Godunov的有限体积法,精度一阶 3 | nmax = 20 4 | tmax = 50 5 | U = np.zeros((tmax,nmax)) 6 | U2 = np.zeros((nmax)) 7 | Uhalf = np.zeros((tmax,nmax+1)) 8 | F = np.zeros((tmax,nmax+1)) 9 | a = 0.5#速度 10 | dx = 1 11 | b = np.zeros((2,nmax+1)) 12 | for i in range(0,nmax+1): 13 | b[0,i] = -i*i/2 + i*10 14 | b[1,i] = -i*i*i/6 + i*i*5 15 | for i in range(0,nmax): 16 | U[0,i] = b[1,i+1] - b[1,i] 17 | 18 | def godunov(ul,ur): 19 | if (ul > 0)&(ur > 0): 20 | return ul 21 | elif (ur < 0)&(ul < 0): 22 | return ur 23 | elif (ul < 0)&(0 < ur): 24 | return 0 25 | elif (ul > 0)&(0 > ur): 26 | if ((ul + ur)/2)>0: 27 | return ul 28 | else: 29 | return ur 30 | 31 | def rk2(): 32 | for i in range(0,nmax-1): 33 | Uhalf[t,i+1] = godunov(U[t,i],U[t,i+1]) 34 | F[t,i+1] = a*Uhalf[t,i+1] 35 | #边界条件,外插法 36 | Uhalf[t,0] = U[t,0] - (U[t,1] - U[t,0])/2/dx 37 | F[t,0] = a*Uhalf[t,0] 38 | Uhalf[t,nmax] = U[t,nmax-1] + (U[t,nmax-1] - U[t,nmax-2])/2/dx 39 | F[t,nmax] = a*Uhalf[t,nmax] 40 | 41 | 42 | for t in range(0,tmax-1): 43 | 44 | U2[:] = U[t,:] 45 | rk2() 46 | for i in range(0,nmax): 47 | U[t,i] = U[t,i] + (F[t,i] - F[t,i+1]) 48 | 49 | rk2() 50 | for i in range(0,nmax): 51 | U[t+1,i] = (U2[i] + U[t,i] + (F[t,i] - F[t,i+1]))/2 -------------------------------------------------------------------------------- /python/FiniteVolume/advectionLaxFriedrichs.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | #LaxFriedrichs算法,二阶精度。只有当a = 1时才完全准确。其它时候数值耗散很大 3 | nmax = 510 4 | tmax = 1005 5 | U = np.zeros((tmax,nmax)) 6 | f = np.zeros((tmax,nmax+1)) 7 | F = np.zeros((tmax,nmax)) 8 | 9 | a = 0.5#速度 10 | b = np.zeros((2,nmax+1)) 11 | dt = 1 12 | dx = 1 13 | 14 | for i in range(0,nmax+1): 15 | b[0,i] = -i*i/2 + i*10 16 | b[1,i] = -i*i*i*i/6 + i*i*5 17 | j = i + 0.5 18 | #b[1,i] = -j*j*j/6 + j*j*5 19 | for i in range(0,nmax): 20 | if i <= 8: 21 | U[0,i] = -i*i/16 + i 22 | elif i >= 16: 23 | U[0,i] = -(i-8)*(i-8)/16 + (i-8) 24 | else: 25 | U[0,i] = 4 26 | # U[0,i] = -i*i*i/16 + i #原来的真正的二阶函数 27 | 28 | F[0,:] = a*U[0,:] 29 | for t in range(0,tmax-1): 30 | for i in range(0,nmax+1): 31 | if(i == 0): 32 | f[t,i] = F[t,i] 33 | elif(i == nmax): 34 | f[t,i] = F[t,i-1] 35 | else: 36 | f[t,i] = 0.5*(F[t,i] + F[t,i-1]) - 0.5*dx/dt*(U[t,i] - U[t,i-1]) 37 | for i in range(0,nmax): 38 | U[t+1,i] = U[t,i] - dt/dx*(f[t,i+1] - f[t,i]) 39 | F[t+1,:] = a*U[t+1,:] 40 | 41 | -------------------------------------------------------------------------------- /python/FiniteVolume/advectionMUSCL.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | #Muscl minmod 算术平均通量 3 | nmax = 50 4 | tmax = 100 5 | U = np.zeros((tmax,nmax)) 6 | U2 = np.zeros((tmax,nmax)) 7 | U3 = np.zeros((tmax,nmax)) 8 | ul = np.zeros((tmax,nmax+1)) 9 | ur = np.zeros((tmax,nmax+1)) 10 | F = np.zeros((tmax,nmax+1)) 11 | k = np.zeros((tmax,nmax)) 12 | phi = np.zeros((tmax,nmax+1)) 13 | a = 1#速度 14 | dx = 1 15 | b = np.zeros((2,nmax+1)) 16 | 17 | for i in range(0,nmax+1): 18 | b[0,i] = -i*i/2 + i*10 19 | b[1,i] = -i*i*i/6 + i*i*5 20 | j = i + 0.5 21 | #b[1,i] = -j*j*j/6 + j*j*5 22 | for i in range(0,nmax): 23 | if i <= 8: 24 | U[0,i] = -i*i/16 + i 25 | elif i >= 16: 26 | U[0,i] = -(i-8)*(i-8)/16 + (i-8) 27 | else: 28 | U[0,i] = 4 29 | #U[0,i] = b[1,i+1] - b[1,i] 30 | 31 | 32 | def rk2(): 33 | for i in range(1,nmax-1): 34 | k[t,i] = (U[t,i+1] - U[t,i-1])/2#二阶精度的中心差分即可 35 | k[t,0] = k[t,1] + (k[t,1] - k[t,2]) 36 | k[t,nmax-1] = k[t,nmax-2] + (k[t,nmax-2] - k[t,nmax-3]) 37 | 38 | smax = 0.5 39 | for i in range(0,nmax-1): 40 | ul[t,i+1] = U[t,i] + k[t,i]/2 41 | ur[t,i+1] = U[t,i+1] - k[t,i+1]/2 42 | phi[t,i+1] = a*(ul[t,i+1] + ur[t,i+1])/2 43 | F[t,i+1] = a*(ul[t,i+1] + ur[t,i+1] + smax*(ul[t,i+1] - ur[t,i+1]))/2#算术平均 44 | 45 | #边界条件,外插法 46 | ul[t,0] = U[t,0] - k[t,0]/2 47 | F[t,0] = a*ul[t,0] 48 | ur[t,nmax] = U[t,nmax-1] + k[t,nmax-1]/2 49 | F[t,nmax] = a*ur[t,nmax] 50 | 51 | for t in range(0,tmax-1): 52 | 53 | U2[t,:] = U[t,:] 54 | rk2() 55 | for i in range(0,nmax): 56 | U[t,i] = U[t,i] + (F[t,i] - F[t,i+1]) 57 | U3[t,:] = U[t,:] 58 | rk2() 59 | for i in range(0,nmax): 60 | U[t+1,i] = (U2[t,i] + U[t,i] + (F[t,i] - F[t,i+1]))/2 61 | U[t,:] = U2[t,:] 62 | 63 | -------------------------------------------------------------------------------- /python/FiniteVolume/advectionMacCormack.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | #MacCormack算法。数值易爆炸 3 | nmax = 510 4 | tmax = 1005 5 | U = np.zeros((tmax,nmax)) 6 | F = np.zeros((tmax,nmax)) 7 | upred = np.zeros((tmax,nmax))#plus 1/2 8 | 9 | a = 0.5 #速度 10 | b = np.zeros((2,nmax+1)) 11 | dt = 1 12 | dx = 1 13 | 14 | for i in range(0,nmax+1): 15 | b[0,i] = -i*i/2 + i*10 16 | b[1,i] = -i*i*i*i/6 + i*i*5 17 | j = i + 0.5 18 | #b[1,i] = -j*j*j/6 + j*j*5 19 | for i in range(0,nmax): 20 | if i <= 8: 21 | U[0,i] = -i*i/16 + i 22 | elif i >= 16: 23 | U[0,i] = -(i-8)*(i-8)/16 + (i-8) 24 | else: 25 | U[0,i] = 4 26 | #U[0,i] = -i*i/16 + i #原来的真正的二阶函数 27 | 28 | F[0,:] = a*U[0,:] 29 | for t in range(0,tmax-1): 30 | for i in range(1,nmax-1): 31 | upred[t,i] = U[t,i] - dt / dx * (F[t,i+1] - F[t,i]) 32 | 33 | upred[t,0] = upred[t,1] 34 | upred[t,-1] = upred[t,-2]#边界情况 35 | F[t+1,:] = a * upred[t,:] 36 | 37 | for i in range(1,nmax-1): 38 | U[t+1,i] = 0.5*(U[t,i] + upred[t,i]) - dt/dx*(F[t+1,i] - F[t+1,i-1]) 39 | U[t+1,0] = U[t+1,1] 40 | U[t+1,-1] = U[t+1,-2] 41 | F[t+1,:] = a*U[0,:] 42 | 43 | -------------------------------------------------------------------------------- /python/FiniteVolume/advectionRK2.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | #初始条件为二次函数,使用二阶Runge-Kutta的有限体积法 3 | nmax = 20 4 | tmax = 50 5 | U = np.zeros((tmax,nmax)) 6 | U2 = np.zeros((tmax,nmax)) 7 | Uhalf = np.zeros((tmax,nmax+1)) 8 | F = np.zeros((tmax,nmax+1)) 9 | a = 1#速度 10 | dx = 1 11 | b = np.zeros((2,nmax+1)) 12 | for i in range(0,nmax+1): 13 | b[0,i] = -i*i/2 + i*10 14 | b[1,i] = -i*i*i/6 + i*i*5 15 | for i in range(0,nmax): 16 | U[0,i] = b[1,i+1] - b[1,i] 17 | 18 | def rk2(): 19 | for i in range(0,nmax-1): 20 | Uhalf[t,i+1] = U[t,i] + (U[t,i+1] - U[t,i])/2/dx 21 | F[t,i+1] = a*Uhalf[t,i+1] 22 | #边界条件,外插法 23 | Uhalf[t,0] = U[t,0] - (U[t,1] - U[t,0])/2/dx 24 | F[t,0] = a*Uhalf[t,0] 25 | Uhalf[t,nmax] = U[t,nmax-1] + (U[t,nmax-1] - U[t,nmax-2])/2/dx 26 | F[t,nmax] = a*Uhalf[t,nmax] 27 | 28 | 29 | for t in range(0,tmax-1): 30 | 31 | U2[t,:] = U[t,:] 32 | rk2() 33 | for i in range(0,nmax): 34 | U[t,i] = U[t,i] + (F[t,i] - F[t,i+1]) 35 | 36 | rk2() 37 | for i in range(0,nmax): 38 | U[t+1,i] = (U2[t,i] + U[t,i] + (F[t,i] - F[t,i+1]))/2 39 | U[t,:] = U2[t,:] -------------------------------------------------------------------------------- /python/FiniteVolume/advectionRK2CD.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | #rk2 加中心差分的有限体积法,精度二阶,完全精确。 3 | nmax = 50 4 | tmax = 100 5 | U = np.zeros((tmax,nmax)) 6 | U2 = np.zeros((tmax,nmax)) 7 | U3 = np.zeros((tmax,nmax)) 8 | k = np.zeros((tmax,nmax)) 9 | a = 0.5#速度 10 | dx = 1 11 | b = np.zeros((2,nmax+1)) 12 | 13 | for i in range(0,nmax+1): 14 | b[0,i] = -i*i/2 + i*10 15 | b[1,i] = -i*i*i/6 + i*i*5 16 | j = i + 0.5 17 | #b[1,i] = -j*j*j/6 + j*j*5 18 | for i in range(0,nmax): 19 | if i <= 8: 20 | U[0,i] = -i*i/16 + i 21 | elif i >= 16: 22 | U[0,i] = -(i-8)*(i-8)/16 + (i-8) 23 | else: 24 | U[0,i] = 4 25 | #U[0,i] = b[1,i+1] - b[1,i] 26 | 27 | 28 | def rk2(): 29 | for i in range(1,nmax-1): 30 | k[t,i] = (U[t,i+1] - U[t,i-1])/2#二阶精度的中心差分即可 31 | k[t,0] = k[t,1] + (k[t,1] - k[t,2]) 32 | k[t,nmax-1] = k[t,nmax-2] + (k[t,nmax-2] - k[t,nmax-3]) 33 | 34 | for t in range(0,tmax-1): 35 | 36 | U2[t,:] = U[t,:] 37 | rk2() 38 | for i in range(0,nmax): 39 | Fminus = U[t,i] - a*k[t,i]/2#F{i-1/2} 40 | Fplus = U[t,i] + a*k[t,i]/2#F{i+1/2} 41 | U[t,i] = U[t,i] + (Fminus - Fplus) 42 | U3[t,:] = U[t,:] 43 | rk2() 44 | for i in range(0,nmax): 45 | Fminus = U[t,i] - a*k[t,i]/2#F{i-1/2} 46 | Fplus = U[t,i] + a*k[t,i]/2#F{i+1/2} 47 | U[t+1,i] = (U2[t,i] + U[t,i] + (Fminus - Fplus))/2 48 | U[t,:] = U2[t,:] 49 | 50 | -------------------------------------------------------------------------------- /python/FiniteVolume/advectionminmod.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | #minmod 3 | nmax = 20 4 | tmax = 10 5 | U = np.zeros((tmax,nmax)) 6 | U2 = np.zeros((tmax,nmax)) 7 | U3 = np.zeros((tmax,nmax)) 8 | k = np.zeros((tmax,nmax)) 9 | phi = np.zeros((tmax,nmax)) 10 | a = 1#速度 11 | dx = 1 12 | b = np.zeros((2,nmax+1)) 13 | 14 | for i in range(0,nmax+1): 15 | b[0,i] = -i*i/2 + i*10 16 | b[1,i] = -i*i*i/6 + i*i*5 17 | j = i + 0.5 18 | #b[1,i] = -j*j*j/6 + j*j*5 19 | for i in range(0,nmax): 20 | if i <= 8: 21 | U[0,i] = -i*i/16 + i 22 | elif i >= 16: 23 | U[0,i] = -(i-8)*(i-8)/16 + (i-8) 24 | else: 25 | U[0,i] = 4 26 | 27 | def minmod(duR,duL): 28 | s = (np.sign(duR) + np.sign(duL))/2 29 | if abs(s) == 1: 30 | return s*min(abs(duR),abs(duL)) 31 | else: 32 | return 0 33 | 34 | def rk2(): 35 | for i in range(1,nmax-1): 36 | duR = U[t,i+1] - U[t,i] 37 | duL = U[t,i] - U[t,i-1] 38 | k[t,i] = minmod(duR,duL) 39 | k[t,0] = k[t,1] + (k[t,1] - k[t,2]) 40 | k[t,nmax-1] = k[t,nmax-2] + (k[t,nmax-2] - k[t,nmax-3]) 41 | 42 | for t in range(0,tmax-1): 43 | 44 | U2[t,:] = U[t,:] 45 | rk2() 46 | for i in range(0,nmax): 47 | #U{i+1/2} = U{i} + k[t,i]/2 48 | #U{i-1/2} = U{i} - k[t,i]/2 49 | ul = U[t,i] - k[t,i]/2 50 | ur = U[t,i] + k[t,i]/2 51 | U[t,i] = U[t,i] + a*(ul - ur) 52 | U3[t,:] = U[t,:] 53 | rk2() 54 | for i in range(0,nmax): 55 | ul = U[t,i] - k[t,i]/2 56 | ur = U[t,i] + k[t,i]/2 57 | U[t+1,i] = (U2[t,i] + U[t,i] + a*(ul - ur))/2 58 | U[t,:] = U2[t,:] 59 | 60 | 61 | -------------------------------------------------------------------------------- /python/ImmersedBoundary/ib5.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | # https://github.com/fairyflies9/2D_IBM_MATLAB 3 | # D:\FluidSim\FluidSim\Immersed\2D_IBM_MATLAB-master 4 | -------------------------------------------------------------------------------- /python/ImmersedBoundary/xlag.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clatterrr/FluidSimulationTutorialsUnity/f5d269d57576a7f579a6797f8c74079ff5199baf/python/ImmersedBoundary/xlag.mat -------------------------------------------------------------------------------- /python/ImmersedBoundary/ylag.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clatterrr/FluidSimulationTutorialsUnity/f5d269d57576a7f579a6797f8c74079ff5199baf/python/ImmersedBoundary/ylag.mat -------------------------------------------------------------------------------- /python/LevelSet/image0.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clatterrr/FluidSimulationTutorialsUnity/f5d269d57576a7f579a6797f8c74079ff5199baf/python/LevelSet/image0.mat -------------------------------------------------------------------------------- /python/LevelSet/ls1d.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import random 3 | """ 4 | D:\FluidSim\FluidSim\LevelSet\LevelSet-m2aster 5 | Conservation 6 | """ 7 | 8 | Lx = 1 9 | nmax = 100 10 | dx = Lx / nmax 11 | dt = 0.01 12 | eps = dx / 2 13 | lamb = dt / dx 14 | x = np.zeros((nmax)) 15 | for i in range(0,nmax): 16 | x[i] = dx * i - Lx / 2 17 | 18 | phi = np.zeros((nmax)) 19 | phis = np.zeros((nmax)) 20 | U = np.zeros((nmax)) 21 | Fleft = np.zeros((nmax)) 22 | Fright = np.zeros((nmax)) 23 | 24 | 25 | 26 | def superbee(x,y): 27 | L = 0 28 | if x * y > 0: 29 | if (abs(y) > 2*abs(x)) |(abs(y) < abs(x)/2): 30 | L = 2 * np.sign(x) * min(abs(x),abs(y)) 31 | else: 32 | L = np.sign(x) * min(abs(x),abs(y)) 33 | return L 34 | 35 | def RungeKutta2(): 36 | for i in range(1,nmax-1): 37 | sxleft = 0 38 | sxright = 0 39 | if i == 1: 40 | sxleft = superbee((phi[i] - phi[i-1])/dx,(phi[i-1] - 0)/dx) 41 | else: 42 | sxleft = superbee((phi[i] - phi[i-1])/dx,(phi[i-1] - phi[i-2])/dx) 43 | if i == nmax-2: 44 | sxright = superbee((0-phi[i+1])/dx,(phi[i+1]-phi[i])/dx) 45 | else: 46 | sxright = superbee((phi[i+2]-phi[i+1])/dx,(phi[i+1]-phi[i])/dx) 47 | sx = superbee((phi[i+1]-phi[i])/dx,(phi[i]-phi[i-1])/dx) 48 | 49 | 50 | phiLeftPlus = phi[i] - sx * dx / 2 51 | phiLeftMinus = phi[i-1] + sxleft * dx / 2 52 | phiRightPlus = phi[i+1] - sxright * dx / 2 53 | phiRightMinus = phi[i] + sx * dx / 2 54 | 55 | 56 | FrightFlux= max(U[i],0)*phiRightMinus + min(U[i],0)*phiRightPlus 57 | FleftFlux = max(U[i-1],0)*phiLeftMinus + min(U[i-1],0)*phiLeftPlus 58 | 59 | 60 | phis[i] = phi[i] - dt * (FrightFlux - FleftFlux)/dx -------------------------------------------------------------------------------- /python/LevelSet/vof0.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | nmax = 16 3 | f = np.zeros((nmax)) 4 | u = np.zeros((nmax))# 0 无中断,1中断左边界,2中断中间,3中断右边界 5 | k = np.zeros((nmax)) 6 | n = np.zeros((nmax)) 7 | b = np.zeros((nmax)) 8 | qL = np.zeros((nmax)) 9 | qR = np.zeros((nmax)) 10 | for i in range(nmax): 11 | if i < 8: 12 | f[i] = i 13 | else: 14 | f[i] = 3*i 15 | n[7] = 1 16 | b[7] = 1 17 | tmax = 10 18 | u[:] = 1 19 | ft = np.zeros((nmax,tmax+1)) 20 | flux = np.zeros((nmax)) 21 | res = np.zeros((nmax)) 22 | ft[:,0] = f[:] 23 | dt = 0.1 24 | # 注意这是Volume Of Fluid,求解区域是封闭的,不可能有流体流进流出的,所以总体积是恒定的 25 | for t in range(tmax): 26 | res[:] = 0 27 | for i in range(1,nmax-1): 28 | k1 = f[i] - f[i-1] 29 | k2 = f[i+1] - f[i] 30 | if k1 * k2 > 0: 31 | k[i] = min(abs(k1),abs(k2)) 32 | qL[i] = f[i] - k[i]/2 33 | qR[i] = f[i] + k[i]/2 34 | qL[0] = qL[1] 35 | qL[nmax-1] = qL[nmax-2] 36 | qR[0] = qR[1] 37 | qR[nmax-1] = qR[nmax-2] 38 | for i in range(1,nmax-1): 39 | if n[i] == 1: 40 | flux[i] = (qR[i-2] + qR[i-2] - dt*k[i-2] + 2*k[i-2])/2*dt 41 | elif (n[i-1] == 1) & (b[i-1] < 1): 42 | flux[i] = (qR[i] + qR[i] - dt*k[i] - 2*k[i])/2*dt 43 | else: 44 | flux[i] = (qR[i-1] + qR[i-1] - dt*k[i-1])/2*dt 45 | # flux[i] = (qR[i-1] + qR[i-1] - dt*k[i-1])/4 46 | res[i-1] -= flux[i] 47 | res[i] += flux[i] 48 | res[0] = res[1] = res[2] 49 | res[nmax-1] = res[nmax-2] = res[nmax-3] 50 | for i in range(0,nmax-1): 51 | if n[i] == 1: 52 | b[i] = b[i] + u[i]*dt 53 | if b[i] > 1: 54 | b[i+1] = b[i] - 1 - u[i]*dt 55 | b[i] = 0 56 | n[i] = 0 57 | n[i+1] = 1 58 | f = f + res 59 | ft[:,t+1] = f 60 | -------------------------------------------------------------------------------- /python/LevelSet/vof1d.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | nmax = 128 3 | tmax = 500 4 | f = np.zeros((nmax)) 5 | normal = np.zeros((nmax)) # 0 水平 , 1 垂直即间断 6 | f[:] = 1 7 | f[4:16] = 2 8 | u = np.ones((nmax)) 9 | k = np.zeros((nmax)) 10 | flux = np.zeros((nmax)) 11 | res = np.zeros((nmax)) 12 | qL = np.zeros((nmax)) 13 | qR = np.zeros((nmax)) 14 | ft = np.zeros((nmax,tmax+1)) 15 | ft[:,0] = f[:] 16 | def superbee(a,b,c): 17 | a0 = np.sign(a) 18 | b0 = np.sign(b) 19 | c0 = np.sign(c) 20 | re = 0 21 | if (a0 == b0) & (b0 == c0): 22 | re = a0 * min(abs(a),abs(b),abs(c)) 23 | return re 24 | def minmod(a,b): 25 | a0 = np.sign(a) 26 | b0 = np.sign(b) 27 | re = 0 28 | if (a0 == b0): 29 | re = a0 * min(abs(a),abs(b)) 30 | return re 31 | 32 | def RungeKutta(): 33 | res[:] = 0 34 | for i in range(1,nmax-1): 35 | # k[i] = superbee(f[i] - f[i-1],(f[i+1] - f[i-1])/2,f[i+1] - f[i]) 36 | k[i] = minmod(f[i] - f[i-1],f[i+1] - f[i]) 37 | k[0] = k[1] 38 | k[nmax-1] = k[nmax-2] 39 | for i in range(0,nmax-1): 40 | qL[i] = f[i] + k[i]/2 41 | qR[i] = f[i+1] - k[i+1]/2 42 | flux[i] = (u[i]*f[i] + u[i+1]*f[i+1] + (qL[i] - qR[i]))/2 43 | res[i] = res[i] + flux[i] 44 | res[i+1] = res[i+1] - flux[i] 45 | res[0] = 0 46 | u[nmax-1] = -1 47 | 48 | import matplotlib.pyplot as plt 49 | cx = np.zeros((nmax)) 50 | for i in range(nmax): 51 | cx[i] = i 52 | for t in range(0,tmax): 53 | dt = 0.8 54 | rk0 = f.copy() 55 | RungeKutta() 56 | f = f - dt*res 57 | rk1 = f.copy() 58 | RungeKutta() 59 | f = f - dt*res 60 | rk2 = f.copy() 61 | RungeKutta() 62 | f = f - dt*res 63 | rk3 = f.copy() 64 | RungeKutta() 65 | f = f - dt*res 66 | rk4 = f.copy() 67 | f = rk4/24 + rk2/4 + rk1/3 + rk0*9/24 68 | ft[:,t+1] = f[:] 69 | plt.plot(cx,f) 70 | plt.ylim([0,3]) 71 | plt.pause(0.1) 72 | -------------------------------------------------------------------------------- /python/LinearSystemOfEquation/BiCG.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | # Bi Conju 3 | A = np.array([[1,2,3],[4,5,6],[7,8,9]],dtype = float) 4 | M = np.array([[1,0,0],[0,1,0],[0,0,1]],dtype = float) 5 | b = np.array([14,32,50],dtype = float) 6 | nmax = 3 7 | x = np.zeros((nmax)) 8 | p = np.zeros((nmax)) 9 | ptld = np.zeros((nmax)) 10 | q = np.zeros((nmax)) 11 | qtld = np.zeros((nmax)) 12 | 13 | res = b.copy() # 残差 14 | for i in range(0,nmax): 15 | for j in range(0,nmax): 16 | res[i] -= A[i,j]*x[j] 17 | restld = res.copy() 18 | tmax = 100 19 | 20 | 21 | rho1 = 1 22 | for t in range(0,tmax): 23 | # z = M / r # 这玩意咋除? 24 | z = res.copy() 25 | # z = M' / restld # 这玩意咋除? 26 | ztld = restld.copy() 27 | rho = 0 28 | for i in range(0,nmax): 29 | rho += z[i]*restld[i] 30 | if rho < 1e-8: 31 | break 32 | 33 | beta = 0 34 | if t > 0: 35 | beta = rho / rho1 36 | p = z + beta * p 37 | ptld = ztld + beta * ptld 38 | 39 | for i in range(0,nmax): 40 | for j in range(0,nmax): 41 | q[i] += A[i,j]*p[j] 42 | qtld[i] += A[j,i]*ptld[j] 43 | 44 | alpha = 0 45 | for i in range(0,nmax): 46 | alpha += ptld[i]*q[i] 47 | alpha = rho / alpha 48 | 49 | x = x + alpha * p 50 | res = res - alpha * q 51 | restld = restld - alpha*qtld 52 | 53 | rho1 = rho 54 | -------------------------------------------------------------------------------- /python/LinearSystemOfEquation/CG2.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | A = np.array([[1,2,3],[4,5,6],[7,8,9]],dtype = float) 3 | b = np.array([14,32,50],dtype = float) 4 | nmax = 3 5 | 6 | # A = np.array([[3,1],[1,5]],dtype = float) 7 | # b = np.array([11,13],dtype = float) 8 | # nmax = 2 9 | # 上面这个对角占优,其实挺快的 10 | 11 | x = np.zeros((nmax)) # 待求解的值 12 | p = np.zeros((nmax)) # 方向 13 | res = b - np.dot(A,x) # 残差 14 | bnrm2 = np.linalg.norm(b) 15 | rho1 = 1 16 | tmax = 1000 17 | xt = np.zeros((tmax,nmax)) 18 | for t in range(0,tmax): 19 | rho = np.dot(np.transpose(res),res) 20 | beta = 0 21 | if t > 0: 22 | beta = rho / rho1 23 | p = res + beta*p 24 | Ap = np.dot(A,p) 25 | alpha = rho / np.dot(np.transpose(p),Ap) 26 | xt[t,:] = x 27 | x = x + alpha * p 28 | res = res - alpha * Ap 29 | error = np.linalg.norm(res) / bnrm2 30 | if error < 1e-8: 31 | break 32 | rho1 = rho -------------------------------------------------------------------------------- /python/LinearSystemOfEquation/CGLS.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | # CGLS 3 | A = np.array([[1,2,3],[4,5,6],[7,8,9]],dtype = float) 4 | b = np.array([14,32,50],dtype = float) 5 | nmax = 3 6 | x = np.zeros((nmax)) # 待求解的值 7 | res = b - np.dot(A,x) # 残差 8 | p = np.dot(np.transpose(A),res) 9 | s = p.copy() 10 | gamma = np.linalg.norm(s)**2 11 | tmax = 100 12 | xt = np.zeros((tmax,nmax)) 13 | for t in range(0,tmax): 14 | Ap = np.dot(A,p) 15 | alpha = gamma / np.linalg.norm(Ap)**2 16 | x = x + alpha * p 17 | xt[t,:] = x 18 | res = res - alpha * Ap 19 | s = np.dot(np.transpose(A),res) 20 | gamma1 = np.linalg.norm(s)**2 21 | beta = gamma1 / gamma 22 | gamma = gamma1 23 | p = s + beta * p 24 | if gamma < 1e-8: 25 | break 26 | -------------------------------------------------------------------------------- /python/LinearSystemOfEquation/Cholesky.py: -------------------------------------------------------------------------------- 1 | from scipy import array, linalg, dot 2 | # Cholesky 分解 3 | import numpy as np 4 | A = np.array([[1,2,4],[2,13,23],[4,23,77]]) 5 | L0 = linalg.cholesky(A, lower=True) 6 | n = 3 7 | L = np.zeros((n,n))# 修正 8 | d = np.zeros((n)) 9 | 10 | 11 | def Cholesky(): 12 | # A = {L}{L^T} 13 | v = np.zeros((n)) 14 | for j in range(0,n): 15 | for i in range(j,n): 16 | v[i] = A[i,j] 17 | for k in range(0,j): 18 | v[i] -= L[j,k]*L[i,k] 19 | L[i,j] = v[i] / np.sqrt(v[j]) 20 | 21 | def Modified1(): 22 | # A = {L}{d}{L^T} 23 | d[0] = A[0,0] 24 | L[0,0] = 1 25 | for i in range(1,n): 26 | 27 | for j in range(0,i): 28 | lld = A[i,j] 29 | for k in range(0,j): 30 | lld -= L[i,k]*L[j,k]*d[k] 31 | L[i,j] = 1 / d[j] * lld 32 | 33 | ld = A[i,i] 34 | for k in range(0,i): 35 | ld -= L[i,k]*L[i,k]*d[k] 36 | d[i] = ld 37 | L[i,i] = 1 38 | 39 | def Modified2(): 40 | # A = {L}{d}{L^T} 41 | L[0,0] = A[0,0] 42 | d[0] = 1 / L[0,0] 43 | for i in range(1,n): 44 | for j in range(0,i+1): 45 | lld = A[i,j] 46 | for k in range(0,j): 47 | lld -= L[i,k]*L[j,k]*d[k] 48 | L[i,j] = lld 49 | d[i] = 1 / L[i,i] 50 | 51 | def IncompleteCholesky(): 52 | d[0] = A[0,0] 53 | L[0,0] = 1 54 | for i in range(1,n): 55 | for j in range(0,i): 56 | if(abs(A[i,j]) < 1e-10): 57 | continue 58 | lld = A[i,j] 59 | for k in range(0,j): 60 | lld -= L[i,k]*L[j,k]*d[k] 61 | L[i,j] = 1 / d[j] 62 | 63 | Modified2() 64 | 65 | 66 | -------------------------------------------------------------------------------- /python/LinearSystemOfEquation/ConjugateGradient.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | # http://www.netlib.org/templates/matlab/ 3 | A = np.array([[1,2,3],[4,5,6],[7,8,9]],dtype = float) 4 | M = np.array([[1,0,0],[0,1,0],[0,0,1]],dtype = float) 5 | Minv = np.linalg.inv(M) 6 | b = np.array([14,32,50],dtype = float) 7 | nmax = 3 8 | x = np.zeros((nmax)) 9 | p = np.zeros((nmax)) 10 | res = np.dot(Minv,b - np.dot(A,x)) # 残差 11 | bnrm2 = np.linalg.norm(b) 12 | tmax = 100 13 | restld = res.copy() 14 | rho1 = 1 15 | for t in range(0,tmax): 16 | z = np.dot(Minv,res) # 预处理方程组的残差 17 | rho = np.dot(np.transpose(res),z) 18 | if rho == 0: 19 | break 20 | beta = 0 21 | if t > 0: 22 | beta = rho / rho1 23 | p = z + beta*p 24 | Ap = np.dot(A,p) 25 | alpha = rho / np.dot(np.transpose(p),Ap) 26 | x = x + alpha * p 27 | res = res - alpha * Ap 28 | error = np.linalg.norm(res) / bnrm2 29 | if error < 1e-8: 30 | break 31 | rho1 = rho 32 | 33 | 34 | -------------------------------------------------------------------------------- /python/LinearSystemOfEquation/ConjugateGradientStable.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | # http://www.netlib.org/templates/matlab/ 3 | A = np.array([[1,2,3],[4,5,6],[7,8,9]],dtype = float) 4 | M = np.array([[1,0,0],[0,1,0],[0,0,1]],dtype = float) 5 | Minv = np.linalg.inv(M) 6 | b = np.array([14,32,50],dtype = float) 7 | nmax = 3 8 | x = np.zeros((nmax)) 9 | u = np.zeros((nmax)) 10 | p = np.zeros((nmax)) 11 | q = np.zeros((nmax)) 12 | 13 | res = np.dot(Minv,b - np.dot(A,x)) # 残差 14 | bnrm2 = np.linalg.norm(b) 15 | tmax = 100 16 | restld = res.copy() 17 | rho1 = 1 18 | for t in range(0,tmax): 19 | rho = np.dot(restld,res) 20 | if rho == 0: 21 | break 22 | beta = 0 23 | if t > 0: 24 | beta = rho / rho1 25 | u = res + beta * q 26 | p = u + beta*(q + beta * p) 27 | 28 | phat = np.dot(Minv,p) 29 | vhat = np.dot(A,phat) 30 | alpha = rho / (np.dot(restld,vhat)) 31 | q = u - alpha*vhat 32 | uhat = np.dot(Minv,u + q) 33 | x = x + alpha * uhat 34 | res = res - alpha * np.dot(A,uhat) 35 | error = np.linalg.norm(res) / bnrm2 36 | if error < 1e-8: 37 | break 38 | rho1 = rho 39 | 40 | 41 | -------------------------------------------------------------------------------- /python/LinearSystemOfEquation/FRCG.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | 3 | A = np.array([[1,2,3],[4,5,6],[7,8,9]],dtype = float) 4 | b = np.array([14,32,50],dtype = float) 5 | x0 = np.array([1,2,3],dtype = float) 6 | nmax = 3 7 | 8 | grad = - b.copy() 9 | for i in range(0,nmax): 10 | for j in range(0,nmax): 11 | grad[i] += A[i,j]*x0[j] 12 | direction = - grad.copy() 13 | tmax = 100 14 | 15 | 16 | for t in range(0,tmax): 17 | # 计算步长alpha 18 | numerator = denominator = 0 19 | for i in range(0,nmax): 20 | numerator += grad[i]*grad[i] 21 | arr = np.zeros((nmax)) 22 | for i in range(0,nmax): 23 | arr[:] += direction[i]*A[i,:] 24 | for i in range(0,nmax): 25 | denominator += arr[i]*direction[i] 26 | if denominator < 1e-8: 27 | break 28 | alpha = numerator / denominator 29 | 30 | x0 = x0 + alpha*direction 31 | 32 | grad2 = grad.copy() 33 | for i in range(0,nmax): 34 | for j in range(0,nmax): 35 | grad2[i] += alpha*A[i,j]*direction[j] 36 | denominator = numerator 37 | numerator = 0 38 | for i in range(0,nmax): 39 | numerator += grad2[i]*grad2[i] 40 | beta = numerator / denominator 41 | 42 | direction = beta*direction - grad2 43 | 44 | grad = grad2 45 | -------------------------------------------------------------------------------- /python/RiemannSolver/Burgers1dGodunov.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | #Godunov Scheme for 1d Burgers equation 3 | #介绍:https://zhuanlan.zhihu.com/p/331771977 4 | nmax = 8 5 | tmax = 100 6 | dx = 1.0 / nmax 7 | dt = 1.0 / tmax 8 | U = np.zeros((tmax,nmax)) 9 | F = np.zeros((tmax,nmax + 1)) 10 | for i in range(0,nmax): 11 | if(i < 2): 12 | U[0,i] = 2 13 | else: 14 | U[0,i] = 1 15 | 16 | cfl = 0.8 17 | dx = 0.1 18 | dt = 0.01 19 | 20 | def Flux(uL,uR):# Godunov 21 | FL = 0.5 * uL * uL 22 | FR = 0.5 * uR * uR 23 | s = 0.5*(uL + uR) 24 | if (uL < uR): 25 | if (uL > 0.0): #对应第一种情况 26 | return FL 27 | elif (uR < 0.0): #对应第一种情况 28 | return FR 29 | else: #对应第三种情况 30 | return 0.0 31 | else: 32 | if (s > 0.0): #对应第四种情况 33 | return FL 34 | else: #对应第五种情况 35 | return FR 36 | 37 | for k in range(0,tmax-1): 38 | for i in range(1,nmax): 39 | uL = U[k,i-1] 40 | uR = U[k,i] 41 | F[k,i] = Flux(uL,uR) 42 | 43 | if(U[k,0] < 0.0): 44 | uL = 2.0 * U[k,0] - U[k,1] 45 | else: 46 | uL = U[k,0] 47 | uR = U[k,0] 48 | F[k,0] = Flux(uL,uR) 49 | 50 | if(U[k,nmax-1] > 0.0): 51 | uR = 2.0 * U[k,nmax-1] - U[k,nmax-2] 52 | else: 53 | uR = U[k,nmax-1] 54 | uL = U[k,nmax-1] 55 | F[k,nmax] = Flux(uL,uR) 56 | 57 | for i in range(0,nmax): 58 | U[k+1,i] = U[k,i] - dt/dx * (F[k,i+1] - F[k,i]) -------------------------------------------------------------------------------- /python/RiemannSolver/Burgers1dHLL.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | #hll scheme for 1d Burgers equation 3 | #https://zhuanlan.zhihu.com/p/331771977 4 | nmax = 8 5 | tmax = 100 6 | dx = 1.0 / nmax 7 | dt = 1.0 / tmax 8 | U = np.zeros((tmax,nmax)) 9 | F = np.zeros((tmax,nmax)) 10 | f = np.zeros((tmax,nmax + 1)) 11 | for i in range(0,nmax): 12 | if(i < 2): 13 | U[0,i] = 2 14 | else: 15 | U[0,i] = 1 16 | F[0,:] = 0.5 * U[0,:] * U[0,:] 17 | cfl = 0.8 18 | dx = 0.1 19 | dt = 0.01 20 | 21 | for k in range(0,tmax-1): 22 | for i in range(0,nmax-1): 23 | sl = U[k,i] 24 | sr = U[k,i+1] 25 | if(sl >= 0): 26 | f[k,i+1] = F[k,i] 27 | elif(sr <= 0): 28 | f[k,i+1] = F[k,i+1] 29 | else: 30 | f[k,i+1] = (sr*F[k,i] - sl*F[k,i+1] + sr*sl*(U[k,i+1] - U[k,i]))/(sr - sl) 31 | f[k,0] = F[k,1] 32 | f[k,-1] = F[k,-1] 33 | for i in range(0,nmax): 34 | U[k+1,i] = U[k,i] - dt / dx * (f[k,i+1] - f[k,i]) 35 | F[k+1,:] = 0.5 * U[k+1,:] * U[k+1,:] -------------------------------------------------------------------------------- /python/RiemannSolver/Burgers1dLaxFriedchs.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | #lax-Friedchs Scheme for 1d Burgers equation 3 | #介绍:https://zhuanlan.zhihu.com/p/331771977 4 | nmax = 8 5 | tmax = 100 6 | dx = 1.0 / nmax 7 | dt = 1.0 / tmax 8 | U = np.zeros((tmax,nmax)) 9 | F = np.zeros((tmax,nmax)) 10 | f = np.zeros((tmax,nmax + 1)) 11 | for i in range(0,nmax): 12 | if(i < nmax/2): 13 | U[0,i] = 2 14 | else: 15 | U[0,i] = 1 16 | F[0,:] = 0.5 * U[0,:] * U[0,:] 17 | 18 | cfl = 0.8 19 | dx = 0.1 20 | dt = 0.01 21 | 22 | for k in range(0,tmax - 1): 23 | for i in range(0,nmax+1): 24 | if(i == 0): 25 | f[k,i] = F[k,i] 26 | elif(i == nmax): 27 | f[k,i] = F[k,i-1] 28 | else: 29 | f[k,i] = 0.5*(F[k,i] + F[k,i-1]) - 0.5*cfl*dx/dt*(U[k,i] - U[k,i-1]) 30 | 31 | for i in range(0,nmax): 32 | U[k+1,i] = U[k,i] - dt/dx*(f[k,i+1] - f[k,i]) 33 | 34 | F[k+1,:] = 0.5 * U[k+1,:] * U[k+1,:] -------------------------------------------------------------------------------- /python/RiemannSolver/Burgers1dLaxWendroff.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | #lax-Wendroff Scheme for 1d Burgers equation 3 | #版本1为详细版,版本2为简化版 4 | #介绍:https://zhuanlan.zhihu.com/p/331771977 5 | nmax = 8 6 | tmax = 100 7 | dx = 1.0 / nmax 8 | dt = 1.0 / tmax 9 | U = np.zeros((tmax,nmax)) 10 | F = np.zeros((tmax,nmax)) 11 | upredp = np.zeros((tmax,nmax))#plus 1/2 12 | upredm = np.zeros((tmax,nmax))#minus 1/2 13 | fpredp = np.zeros((tmax,nmax))#plus 1/2 14 | fpredm = np.zeros((tmax,nmax))#minus 1/2 15 | for i in range(0,nmax): 16 | if(i < nmax/2): 17 | U[0,i] = 2 18 | else: 19 | U[0,i] = 1 20 | F[0,:] = 0.5 * U[0,:] * U[0,:] 21 | 22 | cfl = 0.8 23 | dx = 0.1 24 | dt = 0.01 25 | 26 | for k in range(0,tmax - 1): 27 | for i in range(0,nmax-1): 28 | upredp[k,i] = 0.5 * (U[k,i+1] + U[k,i] - dt / dx * (F[k,i+1] - F[k,i])) 29 | for i in range(1,nmax): 30 | upredm[k,i] = 0.5 * (U[k,i] + U[k,i-1] - dt / dx * (F[k,i] - F[k,i-1])) 31 | 32 | upredp[k,-1] = upredp[k,-2] 33 | upredm[k,0] = upredm[k,1] 34 | fpredp[k,:] = 0.5 * upredp[k,:] * upredp[k,:] 35 | fpredm[k,:] = 0.5 * upredm[k,:] * upredm[k,:] 36 | 37 | for i in range(1,nmax-1): 38 | U[k+1,i] = U[k,i] - dt/dx*(fpredp[k,i] - fpredm[k,i]) 39 | 40 | U[k+1,0] = U[k+1,1] 41 | U[k+1,-1] = U[k+1,-2] 42 | F[k+1,:] = 0.5 * U[k+1,:] * U[k+1,:] -------------------------------------------------------------------------------- /python/RiemannSolver/Burgers1dLaxWendroffV2.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | #Lax Wendroff for 1d Burgers equation 3 | #版本1为详细版,版本2为简化版 4 | #介绍:https://zhuanlan.zhihu.com/p/331771977 5 | nmax = 8 6 | tmax = 1000 7 | dx = 1.0 / nmax 8 | dt = 1.0 / tmax 9 | U = np.zeros((tmax,nmax)) 10 | F = np.zeros((tmax,nmax)) 11 | upred = np.zeros((tmax,nmax)) 12 | for i in range(0,nmax): 13 | if(i < nmax/2): 14 | U[0,i] = 2 15 | else: 16 | U[0,i] = 1 17 | F[0,:] = 0.5 * U[0,:] * U[0,:] 18 | 19 | cfl = 0.8 20 | dx = 0.1 21 | dt = 0.01 22 | 23 | for k in range(0,tmax - 1): 24 | for i in range(0,nmax-1): 25 | 26 | upred[k,i] = U[k,i] + 0.5 * (U[k,i+1] - U[k,i] - dt / dx * (F[k,i+1] - F[k,i])) 27 | 28 | upred[k,-1] = upred[k,-2]#边界情况 29 | F[k+1,:] = 0.5 * upred[k,:] * upred[k,:] 30 | 31 | for i in range(1,nmax-1): 32 | U[k+1,i] = U[k,i] - dt/dx*(F[k+1,i] - F[k+1,i-1]) 33 | 34 | U[k+1,0] = U[k+1,1] 35 | U[k+1,-1] = U[k+1,-2] 36 | F[k+1,:] = 0.5 * U[k+1,:] * U[k+1,:] -------------------------------------------------------------------------------- /python/RiemannSolver/Burgers1dMUSCLminmod.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | #MUSCL + minmod for 1d Burgers equation 3 | #介绍:https://zhuanlan.zhihu.com/p/331771977 4 | nmax = 8 5 | tmax = 100 6 | dx = 1.0 / nmax 7 | dt = 1.0 / tmax 8 | U = np.zeros((tmax,nmax)) 9 | uL = np.zeros((tmax,nmax))#U_{i+1/2}^L 10 | uR = np.zeros((tmax,nmax))#U_{i-1/2}^R 11 | Fp = np.zeros((tmax,nmax))#F plus 1/2 12 | Fm = np.zeros((tmax,nmax))#F minus 1/2 13 | for i in range(0,nmax): 14 | if(i < nmax/2): 15 | U[0,i] = 2 16 | else: 17 | U[0,i] = 1 18 | 19 | cfl = 0.8 20 | dx = 0.1 21 | dt = 0.01 22 | 23 | def minmod(a,b): 24 | if(a * b > 0): 25 | if(abs(a) > abs(b)): 26 | return b 27 | else: 28 | return a 29 | else: 30 | return 0 31 | 32 | def Flux(u): 33 | return 0.5 * u * u#Burgers 方程 34 | 35 | for k in range(0,tmax - 1): 36 | for i in range(1,nmax-1): 37 | a = (U[k,i+1] - U[k,i])/dx 38 | b = (U[k,i] - U[k,i-1])/dx 39 | uL[k,i] = U[k,i] + 0.5 * dx * minmod(a,b) 40 | uR[k,i] = U[k,i] - 0.5 * dx * minmod(a,b) 41 | 42 | uL[k,0] = uL[k,1] 43 | uL[k,-1] = uL[k,-2] 44 | uR[k,0] = uR[k,1] 45 | uR[k,-1] = uR[k,-2] 46 | 47 | for i in range(1,nmax-1): 48 | Fp[k,i] = 0.5*(Flux(uL[k,i+1]) + Flux(uR[k,i])) - 0.5 * dx / dt * (uR[k,i+1] - uL[k,i]) 49 | Fm[k,i] = 0.5*(Flux(uL[k,i]) + Flux(uR[k,i-1])) - 0.5 * dx / dt * (uR[k,i] - uL[k,i-1]) 50 | U[k+1,i] = U[k,i] - dt/dx*(Fp[k,i] - Fm[k,i]) 51 | 52 | U[k+1,0] = U[k+1,1] 53 | U[k+1,-1] = U[k+1,-2] -------------------------------------------------------------------------------- /python/RiemannSolver/Burgers1dMarCormack.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | #MarCormack Scheme for 1d Burgers equation 3 | #如果把这个与LaxWendroff比较,你会发现代码需要改动的地方很少 4 | #介绍:https://zhuanlan.zhihu.com/p/331771977 5 | nmax = 8 6 | tmax = 100 7 | dx = 1.0 / nmax 8 | dt = 1.0 / tmax 9 | U = np.zeros((tmax,nmax)) 10 | F = np.zeros((tmax,nmax)) 11 | upred = np.zeros((tmax,nmax)) 12 | for i in range(0,nmax): 13 | if(i < nmax/2): 14 | U[0,i] = 0.1*i 15 | else: 16 | U[0,i] = 0.2*i 17 | F[0,:] = 0.5 * U[0,:] * U[0,:] 18 | 19 | cfl = 0.8 20 | dx = 0.1 21 | dt = 0.01 22 | 23 | for k in range(0,tmax - 1): 24 | for i in range(1,nmax-1): 25 | upred[k,i] = U[k,i] - dt / dx * (F[k,i+1] - F[k,i]) 26 | 27 | upred[k,0] = upred[k,1] 28 | upred[k,-1] = upred[k,-2]#边界情况 29 | F[k+1,:] = 0.5 * upred[k,:] * upred[k,:] 30 | 31 | for i in range(1,nmax-1): 32 | U[k+1,i] = 0.5*(U[k,i] + upred[k,i]) - dt/dx*(F[k+1,i] - F[k+1,i-1]) 33 | 34 | U[k+1,0] = U[k+1,1] 35 | U[k+1,-1] = U[k+1,-2] 36 | F[k+1,:] = 0.5 * U[k+1,:] * U[k+1,:] -------------------------------------------------------------------------------- /python/RiemannSolver/Burgers1dMinmod.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | #minmod limiter for 1d Burgers equation 3 | #介绍:https://zhuanlan.zhihu.com/p/331771977 4 | nmax = 8 5 | tmax = 1000 6 | dx = 1.0 / nmax 7 | dt = 1.0 / tmax 8 | U = np.zeros((tmax,nmax)) 9 | F = np.zeros((tmax,nmax)) 10 | upred = np.zeros((tmax,nmax)) 11 | for i in range(0,nmax): 12 | if(i < 2): 13 | U[0,i] = 2 14 | else: 15 | U[0,i] = 1 16 | F[0,:] = 0.5 * U[0,:] * U[0,:] 17 | 18 | cfl = 0.8 19 | dx = 0.1 20 | dt = 0.01 21 | 22 | def minmod(a,b): 23 | if(b == 0): 24 | return 1 25 | elif(a * b <= 0): 26 | return 0 27 | phi = min(a/b,1) 28 | return phi 29 | 30 | for k in range(0,tmax - 1): 31 | for i in range(1,nmax-1): 32 | a = ((U[k,i+1] - dt / dx * F[k,i+1]) - (U[k,i] - dt / dx * F[k,i]))/dx 33 | b = ((U[k,i] - dt / dx * F[k,i]) - (U[k,i-1] - dt / dx * F[k,i-1]))/dx 34 | upred[k,i] = U[k,i] + 0.5 * dx * a * minmod(a,b) 35 | 36 | upred[k,0] = upred[k,1] 37 | upred[k,-1] = upred[k,-2]#边界情况 38 | F[k+1,:] = 0.5 * upred[k,:] * upred[k,:] 39 | 40 | for i in range(1,nmax-1): 41 | U[k+1,i] = U[k,i] - dt/dx*(F[k+1,i] - F[k+1,i-1]) 42 | 43 | U[k+1,0] = U[k+1,1] 44 | U[k+1,-1] = U[k+1,-2] 45 | F[k+1,:] = 0.5 * U[k+1,:] * U[k+1,:] -------------------------------------------------------------------------------- /python/RiemannSolver/Burgers1dRoe.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | #Roe Scheme for 1d Burgers equation 3 | #介绍:https://zhuanlan.zhihu.com/p/331771977 4 | nmax = 8 5 | tmax = 100 6 | dx = 1.0 / nmax 7 | dt = 1.0 / tmax 8 | U = np.zeros((tmax,nmax)) 9 | F = np.zeros((tmax,nmax)) 10 | f = np.zeros((tmax,nmax + 1)) 11 | a = np.zeros((tmax,nmax + 1)) 12 | for i in range(0,nmax): 13 | if(i < 2): 14 | U[0,i] = 2 15 | else: 16 | U[0,i] = 1 17 | F[0,:] = 0.5 * U[0,:] * U[0,:] 18 | cfl = 0.8 19 | dx = 0.1 20 | dt = 0.01 21 | 22 | for k in range(0,tmax - 1): 23 | for i in range(0,nmax-1): 24 | a[k,i+1] = 0 25 | if(U[k,i+1] != U[k,i]): 26 | a[k,i+1] = (F[k,i+1] - F[k,i])/(U[k,i+1] - U[k,i]) 27 | if(a[k,i+1] >= 0): 28 | f[k,i+1] = F[k,i] 29 | else: 30 | f[k,i+1] = F[k,i-1] 31 | f[k,0] = F[k,1] 32 | f[k,-1] = F[k,-1] 33 | for i in range(0,nmax): 34 | U[k+1,i] = U[k,i] - dt / dx * (f[k,i+1] - f[k,i]) 35 | F[k+1,:] = 0.5 * U[k+1,:] * U[k+1,:] 36 | -------------------------------------------------------------------------------- /python/RiemannSolver/Burgers1dUpwind.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | #Upwind Scheme for 1d Burgers equation 3 | #介绍:https://zhuanlan.zhihu.com/p/331771977 4 | nmax = 8 5 | tmax = 100 6 | dx = 1.0 / nmax 7 | dt = 1.0 / tmax 8 | U = np.zeros((tmax,nmax)) 9 | F = np.zeros((tmax,nmax)) 10 | for i in range(0,nmax): 11 | if(i < nmax/2): 12 | U[0,i] = 0.1*i 13 | else: 14 | U[0,i] = 0.2*i 15 | F[0,:] = 0.5 * U[0,:] * U[0,:] 16 | 17 | for k in range(0,tmax-1): 18 | for i in range(1,nmax): 19 | U[k+1,i] = U[k,i] - (dt/dx)*(F[k,i] - F[k,i-1]) 20 | U[k+1,0] = U[k+1,1] 21 | F[k+1,:] = 0.5 * U[k+1,:] * U[k+1,:] 22 | -------------------------------------------------------------------------------- /python/RiemannSolver/Shallow1dLaxFriedrichs.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | #Lax Friedrichs for 1d Shallow Water Equation 3 | #介绍:https://zhuanlan.zhihu.com/p/331771977 4 | nmax = 8 5 | tmax = 100 6 | h = np.ones((tmax,nmax)) 7 | for i in range(0,4): 8 | h[0,i] = 2 9 | 10 | u = np.zeros((tmax,nmax)) 11 | U1 = np.zeros((tmax,nmax)) 12 | U2 = np.zeros((tmax,nmax)) 13 | F1 = np.zeros((tmax,nmax)) 14 | F2 = np.zeros((tmax,nmax)) 15 | U1[0,:] = h[0,:] 16 | U2[0,:] = F1[0,:] = h[0,:]*u[0,:] 17 | F2[0,:] = h[0,:]*u[0,:]*u[0,:] + 0.5*10*h[0,:]*h[0,:] 18 | 19 | f1 = np.zeros((tmax,nmax+1)) 20 | f2 = np.zeros((tmax,nmax+1)) 21 | 22 | cfl = 0.8 23 | dx = 0.25 24 | 25 | for k in range(0,tmax-1): 26 | dt = cfl*dx/max(abs(u[k,:]) + np.sqrt(abs(10*h[k,:]))) 27 | for i in range(0,nmax+1): 28 | if(i == 0): 29 | f1[k,i] = F1[k,i] 30 | f2[k,i] = F2[k,i] 31 | elif(i == nmax): 32 | f1[k,i] = F1[k,i-1] 33 | f2[k,i] = F2[k,i-1] 34 | else: 35 | f1[k,i] = 0.5*(F1[k,i]+F1[k,i-1]) - 0.5*cfl*dx/dt * (U1[k,i] - U1[k,i-1]) 36 | f2[k,i] = 0.5*(F2[k,i]+F2[k,i-1]) - 0.5*cfl*dx/dt * (U2[k,i] - U2[k,i-1]) 37 | 38 | for i in range(0,nmax): 39 | U1[k+1,i] = U1[k,i] - dt/dx * (f1[k,i+1] - f1[k,i]) 40 | U2[k+1,i] = U2[k,i] - dt/dx * (f2[k,i+1] - f2[k,i]) 41 | 42 | h[k+1,:] = U1[k+1,:] 43 | u[k+1,:] = U2[k+1,:]/U1[k+1,:] 44 | F1[k+1,:] = U2[k+1,:] 45 | F2[k+1,:] = h[k+1,:]*u[k+1,:]*u[k+1,:] + 0.5*10*h[k+1,:]*h[k+1,:] -------------------------------------------------------------------------------- /python/RiemannSolver/Shallow1dLaxWendroff.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | #Lax Wendroff for 1d Shallow Water Equation 3 | #介绍:https://zhuanlan.zhihu.com/p/331771977 4 | nmax = 15 5 | tmax = 100 6 | h = np.ones((tmax,nmax)) 7 | for i in range(0,8): 8 | h[0,i] = 2 9 | u = np.zeros((tmax,nmax)) 10 | U1 = np.zeros((tmax,nmax)) 11 | U2 = np.zeros((tmax,nmax)) 12 | F1 = np.zeros((tmax,nmax)) 13 | F2 = np.zeros((tmax,nmax)) 14 | 15 | U1pred = np.zeros((tmax,nmax)) 16 | U2pred = np.zeros((tmax,nmax)) 17 | U1[0,:] = h[0,:] 18 | U2[0,:] = F1[0,:] = h[0,:]*u[0,:] 19 | F2[0,:] = h[0,:]*u[0,:]*u[0,:] + 0.5*10*h[0,:]*h[0,:] 20 | 21 | for k in range(0,tmax-2): 22 | dx = 10 23 | cfl = 0.8 24 | dt = cfl*dx/max(abs(u[k,:]) + np.sqrt(abs(10*h[k,:]))) 25 | c = dt / dx 26 | for i in range(0,nmax-1): 27 | U1pred[k,i] = 0.5*(U1[k,i+1]+U1[k,i] - c*(F1[k,i+1]-F1[k,i])) 28 | U2pred[k,i] = 0.5*(U2[k,i+1]+U2[k,i] - c*(F2[k,i+1]-F2[k,i])) 29 | h[k+1,i] = U1pred[k,i] 30 | u[k+1,i] = U2pred[k,i]/U1pred[k,i] 31 | 32 | h[k+1,-1] = h[k+1,-2] 33 | u[k+1,-1] = u[k+1,-2] 34 | 35 | F1[k+1,:] = h[k+1,:]*u[k+1,:] 36 | F2[k+1,:] = h[k+1,:]*u[k+1,:]*u[k+1,:] + 0.5*10*h[k+1,:]*h[k+1,:] 37 | 38 | for i in range(1,nmax-1): 39 | U1[k+1,i] = U1[k,i] - c*(F1[k+1,i] - F1[k+1,i-1]) 40 | U2[k+1,i] = U2[k,i] - c*(F2[k+1,i] - F2[k+1,i-1]) 41 | h[k+1,i] = U1[k+1,i] 42 | u[k+1,i] = U2[k+1,i]/U1[k+1,i] 43 | h[k+1,0] = h[k+1,1] 44 | u[k+1,0] = u[k+1,1] 45 | 46 | h[k+1,-1] = h[k+1,-2] 47 | u[k+1,-1] = u[k+1,-2] 48 | 49 | U1[k+1,:] = h[k+1,:] 50 | U2[k+1,:] = F1[k+1,:] = h[k+1,:]*u[k+1,:] 51 | F2[k+1,:] = h[k+1,:]*u[k+1,:]*u[k+1,:] + 0.5*10*h[k+1,:]*h[k+1,:] -------------------------------------------------------------------------------- /python/RiemannSolver/Shallow1dMacCormack.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | #MacCormack for 1d Shallow Water Equation 3 | #介绍:https://zhuanlan.zhihu.com/p/331771977 4 | nmax = 15 5 | tmax = 100 6 | h = np.ones((tmax,nmax+2)) 7 | for i in range(0,4): 8 | h[0,i] = 2 9 | 10 | for i in range(13,17): 11 | h[0,i] = 2 12 | u = np.zeros((tmax,nmax+2)) 13 | U1 = np.zeros((tmax,nmax+2)) 14 | U2 = np.zeros((tmax,nmax+2)) 15 | F1 = np.zeros((tmax,nmax+2)) 16 | F2 = np.zeros((tmax,nmax+2)) 17 | 18 | U1pred = np.zeros((tmax,nmax+2)) 19 | U2pred = np.zeros((tmax,nmax+2)) 20 | U1[0,:] = h[0,:] 21 | U2[0,:] = F1[0,:] = h[0,:]*u[0,:] 22 | F2[0,:] = h[0,:]*u[0,:]*u[0,:] + 0.5*10*h[0,:]*h[0,:] 23 | 24 | for k in range(0,tmax-2): 25 | dx = 10 26 | cfl = 0.8 27 | dt = cfl*dx/max(abs(u[k,:]) + np.sqrt(abs(10*h[k,:]))) 28 | c = dt / dx 29 | for i in range(1,nmax+1): 30 | U1pred[k,i] = U1[k,i] - c*(F1[k,i+1]-F1[k,i]) 31 | U2pred[k,i] = U2[k,i] - c*(F2[k,i+1]-F2[k,i]) 32 | h[k+1,i] = U1pred[k,i] 33 | u[k+1,i] = U2pred[k,i]/U1pred[k,i] 34 | 35 | h[k+1,0] = h[k+1,1] 36 | u[k+1,0] = u[k+1,1] 37 | h[k+1,-1] = h[k+1,-2] 38 | u[k+1,-1] = u[k+1,-2] 39 | 40 | F1[k+1,:] = h[k+1,:]*u[k+1,:] 41 | F2[k+1,:] = h[k+1,:]*u[k+1,:]*u[k+1,:] + 0.5*10*h[k+1,:]*h[k+1,:] 42 | 43 | for i in range(1,nmax+1): 44 | U1[k+1,i] = 0.5 * (U1[k,i] + U1pred[k,i] - c * (F1[k+1,i] - F1[k+1,i-1])) 45 | U2[k+1,i] = 0.5 * (U2[k,i] + U2pred[k,i] - c * (F2[k+1,i] - F2[k+1,i-1])) 46 | h[k+1,i] = U1[k+1,i] 47 | u[k+1,i] = U2[k+1,i]/U1[k+1,i] 48 | 49 | h[k+1,0] = h[k+1,1] 50 | u[k+1,0] = u[k+1,1] 51 | h[k+1,-1] = h[k+1,-2] 52 | u[k+1,-1] = u[k+1,-2] 53 | 54 | F1[k+1,:] = h[k+1,:]*u[k+1,:] 55 | F2[k+1,:] = h[k+1,:]*u[k+1,:]*u[k+1,:] + 0.5*10*h[k+1,:]*h[k+1,:] -------------------------------------------------------------------------------- /python/RiemannSolver/Shallow1dSlopeLaxFriedrichs.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | nmax = 16 3 | tmax = 100 4 | h = np.ones((tmax,nmax)) 5 | for i in range(0,4): 6 | h[0,i] = 2 7 | 8 | u = np.zeros((tmax,nmax)) 9 | U1 = np.zeros((tmax,nmax)) 10 | U2 = np.zeros((tmax,nmax)) 11 | F1 = np.zeros((tmax,nmax)) 12 | F2 = np.zeros((tmax,nmax)) 13 | z = np.zeros(nmax + 1) 14 | H = np.zeros((tmax,nmax)) 15 | 16 | z[5] = 1 17 | z[6] = 2 18 | z[7] = 3 19 | z[8] = 2 20 | z[9] = 1 21 | U1[0,:] = h[0,:] 22 | U2[0,:] = F1[0,:] = h[0,:]*u[0,:] 23 | F2[0,:] = h[0,:]*u[0,:]*u[0,:] + 0.5*10*h[0,:]*h[0,:] 24 | 25 | f1 = np.zeros((tmax,nmax+1)) 26 | f2 = np.zeros((tmax,nmax+1)) 27 | 28 | cfl = 0.8 29 | dx = 0.25 30 | 31 | for k in range(0,tmax-1): 32 | dt = cfl*dx/max(abs(u[k,:]) + np.sqrt(abs(10*h[k,:]))) 33 | for i in range(0,nmax+1): 34 | if(i == 0): 35 | f1[k,i] = F1[k,i] 36 | f2[k,i] = F2[k,i] 37 | elif(i == nmax): 38 | f1[k,i] = F1[k,i-1] 39 | f2[k,i] = F2[k,i-1] 40 | else: 41 | f1[k,i] = 0.5*(F1[k,i]+F1[k,i-1]) - 0.5*cfl*dx/dt * (U1[k,i] - U1[k,i-1]) 42 | f2[k,i] = 0.5*(F2[k,i]+F2[k,i-1]) - 0.5*cfl*dx/dt * (U2[k,i] - U2[k,i-1]) 43 | 44 | for i in range(0,nmax): 45 | U1[k+1,i] = U1[k,i] - dt/dx * (f1[k,i+1] - f1[k,i]) 46 | U2[k+1,i] = U2[k,i] - dt/dx * (f2[k,i+1] - f2[k,i]) - dt * 10 * h[k,i] * (z[i+1] - z[i]) 47 | 48 | h[k+1,:] = U1[k+1,:] 49 | u[k+1,:] = U2[k+1,:]/U1[k+1,:] 50 | F1[k+1,:] = U2[k+1,:] 51 | F2[k+1,:] = h[k+1,:]*u[k+1,:]*u[k+1,:] + 0.5*10*h[k+1,:]*h[k+1,:] 52 | 53 | for i in range(0,nmax): 54 | H[k,i] = h[k,i] + z[i] -------------------------------------------------------------------------------- /python/SIMPLE/Poisson1d.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | nmax = 7 3 | tmax = 1000 4 | v = np.zeros((nmax-1)) 5 | v2 = np.zeros((nmax-1)) 6 | div = np.zeros((nmax)) 7 | div2 = np.zeros((nmax)) 8 | dx = 0.1 9 | for i in range(1,nmax-2): 10 | v[i] = i+1#这步假设了一个初始有散度的速度场 11 | for i in range(1,nmax-1): 12 | div[i] = (v[i]-v[i-1])/dx 13 | p = np.zeros((tmax,nmax)) 14 | for t in range(0,tmax-2): 15 | for i in range(1,nmax-1): 16 | term = (p[t,i-1] + p[t,i+1] - dx*dx*div[i])/2 17 | p[t+1,i] = p[t,i] + (term - p[t,i]) 18 | for i in range(0,nmax-1): 19 | v2[i] = v[i] + (p[t,i] - p[t,i+1])/dx 20 | for i in range(1,nmax-1):#重新计算散度,应当是零 21 | div2[i] = (v2[i]-v2[i-1])/dx -------------------------------------------------------------------------------- /python/SIMPLE/Poisson2d.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | #压力泊松方程交错网格二维示例,作者:光影帽子 3 | nmax = 4#宽X轴 4 | mmax = 6#高Y轴 5 | tmax = 1000 6 | u = np.zeros((nmax+1,mmax+2)) 7 | v = np.zeros((nmax+2,mmax+1)) 8 | p = np.zeros((nmax+2,mmax+2)) 9 | div = np.zeros((nmax+2,mmax+2)) 10 | dx = 1/nmax 11 | dy = 1/mmax 12 | u2 = np.zeros((nmax+1,mmax+2)) 13 | v2 = np.zeros((nmax+2,mmax+1)) 14 | div2 = np.zeros((nmax+2,mmax+2)) 15 | for i in range(1,nmax): 16 | for j in range(1,mmax+1): 17 | u[i,j] = j 18 | for i in range(1,nmax+1): 19 | for j in range(1,mmax): 20 | v[i,j] = i 21 | for i in range(1,nmax+1): 22 | for j in range(1,mmax+1): 23 | div[i,j] = (u[i,j] - u[i-1,j])/dx + (v[i,j] - v[i,j-1])/dy 24 | for t in range(0,tmax-2): 25 | for i in range(1,nmax+1): 26 | for j in range(1,mmax+1): 27 | term = (p[i+1,j] + p[i-1,j])*dy*dy + (p[i,j+1] + p[i,j-1])*dx*dx - dx*dx*dy*dy*div[i,j] 28 | p[i,j] = p[i,j] + (term/(2*(dx*dx + dy*dy)) - p[i,j]) 29 | for i in range(0,nmax+1): 30 | for j in range(0,mmax+2): 31 | u2[i,j] = u[i,j] + (p[i,j] - p[i+1,j])/dx 32 | for i in range(0,nmax+2): 33 | for j in range(0,mmax+1): 34 | v2[i,j] = v[i,j] + (p[i,j] - p[i,j+1])/dy 35 | for i in range(1,nmax+1): 36 | for j in range(1,mmax+1): 37 | div2[i,j] = (u2[i,j] - u2[i-1,j])/dx + (v2[i,j] - v2[i,j-1])/dy -------------------------------------------------------------------------------- /python/SIMPLE/Poisson2dBoundary.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | #压力泊松方程交错网格二维示例,梯度为零边界条件 3 | nmax = 4#宽X轴 4 | mmax = 6#高Y轴 5 | tmax = 1000 6 | u = np.zeros((nmax+1,mmax+2)) 7 | v = np.zeros((nmax+2,mmax+1)) 8 | p = np.zeros((nmax+2,mmax+2)) 9 | div = np.zeros((nmax+2,mmax+2)) 10 | dx = 1/nmax 11 | dy = 1/mmax 12 | u2 = np.zeros((nmax+1,mmax+2)) 13 | v2 = np.zeros((nmax+2,mmax+1)) 14 | div2 = np.zeros((nmax+2,mmax+2)) 15 | for i in range(1,nmax): 16 | for j in range(1,mmax+1): 17 | u[i,j] = j 18 | for i in range(1,nmax+1): 19 | for j in range(1,mmax): 20 | v[i,j] = i 21 | total = 0 22 | for i in range(1,nmax+1): 23 | for j in range(1,mmax+1): 24 | div[i,j] = (u[i,j] - u[i-1,j])/dx + (v[i,j] - v[i,j-1])/dy 25 | total += div[i,j] 26 | 27 | # 注意,在应用梯度为零的边界条件后,想要压力还能收敛,需要让迭代之前的速度总散度为零 28 | # 也就是上方的total = 0 29 | for t in range(0,tmax-2): 30 | for i in range(1,nmax+1): 31 | for j in range(1,mmax+1): 32 | term = (p[i+1,j] + p[i-1,j])*dy*dy + (p[i,j+1] + p[i,j-1])*dx*dx - dx*dx*dy*dy*div[i,j] 33 | p[i,j] = p[i,j] + (term/(2*(dx*dx + dy*dy)) - p[i,j]) 34 | p[0,:] = p[1,:] 35 | p[nmax+1,:] = p[nmax,:] 36 | p[:,0] = p[:,1] 37 | p[:,mmax+1] = p[:,mmax] 38 | for i in range(0,nmax+1): 39 | for j in range(0,mmax+2): 40 | u2[i,j] = u[i,j] + (p[i,j] - p[i+1,j])/dx 41 | for i in range(0,nmax+2): 42 | for j in range(0,mmax+1): 43 | v2[i,j] = v[i,j] + (p[i,j] - p[i,j+1])/dy 44 | for i in range(1,nmax+1): 45 | for j in range(1,mmax+1): 46 | div2[i,j] = (u2[i,j] - u2[i-1,j])/dx + (v2[i,j] - v2[i,j-1])/dy -------------------------------------------------------------------------------- /python/SIMPLE/PoissonWeight1d.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | nmax = 7 3 | tmax = 1000 4 | v = np.zeros((nmax-1)) 5 | v2 = np.zeros((nmax-1)) 6 | div = np.zeros((nmax)) 7 | div2 = np.zeros((nmax)) 8 | dx = 1 9 | for i in range(1,nmax-2): 10 | v[i] = i#这步假设了一个初始有散度的速度场 11 | for i in range(1,nmax-1): 12 | div[i] = (v[i]-v[i-1])/dx 13 | p = np.zeros((tmax,nmax)) 14 | left = np.ones((nmax)) 15 | right = np.ones((nmax)) 16 | left[4] = 2 17 | right[3] = 2 18 | for t in range(0,tmax-2): 19 | for i in range(1,nmax-1): 20 | term = (left[i]*p[t,i-1] + right[i]*p[t,i+1] - dx*dx*div[i])/(left[i] + right[i]) 21 | p[t+1,i] = p[t,i] + (term - p[t,i]) 22 | for i in range(0,nmax-1): 23 | v2[i] = v[i] - right[i]*(p[t,i+1] - p[t,i]) 24 | for i in range(1,nmax-1):#重新计算散度,应当接近零 25 | div2[i] = v2[i]-v2[i-1] 26 | div2[i] = div[i] - (p[t,i-1] - p[t,i])*left[i]*dx - (p[t,i+1] - p[t,i])*right[i]*dx -------------------------------------------------------------------------------- /python/SIMPLE/PoissonWeight2d.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | #压力泊松方程交错网格二维示例,作者:光影帽子 3 | nmax = 4#宽X轴 4 | mmax = 6#高Y轴 5 | tmax = 1000 6 | u = np.zeros((nmax+1,mmax+2)) 7 | v = np.zeros((nmax+2,mmax+1)) 8 | p = np.zeros((nmax+2,mmax+2)) 9 | div = np.zeros((nmax+2,mmax+2)) 10 | dx = 1/nmax 11 | dy = 1/mmax 12 | u2 = np.zeros((nmax+1,mmax+2)) 13 | v2 = np.zeros((nmax+2,mmax+1)) 14 | div2 = np.zeros((nmax+2,mmax+2)) 15 | n = np.ones((nmax+2,mmax+2)) 16 | s = np.ones((nmax+2,mmax+2)) 17 | w = np.ones((nmax+2,mmax+2)) 18 | e = np.ones((nmax+2,mmax+2)) 19 | n[2,2] = 5 20 | s[2,3] = 5 21 | for i in range(1,nmax): 22 | for j in range(1,mmax+1): 23 | u[i,j] = j 24 | for i in range(1,nmax+1): 25 | for j in range(1,mmax): 26 | v[i,j] = i 27 | for i in range(1,nmax+1): 28 | for j in range(1,mmax+1): 29 | div[i,j] = (u[i,j] - u[i-1,j])/dx + (v[i,j] - v[i,j-1])/dy 30 | for t in range(0,tmax-2): 31 | for i in range(1,nmax+1): 32 | for j in range(1,mmax+1): 33 | term = (e[i,j]*p[i+1,j] + w[i,j]*p[i-1,j])*dy*dy + (n[i,j]*p[i,j+1] + s[i,j]*p[i,j-1])*dx*dx 34 | p[i,j] = (term - dx*dx*dy*dy*div[i,j])/((e[i,j] + w[i,j])*dy*dy + (n[i,j] + s[i,j])*dx*dx) 35 | for i in range(0,nmax+1): 36 | for j in range(0,mmax+2): 37 | u2[i,j] = u[i,j] + (p[i,j] - p[i+1,j])/dx*e[i,j] 38 | for i in range(0,nmax+2): 39 | for j in range(0,mmax+1): 40 | v2[i,j] = v[i,j] + (p[i,j] - p[i,j+1])/dy*n[i,j] 41 | for i in range(1,nmax+1): 42 | for j in range(1,mmax+1): 43 | div2[i,j] = (u2[i,j] - u2[i-1,j])/dx + (v2[i,j] - v2[i,j-1])/dy -------------------------------------------------------------------------------- /python/SpectralMethod/DFT1Dexample.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | nmax = 4 3 | arr = np.zeros((nmax),dtype=complex) 4 | for i in range(0,nmax): 5 | arr[i] = i + 1 6 | libres = np.fft.fft(arr)#调用库函数的结果,最终和dftres一样 7 | idftres = np.zeros((nmax),dtype=complex)#正变换后加反变换的结果,应该和原始arr一样 8 | dftres = np.zeros((nmax),dtype=complex) 9 | # DFT 10 | for x0 in range(0,nmax): 11 | for x1 in range(0,nmax): 12 | dftres[x0] += arr[x1]*np.exp(-2j*np.pi*(x0 * x1 / nmax)) 13 | # IDFT 14 | for x0 in range(0,nmax): 15 | for x1 in range(0,nmax): 16 | idftres[x0] += dftres[x1]*np.exp(-2j*np.pi*(x0 * x1 / nmax))/nmax -------------------------------------------------------------------------------- /python/SpectralMethod/DFT2Dexample.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | nmax = 4 3 | mmax = 4 4 | arr = np.zeros((nmax,mmax),dtype=complex) 5 | for i in range(0,nmax): 6 | for j in range(0,mmax): 7 | arr[i,j] = i + j + 1 8 | libres = np.fft.fft2(arr)#调用库函数的结果,最终和dftres一样 9 | idftres = np.zeros((nmax,mmax),dtype=complex)#正变换后加反变换的结果,应该和原始arr一样 10 | dftres = np.zeros((nmax,mmax),dtype=complex) 11 | # 二维离散傅里叶变换 12 | for y0 in range(0,mmax): 13 | for x0 in range(0,nmax): 14 | for y1 in range(0,mmax): 15 | for x1 in range(0,nmax): 16 | dftres[x0,y0] += arr[x1,y1]*np.exp(-2j*np.pi*(x0 * x1 / nmax + y0 * y1 / mmax)) 17 | # 二维离散傅里叶逆变换 18 | for y0 in range(0,mmax): 19 | for x0 in range(0,nmax): 20 | for y1 in range(0,mmax): 21 | for x1 in range(0,nmax): 22 | idftres[x0,y0] += dftres[x1,y1]*np.exp(2j*np.pi*(x0 * x1 / nmax + y0 * y1 / mmax))/nmax/mmax -------------------------------------------------------------------------------- /python/SpectralMethod/FFT1Dexample.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | level = 3 # 需要将矩阵扩大3次,1->2,2->4,4->8 3 | nmax = 2**level 4 | arr = np.zeros((nmax),dtype=complex) 5 | arr2 = np.zeros((nmax),dtype=complex) 6 | for i in range(0,nmax): 7 | arr[i] = i + 1 8 | libres = np.fft.fft(arr)#调用库函数的结果,最终和dftres一样 9 | dftres = arr.copy() 10 | # DFT 11 | for level0 in range(0,level): 12 | # 现在算出了2**level0的矩阵,要计算2**(level0 + 1)的矩阵 13 | even = 0 # 这部分算得相同 14 | odd = 0 # 这部分算得不同 15 | maxi = 2**level0 16 | interval = nmax//maxi 17 | for i in range(0,maxi): 18 | even = dftres[i] # 蝴蝶变换中,偶数项上个level已经计算好,直接复制就行 19 | odd = 0 20 | # 蝴蝶变换 21 | for j in range(0,nmax,interval): 22 | idx = j + interval//2 23 | # 奇数项需要重新计算,也就是在上个level中计算好的两列正中间的那一列 24 | odd += arr[idx] * np.exp(-2j*np.pi*idx*i/nmax) 25 | # 消去引理 26 | dftres[i] = even + odd 27 | dftres[i + maxi] = even - odd 28 | 29 | # IDFT 30 | idftres = dftres.copy()/nmax 31 | for level0 in range(0,level): 32 | maxi = 2**level0 33 | for i in range(0,maxi): 34 | odd = 0 35 | for j in range(0,nmax,nmax//maxi): 36 | idx = j + nmax//maxi//2 37 | odd += dftres[idx] * np.exp(2j*np.pi*idx*i/nmax)/nmax 38 | idftres[i] += odd 39 | idftres[i + maxi] = idftres[i] - 2*odd -------------------------------------------------------------------------------- /python/SpectralMethod/testkdv.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | nmax = 256 3 | tmax =100 4 | dt = 0.4/nmax/nmax 5 | x = np.zeros((nmax)) 6 | for i in range(0,nmax): 7 | x[i] = 2*np.pi/nmax*(i - nmax/2) 8 | A = 25 9 | B = 16 10 | u = np.zeros((tmax,nmax)) 11 | for i in range(0,nmax): 12 | u[0,i] = 3*A*A*1/np.cosh(0.5*(A*(x[i]+2)))**2 13 | u[0,i] += 3*B*B*1/np.cosh(0.5*(B*(x[i]+1)))**2 14 | v = np.fft.fft(u[0,:]) 15 | k = np.zeros((nmax)) 16 | for i in range(0,nmax): 17 | k[i] = i 18 | if i == nmax//2: 19 | k[i] = 0 20 | elif i > nmax//2: 21 | k[i] = i - nmax 22 | udata = u 23 | tdata = 0 24 | for t in range(0,tmax-1): 25 | g = -0.5*1j*dt*k 26 | ik3 = 1j * k * k * k 27 | te = np.zeros((nmax),dtype = complex) 28 | me = np.zeros((nmax),dtype = complex) 29 | for i in range(0,nmax): 30 | te[i] = dt/2*1j*k[i]**3 31 | me[i] = np.exp(te[i]) 32 | E2 = me*me 33 | rk0 = g * np.fft.fft(np.fft.ifft(v).real**2) 34 | rk1 = g * np.fft.fft(np.fft.ifft(me*(v + rk0/2)).real**2) 35 | rk2 = g * np.fft.fft(np.fft.ifft(me*v + rk1/2).real**2) 36 | rk3 = g * np.fft.fft(np.fft.ifft(E2*v + me*rk2).real**2) 37 | v = E2 * v + (E2 * rk0 + 2 * me * (rk1 + rk2) + rk3)/6 38 | test = 1 39 | u[t+1,:] = np.fft.ifft(v).real 40 | 41 | -------------------------------------------------------------------------------- /python/VolumeOfFluid/Conservation2d.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | nmax = 8 3 | mmax = 8 4 | f = np.zeros((nmax,mmax)) 5 | 6 | n = np.zeros((nmax,mmax)) 7 | fx = np.zeros((nmax,mmax)) 8 | fy = np.zeros((nmax,mmax)) 9 | 10 | tmax = 1 11 | alpha = 2 12 | for t in range(0,tmax): 13 | 14 | for i in range(1,nmax-1): 15 | for j in range(1,mmax-1): 16 | fw = (f[i-1,j-1] + alpha*f[i-1,j] + f[i-1,j+1])/(2 + alpha) 17 | fe = (f[i+1,j-1] + alpha*f[i+1,j] + f[i+1,j+1])/(2 + alpha) 18 | fn = (f[i-1,j+1] + alpha*f[i,j+1] + f[i+1,j+1])/(2 + alpha) 19 | fs = (f[i-1,j-1] + alpha*f[i,j-1] + f[i+1,j-1])/(2 + alpha) 20 | fx[i,j] = (fw - fe)/2 21 | fy[i,j] = (fn - fs)/2 22 | -------------------------------------------------------------------------------- /python/VolumeOfFluid/c02.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clatterrr/FluidSimulationTutorialsUnity/f5d269d57576a7f579a6797f8c74079ff5199baf/python/VolumeOfFluid/c02.gif -------------------------------------------------------------------------------- /python/VortexMethod/PoissonStreamFunction.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | #涡方法中的流函数涡方程 3 | #https://zhuanlan.zhihu.com/p/345332340 4 | nmax = 8 5 | psi = np.zeros((nmax,nmax)) 6 | v = np.zeros((nmax,nmax)) 7 | u = np.zeros((nmax,nmax)) 8 | omega = np.zeros((nmax,nmax)) 9 | dx = dy = 1 10 | omega[3,3] = 1#涡量为正则逆时针旋转 11 | for k in range(0,100): 12 | for i in range(1,nmax-1): 13 | for j in range(1,nmax-1): 14 | term = (psi[i+1,j] + psi[i-1,j])*dy*dy + (psi[i,j+1] + psi[i,j-1])*dx*dx 15 | psi[i,j] = (term + omega[i,j])/(2*(dx*dx + dy*dy)) 16 | for i in range(1,nmax-1): 17 | for j in range(1,nmax-1): 18 | u[i,j] = (psi[i,j+1] - psi[i,j-1])/(2*dy) 19 | v[i,j] = (psi[i-1,j] - psi[i+1,j])/(2*dx) -------------------------------------------------------------------------------- /python/VortexMethod/VortexMethodLidDrivenCavity.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | #涡方法模拟顶盖驱动流 3 | #https://zhuanlan.zhihu.com/p/345332340 4 | nmax = 8 5 | psi = np.zeros((nmax,nmax)) 6 | v = np.zeros((nmax,nmax)) 7 | u = np.zeros((nmax,nmax)) 8 | omega = np.zeros((nmax,nmax)) 9 | w = np.zeros((nmax,nmax)) 10 | dx = dy = dt = 1 11 | uwall = 1 12 | Re = 10 13 | for k1 in range(0,200): 14 | for i in range(1,nmax-1):#用中心差分计算涡量运输方程 15 | for j in range(1,nmax-1): 16 | w[i,j] = -(psi[i,j+1] - psi[i,j-1])/(2*dy)*(omega[i+1,j] - omega[i-1,j])/(2*dx) 17 | w[i,j] += (psi[i+1,j] - psi[i-1,j])/(2*dx)*(omega[i,j+1] - omega[i,j-1])/(2*dy) 18 | w[i,j] += 1/Re*(omega[i+1,j] -2*omega[i,j] + omega[i-1,j])/(dx*dx) 19 | w[i,j] += 1/Re*(omega[i,j+1] -2*omega[i,j] + omega[i,j-1])/(dy*dy) 20 | for i in range(1,nmax-1): 21 | for j in range(1,nmax-1): 22 | omega[i,j] += dt*w[i,j] 23 | omega[0,:] = -2*psi[1,:]/(dx*dx)#左面 24 | omega[nmax-1,:] = -2*psi[nmax-2,:]/(dx*dx)#右面 25 | omega[:,nmax-1] = -2*(psi[:,nmax-2])/(dy*dy) - uwall*2/dy#上面 26 | omega[:,0] = -2*psi[:,1]/(dy*dy)#下面 27 | for k2 in range(0,100):#泊松方程求解流函数 28 | for i in range(1,nmax-1): 29 | for j in range(1,nmax-1): 30 | term = (psi[i+1,j] + psi[i-1,j])*dy*dy + (psi[i,j+1] + psi[i,j-1])*dx*dx 31 | psi[i,j] = (term + omega[i,j])/(2*(dx*dx + dy*dy)) 32 | for i in range(1,nmax-1): 33 | for j in range(1,nmax-1): 34 | u[i,j] = (psi[i,j+1] - psi[i,j-1])/(2*dy) 35 | v[i,j] = (psi[i-1,j] - psi[i+1,j])/(2*dx) 36 | u[:,nmax-1] = uwall -------------------------------------------------------------------------------- /python/approx.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import matplotlib.pyplot as plt 3 | #定义x、y散点坐标 4 | nx = 3 5 | x = np.array([0,1,2]) 6 | print('x is :\n',x) 7 | num = [1,1.125,1.875] 8 | y = np.array(num) 9 | print('y is :\n',y) 10 | #用3次多项式拟合 11 | f1 = np.polyfit(x, y, 2) 12 | print('f1 is :\n',f1) 13 | 14 | p1 = np.poly1d(f1) 15 | print('p1 is :\n',p1) 16 | #也可使用yvals=np.polyval(f1, x) 17 | yvals = p1(x) #拟合y值 18 | print('yvals is :\n',yvals) 19 | #绘图 20 | plot1 = plt.plot(x, y, 's',label='original values') 21 | plot2 = plt.plot(x, yvals, 'r',label='polyfit values') 22 | plt.xlabel('x') 23 | plt.ylabel('y') 24 | plt.title('polyfitting') 25 | plt.show() 26 | nmax = nx * 10 27 | res = np.zeros((nmax)) 28 | newx = np.zeros((nmax)) 29 | for i in range(0,nmax): 30 | newx[i] = i / 10 + x[0] 31 | for j in range(0,nx): 32 | res[i] += f1[nx-j-1]*(newx[i]**j) 33 | plot1 = plt.plot(newx, res, 's',label='original values') 34 | plt.show() --------------------------------------------------------------------------------