[笔记2.1]学习AFEPack的例程

二维泊松方程的虚拟有限元方法数值分析 该文章是对齐次边界条件的二维泊松方程的虚拟有限元方法的误差分析,是参考了别人文章,并对证明过程细化,基本自成体系,读者再需要一些不等式的知识,比如柯西不等式、柯西施瓦茨不等式、庞加来不等式即可。想学习虚拟有限元的可以作为参考,在文章最后给了刚度矩阵和荷载向量的计算公式。不尽之处还望指出! 立即下载
 [学习例程1]:/usr/local/AFEPack/example/possion_equation/
问题:-/Delta u = f     u |_{/partial /Omega} = u_b

***** $ls
CVS  D.d  Makefile  possion_equation.cfg  possion_equation.cpp  possion_equation.net  README  run
------------------------------------------------------------------------------------
***** README (运行步骤)
This example will solve a Possion equation on an easymesh generated data.
The obtained solution 
is saved in file "u.dx".

Usage:
    
1. compile with make [-e debug=no];
    
2. generate the mesh with easymesh as:
         easymesh D
    
3. run with ./run;
    
4. view the obtained numerical solution with OpenDX; 

[补充]
3. 本目录的例子只需运行 $ ./run 或者 $ ./main
(后者需要先设置环境变量 $ export AFEPACK_TEMPLATE_PATH=/usr/local/AFEPack/template/triangle,否则找不到读入文件的路径)
4. OpenDX ——> Edit Visual Programs...——> 选 possion_equation.net
(possion_equation.cfg 是OpenDx用到的配置文件)
双击FileSelector,(若需要)修改输出的数值解位置,保存
Execute ——> 选Execute Once

***** Makefile(略)

***** possion_equation.cpp(略)
可用 $ cat -n possion_equation.cpp 加上行号显示

***** D.d(EasyMesh输入文件,略)

***** run(shell脚本)
#! /bin/sh

export AFEPACK_PATH
="/usr/local/AFEPack"
export AFEPACK_TEMPLATE_PATH
="$AFEPACK_PATH/template/triangle"

exec .
/main $*

[补充](shell编程和环境变量,略)
$*:执行shell程序时,传递给程序的所有参数组成的一个字符串。
比如:
$ ./run D 实际是运行了 ./main D
$ ./run parameters are three
   此时 $* = parameters are three;$1 = parameters;$2 = are; $3 = three; $# = 3.
------------------------------------------------------------------------------------
***** 关于possion_equation.cpp的补充解释(详见[笔记2.2])
(1) Vector类(实现数值的 STL:vector)
65          Vector<double> right_hand_side;

template<typename number> class Vector;
位置:/usr/local/deal.II/lac/include/lac/vector.h 和 vector.templates.h

(2) 求解方程
73    AMGSolver solver(stiff_matrix);
74    solver.solve(solution, right_hand_side);    

[运行提示信息] 其中 failed to converge...,无大碍,唯不顺眼也
AMGSolver initializing ... OK! grid levels: 3
AMGSolver begin with initial residual 0.458239 ...
        failed to converge with residual 9.01090e-11 at step 21.

L2 error = 0.000629244

[原因] AMGSolver::solve是默认参数的函数,可将20放大,比如:
74行改为:solver.solve(solution, right_hand_side, 0, 0, 50);
class AMGSolver {
...
 
public:
  
void solve(Vector<double>& x,
         
const Vector<double>& r,
         
double tol = 0.0,
         unsigned 
int s = 0,
         unsigned 
int s1 = 20) const;
...
}
;
参数:
    x     the solution vector
    r     the right hand side vector
    tol     tolerence
    s       0: solve mode; 1: precondition mode
    s1     upper bound of iteration step

AMGSolver::solve 函数定义在:/usr/local/AFEPack/library/src/AMGSolver.cpp

[修改后结果]
73    AMGSolver solver(stiff_matrix);
74    solver.solve(solution, right_hand_side,0,0,50);    

AMGSolver initializing ... OK! grid levels: 3
AMGSolver begin with initial residual 0.458239 ...
        converge with residual 4.32514e-13 at step 27.

L2 error = 0.000629244

(3) 计算和精确解的L2误差(本例Dirichlet边界条件由精确解给出)
78          double error = Functional::L2Error(solution, FunctionFunction<double>(&u), 3);

(4) 计算解和近似精确解的误差(后述)

[学习例程2]:/usr/local/AFEPack/example/coefficient_possion_equation/
问题:-/nabla/cdot(A /nabla u) = f, 其中:A=(a_{ij})_{2*2}  
      u |_{/partial /Omega} = u_b

***** $ls
coefficient_possion_equation.cfg  coefficient_possion_equation.net  D.d       README
coefficient_possion_equation.cpp  CVS                               Makefile  run

如上例:.cfg .net是OpenDx文件。本例只需关注 .cpp文件
------------------------------------------------------------------------------------
***** 比较coefficient_possion_equation.cpp和possion_equation.cpp的不同之处:
(1) 增加2*2矩阵A的定义
(2) 两问题:possion_equation 和 coefficient_possion_equation 各自的单元刚度矩阵不同
故定义刚度矩阵的一个新派生类,虚函数 getElementMatrix(...) 重载基类的函数
class Matrix : public StiffMatrix<2, double>
{
    
public:
        Matrix(FEMSpace
<double,2>& sp) :
            StiffMatrix
<2,double>(sp) {};
        
virtual ~Matrix() {};
public:
    
virtual void getElementMatrix(const Element<double,2>& element0,
        
const Element<double,2>& element1,
        
const ActiveElementPairIterator<2>::State state);
}
;

[补充]:
1) C++允许子类的成员函数重载基类的成员函数
2) 运行时,依据类型确认调用哪个函数的能力称为多态性(polymorphism)
3) 为指明某个成员函数具有多态性,用virtual来标志其为虚函数

(3) 函数 void Matrix::getElementMatrix 的定义和 BilinearOperator.templates.h 文件中 StiffMatrix<DIM,value_type,DOW,TDIM>::getElementMatrix 定义类似,只是加进了系数A,可对比看

(4) 函数getElementMatrix是提供给stiff_matrix.build();内部调用的,所以:
possion_equation.cpp
    StiffMatrix<2,double> stiff_matrix(fem_space);
    stiff_matrix.algebricAccuracy() 
= 3;
    stiff_matrix.build();
改为 coefficient_possion_equation.cpp
    Matrix stiff_matrix(fem_space);
    stiff_matrix.algebricAccuracy() 
= 3;
    stiff_matrix.build();
AFEPack.pdf.tar.gz_AFEPack_moving mesh_有限元自适应_自适应有限元_自适应网格 用移动网格来实现自适应有限元方法,一个不错的软件包 立即下载

相关推荐

怎么用phpstudy制作网站

随着实践的深入,你会逐渐掌握更多高级技巧和技术,让你的网站变得更加完善和吸引人。现在你已经成功设置了你的本地Web服务器环境,接下来我们将指导你如何利用这个环境来创建一个简单的PHP网页项目。为了使网站更加动态且功能丰富,我们需要学会如何让PHP脚本与MySQL数据库交互。为了让网站看起来更专业美观,可以考虑引入CSS样式表来定制网页布局及视觉效果。当你对本地开发的网站感到满意后,下一步就是将其发布到互联网上供他人访问了。让我们进一步扩展我们的网站,加入一个简单的用户注册与登录系统。

2401_87999399的博客 6577

AFEPack 使用 Tutorial(一):解二维泊松方程

申明 这只是阅读了 AFEPack 自带的文档,并结合简单的 Poisson Equation 的理解。 今后需要使用 AFEPack,就吧这个做一个学习笔记。关于 AFEPack 的编译和安装方面笔记,以后再写。 关于 AFEPack AFEPack 是北大理学院李若教授写的一个开源 PDE 求解软件包。功能非常强大。 路径设置 AFEPack 编译完成后,需要设置以下的路径信息。 AFEPack 基础路径 该路径用于定义 AFEPack 源码所在。假设我们将 AFEPack 安装在 /usr/local

努力中的老周的专栏 1740

WPF实战:利用Live Charts实现高性能动态曲线可视化

本文详细介绍了如何在WPF中使用Live Charts实现高性能动态曲线可视化,特别适用于工业监控和金融分析等实时数据场景。通过增量渲染、内存复用和硬件加速等核心技术,Live Charts能够高效处理高频数据更新,显著提升图表流畅度。文章提供了从基础实现到工业级优化的完整解决方案,帮助开发者应对各种性能挑战。

weixin_29189373的博客 409

AFEPack 使用 Tutorial(三):解三维泊松方程

AFEPack Step by Step Tutorial 3: solve 3D Poisson Equation 这个 Tutorial 和前面两个不同。前面两个 Tutorial 都是 AFEPack 自带的例子,这个 Tutorial 可以认为是在 2D Poisson Equation 的基础上改进,将原来的 2D 方程变成 3D。 3D Poisson Equation 这里,三维泊松方程定义 {−Δu(x,y,z)=f(x,y,z),(x,y,z)∈Ωu(x,y,z)∣∂Ω=u0(x,y,z)

努力中的老周的专栏 3235

用LightRAG+Ollama搭建本地知识库:从文档上传到智能问答的完整流程

本文详细介绍了如何利用LightRAG与Ollama构建企业级本地知识库,涵盖从文档预处理到智能问答的完整流程。通过实战案例展示,该方案能高效处理海量文档,实现语义搜索与知识图谱关联分析,显著提升信息检索效率。特别适合金融、医疗等领域的技术团队快速搭建智能知识管理系统。

weixin_42535461的博客 215

【大模型】MHA,MQA,GQA及KV Cache详解

在自回归模型中(Autoregressive Models),模型会逐个生成文本的每个token,这个过程可能比较慢,因为模型一次只能生成一个token,而且每次新的预测都依赖于之前的上下文。这意味着,要预测第1000个token,你需要用到前999个token的信息,这通常涉及到对这些token的表示进行一系列矩阵乘法运算。而要预测第1001个token,你不仅需要前999个token的信息,还要加上第1000个token的信息。

酒酿小圆子呀~ 2616

软件介绍: AFEPack 软件 (李若, 刘文斌)

软件介绍: AFEPack 软件 (李若, 刘文斌)Date: Wed, 6 Oct 2004 12:32:00 +0800From: li ruo AFEPack 软件(作者:北京大学数学院, 李若)Website: http://dsec.pku.edu.cn/~rli1. 设计原则AFEPack 是刘文斌教授和作者开发的一个自适应有限元软件包。这个软件包的设计时候的基本用户对象是

HateCode的胡言乱语 4757

企业网络架构设计:从内网到外网的无缝通信方案

本文详细解析了企业网络架构设计中的关键技术与实践方案,重点介绍了VLAN划分、OSPF路由优化、安全策略及无线网络集成等核心内容。通过OSPF多区域部署和链路聚合技术,实现内网到外网的无缝通信,提升企业网络性能与安全性。文章还提供了具体的配置示例和最佳实践,助力企业构建高效可靠的网络架构。

weixin_28331555的博客 625

[笔记1.1]学习AFEPack起点准备

话说旁门左道始终不及名门正派,所以强烈推荐软件包作者的BLOG:http://rli.bloghome.cn/  !!!如上课一般讲解,娓娓道来。 [AFEPack学习起点]:The AFEPack Handbook : http://circus.math.pku.edu.cn/AFEPack/学习AFEPack使用的“Step by Step Tutorial”(英)http://circu

HateCode的胡言乱语 5153

操作系统权限提升(十五)之绕过UAC提权-基于白名单DLL劫持绕过UAC提权

先将操作在本地执行,使用procmon进行监控,过滤DLL和 NAME NOT FOUND ,寻找可以替换的DLL文件,注意文件的权限是否可以在目录写入,可以看到在C盘的tools目录的文件中有一个srrstr.dll被调用,但是没有加载,我们生成恶意的DLL文件看看是否可以被劫持。在Windows中许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库文件,即dll文件,放置于系统中,个人理解类似于我们编程中引入的模块。将我们生成的DLL文件改名为我们要劫持的DLL文件名。

把自己活成一道光,因为你不知道,谁会借着你的光,走出了黑暗。请保持心中的善良,因为你不知道,谁会借着你的善良,走出了绝望。请保持你心中的信仰,因为你不知道,谁会借着你的信仰,走出了迷茫。请相信自己的力量,因为你不知道,谁会因为相信你,开始相信了自己.... 1875

化工过程控制软件:Siemens PCS 7二次开发_(8).过程控制算法

在化工过程控制中,过程控制算法是实现自动化控制的关键技术之一。Siemens PCS 7 提供了丰富的控制算法库,但为了满足特定的工艺需求,往往需要进行二次开发。本节将详细介绍如何在 Siemens PCS 7 中进行过程控制算法的二次开发,包括常见的控制算法原理、实现方法和具体示例。

kkchenjj的博客 502

AFEPack:提升音频处理效率的新锐工具

AFEPack:提升音频处理效率的新锐工具 在数字时代,音频处理已经成为许多开发者、音乐制作人和媒体创作者不可或缺的一部分。今天我们要介绍的是一个高效便捷的音频处理库——AFEPack。这是一个由王鹤宇开发的开源项目,旨在简化音频文件的预处理和后处理工作,提供了一套全面而强大的函数集合。 项目简介 AFEPack 是基于 Python 的音频处理工具包,它包含了一系列对音频进行剪切、合并、压缩、音...

gitblog_00070的博客 532

SLAM 轨迹评估工具——EVO安装、使用介绍

evo是一款用于视觉里程计和SLAM问题的轨迹评估工具. 核心功能是能够绘制相机的轨迹, 或评估轨迹与真值之间的误差. 支持多种数据集的轨迹格式(TUM、KITTI、EuRoC MAV、ROS的bag), 同时支持这些数据格式之间的相互转换,本文轨迹展示以tum数据格式为例。

u010196944的博客 1万+

[笔记1.0]AFEPack软件包安装备忘

重装系统:2007年四月发布的 Ubuntu 7.04 - the Feisty Fawn - 按照以前别人帮助下记录的步骤,完整装了一次deal.II-3.1.0和AFEPack(2007.3.15打包版)参考资料:作者主页 <a href="http://dsec.pku.edu.cn/~rli/1、先确保系统安装如下工具:gcc-3.3g++-3.3autoconfaut

HateCode的胡言乱语 2920

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

[笔记1.2]善用软件包的文档及其他

[生成 AFEPack 的文档]      源程序:/usr/local/AFEPack/library/include                 /usr/local/AFEPack/library/src      参考文档:http://circus.math.pku.edu.cn/AFEPack/html/index.html                也可以用 /usr/loc

HateCode的胡言乱语 1470

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

AFEPack 使用 Tutorial(二):解带系数二维泊松方程

AFEPack Step by Step Tutorial 2: solve Coefficient Poisson Equation Coefficient Poisson Equation 的源码在 example/coefficient_possion_equation 目录下。 运行样例 编译 EasyMesh 网格文件 ~/AFEPack/example/coefficient_possion_equation$ easymesh D Working. Please wait ! Improvi

努力中的老周的专栏 477

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

第一个例子:求解泊松方程

本人为个人学习之便在此转载,局部加工,版权归原作者:李若所有,更多文章请访问作者的BLOG。(转载时请注明作者和出处。未经许可,请勿用于商业用途)[摘要] 狄氏边值问题的泊松方程 EasyMesh 输入文件示例 程序的注释版!!!第一个例子:求解泊松方程AFEPack /老弱 发表于2007-03-03AFEPack 的基本使用方法,我们

HateCode的胡言乱语 1万+

[基本数据结构]网格(Mesh)和几何体(Geometry)

本人为个人学习之便在此转载,局部加工,版权归原作者:李若所有,更多文章请访问作者的BLOG。(转载时请注明作者和出处。未经许可,请勿用于商业用途)[摘要]1、Geometry —— 几何体类,将点(0维)、线(1维)、面(2维)、体(3维)等维数(dim)不同的基本形状大一统,打包处理。“单独一个几何体中存储的数据是没有意义的,几何体这个类的对象必须在网格类中间存储,才能够有意义。”(Geomet

HateCode的胡言乱语 7457

常用Linux、docker命令笔记

新买了一年的阿里云服务器,使用中遇到的一些常用指令在这里留作笔记。 docker search XXX 搜索线上镜像 docker pull XXX 下载线上镜像 docker ps -a 显示正在运行的容器 docker images 显示本机所有的镜像 docker rm XXX 删除容器 docker stop XXX 停止运行的容器 docker rmi XXX 删除镜像 ...

CloudNineN的博客 287

零基础使用 MATLAB 求解偏微分方程(建议收藏)

零基础使用 MATLAB 求解偏微分方程(建议收藏) 文章目录零基础使用 MATLAB 求解偏微分方程(建议收藏)偏微分开源工具介绍PDE 工具箱函数汇总介绍0 基础:GUI 界面操作示例问题工具箱求解导出为代码形式代码导出相关数据0.1 基础:编程调用 PDE 工具箱 偏微分开源工具介绍 百分之九十以上的重要的工程和数学科学研究,和偏微分方程都脱不开关系。在所有的偏微分方程中,百分之九十九都是没有解析解的。没有解析解怎么办,我们只能通过有限元或者有限差分等方法,求解偏微分方程数值解。如果您有一些代码基础,

LSEC小陆的博客 4万+

若止步,若松散, 就很可能落后。

今天还是 把  几个PDF 看完。 1.102修。 2,鞋子。 3,TB 4,博文。 昨天睡得太多了。 从下午1点睡到早上8点。 以后要注意。 不能松散。 20篇,都没有坚持完成。  还有矫正。  都需要自己严格的意志要求。 若止步,若松散, 就很可能落后。

韩梦飞沙_韩亚飞 256

AFEPack 作者的话(写于2007年新年)

FROM:http://dsec.pku.edu.cn/~rli/software.phpAFEPack:在过去的两年时间里,这个网页一直都没有更新。由于一些令人失望的经验,我对于推广使用这个软件包并不抱太乐观的态度。由于 Linux 操作系统和 C++ 这两个东西对于我们大多数同行和同学来说是两个巨大的困难,真正学会了我的这个软件包的使用者少之又少。如果期望从不熟悉环境到能够使用这个包来进行研究

HateCode的胡言乱语 1575

java数值分析库,常用数值计算库

linpack软件名称 Linear Algebra Package程序设计语言 Fortran 77发布日期 1980下载专栏 Linpack压缩包功能概述 解线性方程和线性最小二乘问题的子程序包(各项性能已经被lapack超过)lapack软件名称 Linear Algebra Package程序设计语言 Fortran 77发布日期 Version 3.0, 1999,9,30 (1999,...

weixin_42363854的博客 1097

GeometryGenerator.cpp

///////i[0] = 0;i[1] = 1;i[2] = 2;i[3] = 0;i[4] = 2;i[5] = 3;i[6] = 4;i[7] = 5;i[8] = 6;i[9] = 4;i[10] = 6;i[11] = 7;i[12] = 8;i[13] = 9;i[14] = 10;i[15] = 8;

paobuke的博客 151

Armadillo:C++下的Matlab替代品

地址:http://arma.sourceforge.net/ 许可证:MPL 2.0 目前使用比较广的C++矩阵运算库之一,是在C++下使用Matlab方式操作矩阵很好的选择,许多Matlab的矩阵操作函数都可以找到对应,这 对习惯了Matlab的人来说实在是非常方便,另外如果要将Matlab下做研究的代码改写成C++,使用Armadillo也会很方便,这里有一个简易的Matlab到Ar...

snoopy_neu的博客 2565
上一篇: [笔记1.1]学习AFEPack起点准备
下一篇: grep in Windows
HateCode
博客等级 码龄20年 25粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值