找回密码
 注册
Simdroid-非首页
查看: 929|回复: 25

[命令/FISH] 剑桥软土本构模型(CamClay Model)学习笔记

[复制链接]
发表于 2009-6-22 19:40:55 | 显示全部楼层 |阅读模式 来自 河南洛阳
const char *UserCamClayModel::Run(unsigned uDim,State *ps) {

if ((uDim!=2)&&(uDim!=3)) return("Illegal dimension in UserCamClayModel");


static double dPav,dQav,dEvav,dEvdPav;


static int iPind;


/* --- plasticity indicator:
---*/


/*
store 'now' info. as 'past' and turn 'now' info off ---*/


if (ps->mState & mShearNow) ps->mState |= mShearPast;


ps->mState &= ~mShearNow;


/* --- initialize stacks --- */


if (!ps->bySubZone) {


iPind = 0;


dPav
= 0.0;


dQav
= 0.0;


dEvav
= 0.0;


dEvdPav = 0.0;


}


/* --- trial elastic stresses
试验弹性应力 --- */
double dA1 = dBulk + dC4D3 * dShear;
//
体积模量K + 4.0 / 3.0*剪切模量G dA1 =K+
double dA2 = dBulk - dC2D3 * dShear;
// dA2 =
K
-
double dG2 = 2.0 * dShear;
// dG2 =2


/*--由主应变分量增量得主应力增量 --*/


ps->stnS.d11 += ps->stnE.d11 * dA1 + (ps->stnE.d22 + ps->stnE.d33) * dA2


ps->stnS.d22 += ps->stnE.d22 * dA1 + (ps->stnE.d11 + ps->stnE.d33) * dA2;


ps->stnS.d33 += ps->stnE.d33 * dA1 + (ps->stnE.d11 + ps->stnE.d22) * dA2;

/* 因为在 */
ps->stnS.d12 += ps->stnE.d12 * dG2;

ps->stnS.d13 += ps->stnE.d13 * dG2;


ps->stnS.d23 += ps->stnE.d23 * dG2;


/* --- mean pressure
平均压力dPVal
=

--- */


double dPVal = - (ps->stnS.d11 + ps->stnS.d22 + ps->stnS.d33) * dC1D3;


/* --- deviatoric stresses
偏应力 --- */

double dDS11 = ps->stnS.d11 + dPVal;


double dDS22 = ps->stnS.d22 + dPVal;


double dDS33 = ps->stnS.d33 + dPVal;


double dDS12 = ps->stnS.d12;//


double dDS13 = ps->stnS.d13;


double dDS23 = ps->stnS.d23;

/*second deviatoric stress invariant第二偏应力不变量 - */
Double dJ2 =0.5*(dDS11*dDS11+dDS22*dDS22+dDS33*dDS33) + ps->stnS.d12* ps->stnS.d12 + ps->stnS.d13 * ps->stnS.d13 + ps->stnS.d23 * ps->stnS.d23;
/*----广义剪应力 ----*/

double dQVal = sqrt(3.*dJ2);


/* --- Cam-clay yield criterion
剑桥屈服准则--- */

double dM2 = dMM*dMM;
//dMM
是摩擦常数M
dM2 =M2


double dFS = dQVal*dQVal + dM2 * dPVal * (dPVal - dMPC); /* -----
先期固结压力在这里是硬化参数Ha.Ha=p c , f = ------*/

double dPNew = 0.0;


double dQNew = 0.0;


double dEVVal = 0.0;


double dEvdPVal = 0.0;


/* --- detect small pc --- */

if (dMPC < dMP1*1.e-3) {
/*
先期固结压力<基准压力 *10-3 的情况下:*/

iPind = 1;


ps->mState |= mShearNow;


ps->stnS.d11 = 0.0;

// Sx=0


ps->stnS.d22 = 0.0;


ps->stnS.d33 = 0.0;


ps->stnS.d12 = 0.0;


ps->stnS.d13 = 0.0;


ps->stnS.d23 = 0.0;


dPNew
= dPVal;


dQNew
= dQVal;


dEVVal
= ps->stnE.d11 + ps->stnE.d22 + ps->stnE.d33; //
体应变dEVVal=

dEvdPVal = dEVVal;


} else {


if (dFS > 0.0) {

//
如果屈服函数大于零,表示剪切破坏

/* --- shear failure
剪切破坏 --- */

iPind = 1;


ps->mState |= mShearNow;


double dSa
= 6.0 * dShear * dQVal;

//dSa=


double dSc
= dM2 * (2.0 * dPVal - dMPC);

//dSc=


double dSb
= dBulk * dSc;

//dSb =
弹性体积模量
K
*ca

double dBa
= dSa*dSa + dM2 * dSb*dSb;
//dBa=

double dBb = dSa * dQVal + 0.5 * dSb * dSc; //dBb =6qG*q+0.5* K* M2*(2p- pc) *M2*(2p- pc)=

double dBc
= dFS;
// dBc
=


double dAlam
= 0.0;


double dAlam1 = 0.0;


if (dBa != 0.0) {


double dBoa
= dBb / dBa;

//dBoa=

double dVal =dBoa*dBoa - dBc / dBa;
//dVal=
因为a ,b ,c 满足式
if (dVal < 0.0) return("Cam-clay:
Yield envelope cannot be reached");//
未达到屈服轨迹线

double dVal1
= sqrt(dVal);
//dVal1=



dAlam
= dBoa + dVal1;
// dAlam=
+


dAlam1 = dBoa - dVal1;

//dAlam1=
-


} else {


if (dBb != 0.0) {

dAlam
= 0.5 * dBc / dBb;
// dAlam=0.5*
/

dAlam1 = dAlam;

} else return("Cam-clay:
Yield envelope cannot be reached");


}


if (fabs(dAlam1) < fabs(dAlam)) dAlam = dAlam1;


if (dAlam < 0.0) dAlam = 0.0;


dQNew
= dQVal - dSa * dAlam;
//


dPNew
= dPVal - dSb * dAlam;
//


/* --- update stresses
更新应力--- */

if (dQVal == 0.0) {


//
如果 0

double dAdd = dPNew - dPVal;
//


ps->stnS.d11 -= dAdd;


ps->stnS.d22 -= dAdd;


ps->stnS.d33 -= dAdd;


} else { //
如果 不为0,新的应力分量: ,其中,偏应力分量:
ps->stnS.d11 = (dDS11 / dQVal) * dQNew - dPNew;
//





ps->stnS.d22 = (dDS22 / dQVal) * dQNew - dPNew;


ps->stnS.d33 = (dDS33 / dQVal) * dQNew - dPNew;


ps->stnS.d12 = (dDS12 / dQVal) * dQNew;

//


ps->stnS.d23 = (dDS23 / dQVal) * dQNew;


ps->stnS.d13 = (dDS13 / dQVal) * dQNew;


}


dEVVal
= ps->stnE.d11 + ps->stnE.d22 + ps->stnE.d33; //
体应变dEVVal=

dEvdPVal = dAlam * dSc;


} else {


/* --- no failure --- */


dPNew
= dPVal;


dQNew
= dQVal;


dEVVal
= ps->stnE.d11 + ps->stnE.d22 + ps->stnE.d33; //
体应变dEVVal=

dEvdPVal = 0.0;


}


}


/* update zone stresses and strains
更新单元的应力应变--- */

double dVol = ps->dSubZoneVolume;


dPav
+= dPNew * dVol;
//
在前面有/dPav,dQav,dEvav,dEvdPav;且设置初始值为0

dQav
+= dQNew * dVol;


dEvav
+= dEVVal * dVol;


dEvdPav += dEvdPVal * dVol;


/* --- the last zone has been processed, update parameters:
更新变量--- */

if (ps->bySubZone==ps->byTotSubZones-1) {


dVol = 1.0 / ps->dZoneVolume;


if (ps->byOverlay==2) dVol *= 0.5;


dPav
= dPav * dVol;


dQav
= dQav * dVol;


dEvav
= dEvav * dVol;


dEvdPav = dEvdPav * dVol;

dMP
= dPav;

//
当前的平均有效应力

dMQ
= dQav;


//
当前的平均偏应力

dEV
+= dEvav;
//
累计总体积应变+=

dEV_P += dEvdPav;
//
累计塑性体积应变

/* --- specific dVolume --- */


double dVold
= dMV;
//
初始比容v0

dMV
= dVold * (1.0 + dEvav);


if (dMV < 0.0) return("Cam-clay:
Specific volume is negative");
//
初始比容v0

/* ---

bulk modulus --- */


dBulk
= dMV * dPav / dKappa; //
弹性体积模量K =初始比容v0*弹性膨胀线的斜率
if (dBulk > dBulkB) return("Cam-clay: Bulk modulus bound must be increased for stability");//弹性体积模量K
/* --- cap pressure硬化软化准则:屈服曲线的形状取决于固结压力pc的值,此压力是塑性体积变化的函数,且随比容而变化。对于新的 , , ,可以通过 平面内固结线和膨胀线的交点得出,其表达式如下:--- */

if (iPind == 1) {


if (dPav > dMPC * 0.4) {
//
先期固结压力

double dVal = dMV + dKappa * log(dPav / dMP1); /*
初始比容v0+
弹性膨胀线的斜率
/
基准压力 , 式中   


dMPC = dMP1 * exp((dMV_L - dVal)/(dLambda-dKappa)); /*---
先期固结压力=基准压力 e (正常固结线的比容 - 弹性膨胀线的斜率 - ---*/

} else {

dMPC=dMPC*(1.0+dEvdPav*dVold/(dLambda-dKappa));//先期固结压力=弹性膨胀线斜率

}


if (dMPC <= 0.0) { //
先期固结压力小于等于

dMPC
= 0.0;
//
那设置先期固结压力0,因为土不能抗拉

dBulk = 0.0;
//
弹性体积模量K

}


}


/* --- shear modulus --- */


if (dPoisson != 0.0) {
//
泊松比不等于0
dShear=1.5*dBulk*(1.0-2.0*dPoisson)/(1.0+dPoisson); //剪切模量, 弹性体积模量,泊松比
/* ,弹性体积模量 随比容和平均应力的函数变化的*/

} else {


double dMaxg = 1.5 * dBulk;
//
弹性体积模量K

double dMing = 0.0;


dShear = dShear < dMaxg ? dShear : dMaxg; //
剪切模量

dShear = dShear > dMing ? dShear : dMing;


}


}


return(0);

}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
发表于 2009-6-23 08:13:43 | 显示全部楼层 来自 江苏南京
Simdroid开发平台
顶一个顶一个
回复 不支持

使用道具 举报

发表于 2009-6-23 14:41:26 | 显示全部楼层 来自 上海
本帖最后由 ddkk1463 于 2009-6-23 14:42 编辑

看不懂,但是顶一个,有时间再研究研究
回复 不支持

使用道具 举报

发表于 2010-7-18 15:15:50 | 显示全部楼层 来自 上海
谢谢楼主啦,学习~~~
回复 不支持

使用道具 举报

发表于 2010-7-18 19:49:10 | 显示全部楼层 来自 广东江门
这张图太不清晰了,楼主有清晰地版本没有,是否可以发我信箱
van.sauron@gmail.com
我上网不方便。谢了。
回复 不支持

使用道具 举报

发表于 2011-3-2 19:48:41 | 显示全部楼层 来自 武汉大学
好贴,收藏了
回复 不支持

使用道具 举报

发表于 2011-3-3 10:03:05 | 显示全部楼层 来自 海南海口
不错呀,flac3d里面不是有此本构模型吗
回复 不支持

使用道具 举报

发表于 2011-3-8 10:34:32 | 显示全部楼层 来自 海南海口
必须得顶一个
回复 不支持

使用道具 举报

发表于 2011-3-8 10:35:57 | 显示全部楼层 来自 海南海口
请问你用FLAC3d做出来了吗
回复 不支持

使用道具 举报

发表于 2011-3-8 10:39:03 | 显示全部楼层 来自 海南海口
再顶一下,,,,,,,
回复 不支持

使用道具 举报

发表于 2011-3-13 04:27:17 | 显示全部楼层 来自 天津
看不懂啊。。。。。
回复 不支持

使用道具 举报

发表于 2011-4-7 20:26:01 | 显示全部楼层 来自 福建厦门
顶一个,有待学习
回复 不支持

使用道具 举报

发表于 2011-4-15 15:25:06 | 显示全部楼层 来自 大连理工大学
源程序,很好,模型计算错误时,可以很快找到原因的
回复 不支持

使用道具 举报

发表于 2011-4-15 15:30:50 | 显示全部楼层 来自 湖南长沙
谢谢楼主啦,学习
回复 不支持

使用道具 举报

发表于 2011-5-12 11:40:56 | 显示全部楼层 来自 江苏南京
谢谢楼主啦,学习
回复 不支持

使用道具 举报

发表于 2011-8-2 14:09:39 | 显示全部楼层 来自 天津
if (dVal < 0.0) return("Cam-clay:
. L! u" K$ V( g0 `/ T$ N$ t. dYield envelope cannot be reached");//未达到屈服轨迹线(

请问这个dVal是指的什么啊?
回复 不支持

使用道具 举报

发表于 2011-8-4 11:33:23 | 显示全部楼层 来自 福建福州
牛人!!!!!!!!!!!!!!!!!
回复 不支持

使用道具 举报

发表于 2011-9-25 12:35:35 | 显示全部楼层 来自 陕西西安
楼主,你的这个程序编译了吗?
回复 不支持

使用道具 举报

发表于 2011-11-1 13:18:25 | 显示全部楼层 来自 新疆乌鲁木齐
源程序,很好,模型计算错误时,可以很快找到原因的
回复 不支持

使用道具 举报

发表于 2011-11-4 10:48:13 | 显示全部楼层 来自 山东青岛
谢谢楼主啦,学习
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-9-23 22:42 , Processed in 0.059926 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表