12 Matching Annotations
  1. Jun 2024
    1. Dataset_generator.m

      256256的图片分成8块, 每块3535,在这些边缘先产生随机位移,然后将位移插值即8块中的每一块中间的位移是插值产生的

  2. May 2024
    1. Ill-conditioned or ill-posed problem

      上述段落讨论了当面对一个线性求解表现差的情况时,其中一个可能的原因是数学问题本身条件差(ill-conditioned)或提出的问题不适定(ill-posed)。以下是对此段落的逐点解释:

      诊断和解决条件差的系统:

      • 当一个系统的数学条件差,数值求解会变得困难,残差难以在所有变量和自由度上均匀减少。一个常见的解决途径是对方程进行缩放(Scaling)。
      • 对于少于10,000个非线性自由度(1000个更理想)的小问题,可以使用奇异值分解(Singular Value Decomposition, SVD)来计算奇异值的数量和条件数(即最大奇异值与最小奇异值的比率)。

      SVD监视器的输出:

      • 如果SVD监视器报告任何奇异值为零,则问题是不适定的。这通常意味着可能忘记了一个边界条件、在核函数上的一个子域限制,或者当前的解(或初始化)位于一个鞍点。
      • 如果SVD监视器报告了一个大的条件数,则问题是条件差的。这意味着数值求解会变得困难。
      • 使用MOOSE创建的笛卡尔网格可以帮助减小问题的规模。

      运用PETSc的选项来启动SVD监视器:

      [Executioner] petsc_options = '-pc_svd_monitor' petsc_options_iname = '-pc_type' petsc_options_value = 'svd'

      对于大型问题:

      • 对于规模较大的问题,可以考虑使用特征值(eigenvalues)来达到类似的结论。使用以下PETSc选项来近似计算问题的特征值:

      -ksp_compute_eigenvalues -ksp_gmres_restart 1000 -pc_type none

      Krylov子空间迭代和特征值:

      • Krylov子空间迭代次数在重启前越多,你计算得到的特征值也越多。但是随着这个数的增加,内存成本也会线性增长。
      • 任何为零的特征值会引起与零奇异值相同的问题。
      • 特征值的大小和值有助于理解哪种预处理器可能适用,这取决于问题是椭圆型的(elliptic)、抛物型的(parabolic)还是双曲型的(hyperbolic)。

      总之,对于一个条件差或不适定的问题,适当的诊断是解决困难的第一步。确保数学模型是有意义的,并且你已经为它配置了适当的数值求解和预处理策略。对于条件差的情况,缩放方程可能有助于改善数值求解过程。对于不适定的情况,则需要确保所有必要的数学和物理限制都已适当地引入模型中。

    2. Incorrect Jacobian

      上述内容介绍了如何诊断和处理雅可比矩阵(Jacobian matrix)不准确的情况,这是求解非线性方程组时可能会遇到的一个问题。雅可比矩阵在牛顿法(Newton's method)和预条件雅克比不完全牛顿法(PJFNK)中都有重要的作用。下面是对上述段落的逐点解释:

      牛顿法和雅可比矩阵

      • 在牛顿法中,线性求解实际上相当于是雅可比矩阵的逆和残差向量的乘积(通常并不直接形成显式逆矩阵)。因此,雅可比矩阵的准确性至关重要,不准确的雅可比矩阵可能导致求解不收敛。

      预条件雅克比不完全牛顿法 (PJFNK)

      • 在PJFNK中,线性系统是通过计算雅可比矩阵的作用(action)而不是计算雅可比矩阵本身来形成的。但预处理过程通常依赖于形成雅可比矩阵。默认情况下,为了预处理只计算雅可比矩阵的对角项。如果要形成完整的雅可比矩阵(包括非对角线上变量耦合项),可以使用如下语法:

      [Preconditioning] [smp] type = SMP full = true [] []

      检查雅可比矩阵是否不准确

      • 可以通过使用有限差分法(finite differencing)预处理器替换雅可比矩阵来进行一个基本检查。这将替换所有核和边界条件中的::computeJacobian调用,使用有限差分计算残差。如果这个简单的操作修复了一个收敛性差的问题,则表明原本的雅可比矩阵是不准确的,需要修复。

      [Preconditioning] [./FDP] type = FDP [../] []

      更高级的检查和修复雅可比矩阵

      • 使用雅可比分析工具(Jacobian analysis utilities)进行更高级的检查,并进一步修复雅可比矩阵。这些工具可以指出雅可比矩阵中不准确或缺失的项,例如可能诊断出缺失的变量耦合项。对于小问题,雅可比矩阵的不足之处也可以通过命令行选项-snes_test_jacobian和-snes_test_jacobian_view来调查。结合DOFMap输出,可以相似地用来诊断雅可比矩阵的问题区域。一旦识别出错误,就需要重新从方程的弱形式导出雅可比矩阵。

      自动微分 (AD) 的注释

      • 如果你使用的代码依赖于自动微分(AD)来形成残差,那么雅可比矩阵之所以不准确只可能是因为代码中的错误。即便如此,检查也无妨。请注意,AD核(kernel)可以与常规核混合使用。

      以上内容强调了雅可比矩阵在有效求解非线性问题中的重要性,以及在出现问题时如何检查和修正雅可比矩阵。正确的雅可比矩阵对于迭代求解过程的快速收敛是必要的。如果排除了编码错误,自动微分可以确保在形成残差时也获得准确的雅可比矩阵

    3. turning off

      通过控制系统暂时关闭一些物理现象 (turning off some physics through the Controls system)

      有些方程可能由于特定物理现象(如对流)是奇异的、有鞍点的、条件差的,或者简单地不在求解器能够处理的双曲/椭圆范畴内,特别是在初始化设置不好的情况下。可以在模拟过程中动态修改这些方程。核函数(Kernels)可以根据需要在模拟的不同部分被开启或关闭。

      在下面的示例中,我们在0秒到0.49秒之间开启Diff0核函数,之后将其关闭并启用Diff1核函数。

      • [Kernels]下定义了两种不同的扩散核函数diff0和diff1,它们对应于不同的系数。还定义了一个关于时间的导数项。
      • [Controls]块使用TimePeriod类型控制在指定的时间段启用或禁用这些核函数。

      通过这种方式,求解器能够在计算的不同阶段调整所使用的物理模型,帮助避免计算不稳定。

    4. diagonal damping

      对角线阻尼 (diagonal damping)

      这是一个用来稳定牛顿法(Newton method)中使用非线性搜索时的求解过程的技术。通过调整线搜索(line search)策略,我们可以在非线性搜索时进行较慢的更新。

      • [Executioner]:这是目标执行模块的配置。
      • line_search = 'basic':使用基本的线搜索算法。
      • petsc_options_iname和 petsc_options_value:这些设置用来指定PETSc求解器的选项名称和值。这里通过-snes_linesearch_damping设置线搜索阻尼参数为0.5。
    5. pseudo-transient relaxation

      在伪瞬态放松(pseudo-transient relaxation)的上下文中,该文本描述的是一种处理数值求解难题的方法,特别适用于稳态问题难以求解,或者瞬态问题难以初始化的情况。

      伪瞬态放松

      有一些问题作为瞬态问题求解会更容易,而求解稳态则更为困难。还有些瞬态问题在初始化阶段难以设定初始条件。对于这类问题,可以通过在初始化阶段使用定制的伪瞬态放松来获益。

      在这段文本中,建议了以下几种处理方法:

      1. 采用慢速增长的时间步长:

      这种方法利用时间步长的慢速增加来帮助问题逐步达到稳态解。这里提到了IterationAdaptiveDT时间步长调整方法,它允许从一个较小的时间步长开始,并随着迭代的进行自动增加时间步长,以加速到达稳态的过程。

      1. 配置使用IterationAdaptiveDT:

      在配置文件的[./TimeStepper]块中:

      • type = IterationAdaptiveDT:指定了使用迭代自适应时间步长调整方法。
      • optimal_iterations = 10:设定在时间步长增加之前允许的理想迭代次数是10。
      • dt = 1.0:指定了起始的时间步长为1.0。

      这意味着系统会从一个较小的时间步长开始,如果连续迭代次数低于或等于10次,时间步长将会增加,以促进求解过程的收敛。

      1. 定义自定义的放松:

      对于定制的放松,你可以为每个变量的时间导数乘以一个不同的因子。这可以帮助控制每个变量随时间的变化率,从而有针对性地让求解过程更平滑、更稳定。

      综上所述,伪瞬态放松是一种数值技巧,可以在求解过程中暂时改变问题的性质,以帮助初始化并稳定计算,然后逐步过渡到原始问题的真实性质,这样做的好处是能够提高收敛速度,并避免了直接面对可能导致数值不稳定的困难问题。

    1. use_current_history_variable

      表示在裂纹应力的计算过程中,是否使用当前的历史变量。历史变量通常指的是与材料点相关的、随时间而演变的量,它可以用来追踪材料内部的损伤、塑性变形或者任何其它的内部状态变化。

      具体来说,在裂纹力学的数值模拟中,"当前历史变量"可能表示当前的裂纹开度或者裂纹尖端的应力强度因子。这些信息可以从以前的计算步中得到,用于帮助判断材料是否发生破坏。

      因此,启用use_current_history_variable选项意味着计算将会考虑材料的历史响应以及任何之前步骤中计算并存储的状态信息,以此为基础进行裂纹应力的精确计算。这样可以确保数值模拟中考虑到材料的破坏进程,以及裂纹的增长和开闭状态对材料性能的影响。

    1. coordinate system aware logic

      通常指的是计算过程中所用的核心算法能够识别并适应不同的坐标系统。在有限元分析软件的“Tensor Mechanics”模块中,这种逻辑确保应力散度(stress divergence)的计算考虑到了模型可能使用的坐标系统(比如笛卡尔坐标、圆柱坐标或球坐标系),从而能正确应用于不同形状和对称性的问题。

    1. coordinate system aware logic

      通常指的是计算过程中所用的核心算法能够识别并适应不同的坐标系统。在有限元分析软件的“Tensor Mechanics”模块中,这种逻辑确保应力散度(stress divergence)的计算考虑到了模型可能使用的坐标系统(比如笛卡尔坐标、圆柱坐标或球坐标系),从而能正确应用于不同形状和对称性的问题。

  3. Mar 2022
  4. Apr 2018
    1. pseudopotential includes core electrons

      Norm有核电子