


1 | در پنجره Model Builder ، در قسمت Global Definitions روی Parameters 1 کلیک کنید . |
2 | در پنجره تنظیمات پارامترها ، هندسه پارامترها را در قسمت متن برچسب تایپ کنید . |
3 | قسمت Parameters را پیدا کنید . ![]() |
4 | به پوشه Application Libraries مدل بروید و روی فایل nmc_electrode_geometry_parameters.txt دوبار کلیک کنید . |
1 | در پنجره Model Builder ، روی Global Definitions کلیک راست کرده و Geometry Parts>3D Part را انتخاب کنید . |
2 | در پنجره تنظیمات قسمت ، Particles را در قسمت متن برچسب تایپ کنید . |
1 | در نوار ابزار Geometry ، روی ![]() |
2 | در پنجره Model Builder ، گره Particles را گسترش دهید ، سپس روی Sphere 1 (sph1) کلیک کنید . |
3 | در پنجره تنظیمات برای Sphere ، بخش Size را پیدا کنید . |
4 | در قسمت متن Radius ، 2e-6 را تایپ کنید . |
5 | قسمت Position را پیدا کنید . در قسمت متن x ، 11e-5 را تایپ کنید . |
6 | در قسمت متن y ، 7e-5 را تایپ کنید . |
7 | در قسمت متن z ، 4e-6 را تایپ کنید . |
8 | ![]() |

1 | در نوار ابزار هندسه ، روی ![]() |
2 | در پنجره تنظیمات برای نمونه قسمت ، Particles Part را در قسمت متن برچسب تایپ کنید . |
3 | ![]() |
1 | در نوار ابزار Geometry ، روی ![]() |
2 | در پنجره تنظیمات برای Union ، Particles را در قسمت متن برچسب تایپ کنید . |
3 | فقط شی pi1 را انتخاب کنید. |
4 | بخش Union را پیدا کنید . کادر تیک Keep interior borders را پاک کنید . |
5 | قسمت Selections of Resulting Entities را پیدا کنید . تیک گزینه Resulting objects selection را انتخاب کنید . |
1 | در نوار ابزار Geometry ، روی ![]() |
2 | در پنجره تنظیمات برای Block ، قسمت Size and Shape را پیدا کنید . |
3 | در قسمت متن Width ، xmax-xmin را تایپ کنید . |
4 | در قسمت Depth text ymax-ymin را تایپ کنید . |
5 | در قسمت متن ارتفاع ، L_elec+L_sep را تایپ کنید . |
6 | قسمت Position را پیدا کنید . در قسمت متن x ، xmin را تایپ کنید . |
7 | در قسمت متن y ، ymin را تایپ کنید . |
8 | ![]() |
1 | در نوار ابزار Geometry ، روی ![]() |
2 | فقط شی uni1 را انتخاب کنید. |
3 | در پنجره تنظیمات برای اشیاء پارتیشن ، قسمت اشیاء پارتیشن را پیدا کنید . |
4 | زیربخش اشیاء ابزار را پیدا کنید . برای انتخاب دکمه ضامن فعال کردن انتخاب کلیک کنید . ![]() |
5 | فقط شی blk1 را انتخاب کنید. |
1 | در نوار ابزار Geometry ، روی ![]() |
2 | در پنجره تنظیمات برای Box Selection ، قسمت Box Limits را پیدا کنید . |
3 | در قسمت حداقل متن x ، xmin+geom_tol را تایپ کنید . |
4 | در قسمت متن حداکثر x ، xmax-geom_tol را تایپ کنید . |
5 | در قسمت حداقل متن y ، ymin+geom_tol را تایپ کنید . |
6 | در قسمت حداکثر متن y ، ymax-geom_tol را تایپ کنید . |
7 | قسمت Resulting Selection را پیدا کنید . از فهرست نمایش در فیزیک ، خاموش را انتخاب کنید . |
8 | ![]() |
1 | در نوار ابزار Geometry ، روی ![]() |
2 | در پنجره تنظیمات برای Complement Selection ، بخش Input Entities را پیدا کنید . |
3 | ![]() |
4 | در کادر محاورهای افزودن ، کادر انتخاب 1 را در فهرست انتخابها برای معکوس کردن انتخاب کنید . |
5 | روی OK کلیک کنید . |
6 | در پنجره تنظیمات برای انتخاب مکمل ، قسمت انتخاب نتیجه را پیدا کنید . |
7 | از فهرست نمایش در فیزیک ، خاموش را انتخاب کنید . |
8 | ![]() |
1 | در پنجره Model Builder ، روی Geometry 1 کلیک راست کرده و Delete Entities را انتخاب کنید . |
2 | در پنجره تنظیمات برای حذف نهادها ، بخش Entities یا Objects to Delete را پیدا کنید . |
3 | از لیست سطح نهاد هندسی ، دامنه را انتخاب کنید . |
4 | از لیست انتخاب ، Complement Selection 1 را انتخاب کنید . |
5 | ![]() |
1 | در نوار ابزار Geometry ، روی ![]() |
2 | در پنجره تنظیمات برای بلوک ، الکترود را در قسمت نوشتار برچسب تایپ کنید . |
3 | قسمت Size and Shape را پیدا کنید . در قسمت متن Width ، xmax-xmin را تایپ کنید . |
4 | در قسمت Depth text ymax-ymin را تایپ کنید . |
5 | در قسمت متن ارتفاع ، L_elec را تایپ کنید . |
6 | قسمت Position را پیدا کنید . در قسمت متن x ، xmin را تایپ کنید . |
7 | در قسمت متن y ، ymin را تایپ کنید . |
8 | ![]() |
1 | در نوار ابزار Geometry ، روی ![]() |
2 | فقط شی blk2 را انتخاب کنید. |
3 | در پنجره تنظیمات برای تفاوت ، بخش تفاوت را پیدا کنید . |
4 | زیربخش اشیاء را برای تفریق پیدا کنید . برای انتخاب دکمه ضامن ![]() |
5 | فقط شی del1 را انتخاب کنید. |
6 | تیک Keep objects to add را انتخاب کنید . |
7 | تیک Keep objects to subtract را انتخاب کنید . |
8 | ![]() |
1 | روی Geometry 1 کلیک راست کرده و Delete Entities را انتخاب کنید . |
2 | در پنجره تنظیمات برای حذف نهادها ، بخش Entities یا Objects to Delete را پیدا کنید . |
3 | از لیست سطح نهاد هندسی ، Object را انتخاب کنید . |
4 | فقط شی dif1 را انتخاب کنید. |
5 | ![]() |
6 | فقط شی blk2 را انتخاب کنید. |
1 | در نوار ابزار Geometry ، روی ![]() |
2 | در پنجره تنظیمات برای Block ، در قسمت Label text Separator را تایپ کنید . |
3 | قسمت Size and Shape را پیدا کنید . در قسمت متن Width ، xmax-xmin را تایپ کنید . |
4 | در قسمت Depth text ymax-ymin را تایپ کنید . |
5 | در قسمت متن ارتفاع ، L_sep را تایپ کنید . |
6 | قسمت Position را پیدا کنید . در قسمت متن x ، xmin را تایپ کنید . |
7 | در قسمت متن y ، ymin را تایپ کنید . |
8 | در قسمت متن z ، L_elec را تایپ کنید . |
9 | قسمت Selections of Resulting Entities را پیدا کنید . تیک گزینه Resulting objects selection را انتخاب کنید . |
10 | ![]() |
11 | ![]() |
1 | در پنجره Model Builder ، روی Form Union (fin) کلیک کنید . |
2 | در پنجره تنظیمات Form Union/Assembly ، روی ![]() |
1 | در نوار ابزار Geometry ، روی ![]() |
2 | در پنجره تنظیمات برای انتخاب مکمل ، Porous Conductive Binder را در قسمت متن برچسب تایپ کنید . |
3 | قسمت Input Entities را پیدا کنید . ![]() |
4 | در کادر محاورهای افزودن ، در فهرست انتخابها برای معکوس کردن ، ذرات و جداکننده را انتخاب کنید . |
5 | روی OK کلیک کنید . |
1 | در نوار ابزار Geometry ، روی ![]() |
2 | در پنجره تنظیمات برای انتخاب جعبه ، فویل لیتیوم را در قسمت نوشتار برچسب تایپ کنید . |
3 | قسمت Geometric Entity Level را پیدا کنید . از لیست Level ، Boundary را انتخاب کنید . |
4 | قسمت Box Limits را پیدا کنید . در قسمت حداقل متن z ، L_elec+L_sep/2 را تایپ کنید . |
5 | قسمت Output Entities را پیدا کنید . از فهرست Include entity if ، Entity inside کادر را انتخاب کنید . |
1 | در نوار ابزار Geometry ، روی ![]() |
2 | در پنجره تنظیمات برای انتخاب جعبه ، NMC Current Collector را در قسمت متن برچسب تایپ کنید . |
3 | قسمت Geometric Entity Level را پیدا کنید . از لیست Level ، Boundary را انتخاب کنید . |
4 | قسمت Box Limits را پیدا کنید . در قسمت حداکثر متن z ، 0 را تایپ کنید . |
5 | قسمت Output Entities را پیدا کنید . از فهرست Include entity if ، Entity inside کادر را انتخاب کنید . |
1 | در نوار ابزار Geometry ، روی ![]() |
2 | در پنجره تنظیمات برای انتخاب مجاور ، Particle Boundaries را در قسمت متن برچسب تایپ کنید . |
3 | قسمت Input Entities را پیدا کنید . ![]() |
4 | در کادر محاورهای افزودن ، ذرات را در لیست انتخابهای ورودی انتخاب کنید . |
5 | روی OK کلیک کنید . |
6 | در پنجره تنظیمات برای انتخاب مجاور ، قسمت انتخاب نتیجه را پیدا کنید . |
7 | از فهرست نمایش در فیزیک ، خاموش را انتخاب کنید . |
1 | در نوار ابزار Geometry ، روی ![]() |
2 | در پنجره تنظیمات برای انتخاب مجاور ، مرزهای Binder را در قسمت متن برچسب تایپ کنید . |
3 | قسمت Input Entities را پیدا کنید . ![]() |
4 | در کادر محاوره ای افزودن ، Porous Conductive Binder را در لیست انتخاب های ورودی انتخاب کنید . |
5 | روی OK کلیک کنید . |
6 | در پنجره تنظیمات برای انتخاب مجاور ، قسمت انتخاب نتیجه را پیدا کنید . |
7 | از فهرست نمایش در فیزیک ، خاموش را انتخاب کنید . |
1 | در نوار ابزار Geometry ، روی ![]() |
2 | در پنجره تنظیمات برای انتخاب تقاطع ، سطح ذرات را در قسمت متن برچسب تایپ کنید . |
3 | قسمت Geometric Entity Level را پیدا کنید . از لیست Level ، Boundary را انتخاب کنید . |
4 | قسمت Input Entities را پیدا کنید . ![]() |
5 | در کادر محاورهای افزودن ، در فهرست انتخابها برای تقاطع ، مرزهای ذرات و مرزهای بایندر را انتخاب کنید . |
6 | روی OK کلیک کنید . |
1 | در نوار ابزار Geometry ، روی ![]() |
2 | در پنجره تنظیمات برای انتخاب اتحادیه ، Separator + Binder را در قسمت نوشتار Label تایپ کنید . |
3 | قسمت Input Entities را پیدا کنید . ![]() |
4 | در کادر محاورهای افزودن ، در لیست Selections to add ، Separator and Porous Conductive Binder را انتخاب کنید . |
5 | روی OK کلیک کنید . |
1 | در نوار ابزار Geometry ، روی ![]() |
2 | در پنجره تنظیمات برای انتخاب جعبه ، همه دامنه ها را در قسمت متن برچسب تایپ کنید . |
3 | قسمت Box Limits را پیدا کنید . در قسمت متن x حداقل ، xmin را تایپ کنید . |
4 | در قسمت متن حداکثر x ، xmax را تایپ کنید . |
5 | در قسمت حداقل y متن، ymin را تایپ کنید . |
6 | در قسمت حداکثر متن y ، ymax را تایپ کنید . |
7 | قسمت Output Entities را پیدا کنید . از لیست Include entity if ، کادر All vertices inside را انتخاب کنید . |
8 | قسمت Resulting Selection را پیدا کنید . از فهرست نمایش در فیزیک ، خاموش را انتخاب کنید . |
1 | در نوار ابزار Geometry ، روی ![]() |
2 | در پنجره تنظیمات برای انتخاب مجاور ، همه مرزهای خارجی را در قسمت متن برچسب تایپ کنید . |
3 | قسمت Input Entities را پیدا کنید . ![]() |
4 | در کادر محاورهای افزودن ، همه دامنهها را در فهرست انتخابهای ورودی انتخاب کنید . |
5 | روی OK کلیک کنید . |
1 | در پنجره Model Builder ، گره Results را گسترش دهید . |
2 | روی Results>Tables کلیک راست کرده و Table را انتخاب کنید . |
3 | در پنجره تنظیمات جدول ، Particle Data Table را در قسمت نوشتار Label تایپ کنید . |
4 | قسمت Data را پیدا کنید . روی Import کلیک کنید . |

1 | در پنجره Application Builder ، روی Methods کلیک راست کرده و New Method را انتخاب کنید . |
2 | در کادر محاورهای New Method ، GenerateGeometryFromTable را در قسمت متن نام تایپ کنید . |
3 | روی OK کلیک کنید . |
1 | در پنجره Application Builder ، در قسمت Methods روی GenerateGeometryFromTable کلیک کنید . |
2 | کد زیر را در پنجره GenerateGeometryFromTable کپی کنید : |
String tableData[][] = model.result().table().get(“tbl1”).getTableData(false);
// برخی از مقادیر پارامتر هندسی را از Parameters بخوانید
Double voxel_size = model.param().evaluate(“vox_size”);
Double geom_tol = model.param().evaluate(“geom_tol”);
Double xmin = model.param().evaluate(“xmin”)+geom_tol;
دابل xmax = model.param().evaluate(“xmax”)+geom_tol;
Double ymin = model.param().evaluate(“ymin”)+geom_tol;
Double ymax = model.param().evaluate(“ymax”)+geom_tol;
// قسمت پاک کردن هندسه
model.geom(“part1”).feature().clear();
int i = 0; // شمارنده ردیف برای ماتریس
// متغیر برای محاسبه ضخامت الکترود
Double maxz = new Double(0.0);
// متغیرهایی برای محاسبه شعاع کره با میانگین جرم
Double Vsum = new Double(0.0);
Double rVsum = new Double(0.0);
// حلقه برای تمام سطرهای جدول
برای (String[] row : tableData) {
Double xminData = Double.parseDouble(row[2])*voxel_size;
Double yminData = Double.parseDouble(row[3])*voxel_size;
Double xmaxData = Double.parseDouble(row[5])*voxel_size;
Double ymaxData = Double.parseDouble(row[6])*voxel_size;
// بررسی کنید که آیا در کادر محدود است، و اگر شعاع بزرگتر از تلورانس است، کره اضافه کنید
if (((xminData < xmax && xminData > xmin) || (xmaxData < xmax && xmaxData > xmin)) && ((
yminData < ymax && yminData > ymin) || (ymaxData < ymax && ymaxData > ymin))
{ volume = Double.parseDouble(row[1])*Math.pow(voxel_size, 3.0);
شعاع دو برابر = Math.pow(0.75*volume/Math.PI، 0.333333)؛
if (radius > geom_tol) {
Double xpos = Double.parseDouble(row[8])*voxel_size;
Double ypos = Double.parseDouble(row[9])*voxel_size;
Double zpos = Double.parseDouble(row[10])*voxel_size;
// افزودن داده به ماتریس داده های کره ای
sphereData[i][0] = xpos;
sphereData[i][1] = ypos;
sphereData[i][2] = zpos;
sphereData[i][3] = شعاع;
i++;
maxz = maxz < (zpos+radius) ? zpos+radius : maxz;
// متغیرهای شعاع میانگین جرم را بهروزرسانی کنید، اگر مرکز کره در کادر محدودکننده باشد
if ((xpos < xmax && xpos > xmin) && (ypos < ymax && ypos > ymin))) {
Vsum = Vsum+volume;
rVsum = rVsum+شعاع*حجم;
}
// افزودن کره به بخش هندسه
GeomFeature sph = model.geom(“part1”).create(“sph”+i, “Sphere”);
sph.set(“pos”, new String[]{Double.toString(xpos)+”[m]”, Double.toString(ypos)+”[m]”, Double.toString(zpos)+”[m] “})؛
sph.label(“Particle “+(int) Math.round(Double.parseDouble(row[0])));
sph.set(“r”, radius+”[m]”);
double hmin = model.param().evaluate(“hmin”); // حداقل اندازه عنصر مش
int cyl = 1;
// فواصل و شکافهای بین تمام ترکیبهای دوتایی کرهها را
برای (int j = 0; j < i; j++) بررسی کنید {
for (int k = j+1; k <i; k++) {
Double x = sphereData[k][ 0] -sphereData[j][0];
Double y = sphereData[k][1]-sphereData[j][1];
z Double = sphereData[k][2]-sphereData[j][2];
فاصله دو برابر = Math.sqrt(x*x+y*y+z*z);
دو شکاف = dist-(sphereData[k][3]+sphereData[j][3]);
int index1 = sphereData[k][3] <sphereData[j][3] ? k : j;
int index2 = sphereData[k][3] > sphereData[j][3] ? k : j;
دابل r_sphere = sphereData[index1][3];
// اگر کره ها خیلی نزدیک یا همپوشانی دارند، استوانه اضافه کنید
if (gap <hmin && gap > -0.667*r_sphere) {
Double x_sphere = sphereData[index1][0];
Double y_sphere = sphereData[index1][1];
z_sphere دو برابر = sphereData[index1][2];
جهت دوگانه = sphereData[k][3] <sphereData[j][3] ? -1.0 : 1.0;
دابل r_help = r_sphere+gap-hmin;
Double r_cyl = Math.max(Math.sqrt(r_sphere*r_sphere-r_help*r_help), hmin*2);
// معادله ریشه به غیر خطی را برای شعاع استوانه حل کنید (به طوری که فاصله کره به کره = hmin در امتداد سطح استوانه).
دو برابر r1 = r_sphere;
Double r2 = sphereData[index2][3];
دو تا = 2*r2;
tb دو برابر = 2 * r1;
double tc = Math.sqrt(-((gap-hmin+tb+ta)*(gap-hmin+tb)*(gap-hmin+ta)*(gap-hmin)));
r_cyl = ((1/(شکاف-hmin+r1+r2))*tc)/2;
Double dist_corr = Math.sqrt(r_sphere*r_sphere-r_cyl*r_cyl)-2*hmin;
دابل posx = x_sphere+x/dist*dist_corr*direction;
دابل posy = y_sphere+y/dist*dist_corr*direction;
دابل posz = z_sphere+z/dist*dist_corr*direction;
// ایجاد سیلندر
GeomFeature cylinder = model.geom(“part1”).create(“cyl”+cyl++, “Cylinder”);
با (سیلندر)؛
set(“pos”، new String[]{Double.toString(posx)+”[m]”، Double.toString(posy)+”[m]، Double.toString(posz)+”[m]”} )
set(“axitype”، “cartesian”);
set(“ax3″، new String[]{Double.toString(x*direction)+”[m]”, Double.toString(y*direction)+”[m]”، Double. toString(z*direction)+”[m]”});
set(“r”، r_cyl+”[m]”);
set(“h”، hmin*5+”[m]”);
پایان یافتن با()؛
}
}
}
// تنظیم طول الکترود در مدل
model.param().set(“L_elec”, maxz+geom_tol+”[m]”);
// ساخت هندسه در model.geom
(“part1”).run();
model.component(“comp1”).geom(“geom1”).run();
// اندازه گیری و به روز رسانی پارامتر حجم
model.component(“comp1”).geom(“geom1”).measure().selection().init(3);
model.component(“comp1”).geom(“geom1”).measure().selection().named(“uni1”);
model.param().set(“Vp”, model.geom(“geom1″).measure().getVolume()+”[m^3]”);
//
مدل پارامتر ناحیه را اندازه گیری و به روز کنید.
model.component(“comp1”).geom(“geom1”).measure().selection().named(“intsel1”);
model.param().set(“Ap”, model.geom(“geom1″).measure().getVolume()+”[m^2]”);
// به روز رسانی پارامتر شعاع میانگین جرمی
model.param().set(“rp_avg_spheres”, rVsum/Vsum+”[m]”);


1 | در پنجره Model Builder ، در زیر Global Definitions روی GenerateGeometryFromTable 1 کلیک کنید . |
2 | در پنجره تنظیمات برای فراخوانی روش ، Generate Geometry From Particle Data Table را در قسمت نوشتار Label تایپ کنید . |
3 | ![]() |
1 | در پنجره Model Builder ، گره Component 1 (comp1)>Definitions را گسترش دهید . |
1 | در پنجره Model Builder ، گره Component 1 (comp1)>Definitions>View 2 را گسترش دهید ، سپس روی Camera کلیک کنید . |
2 | فقط شی را انتخاب کنید. |
3 | ![]() |
4 | در پنجره تنظیمات دوربین ، بخش موقعیت را بیابید . |
5 | در قسمت متن x ، 6.1e-4 را تایپ کنید . |
6 | در قسمت متن y ، 2.1e-4 را تایپ کنید . |
7 | در قسمت متن z ، -4.1e-4 را تایپ کنید . |
8 | قسمت Up Vector را پیدا کنید . در قسمت متن x ، 0 را تایپ کنید . |
9 | در قسمت متن y ، 1 را تایپ کنید . |
10 | در قسمت متن z ، 0 را تایپ کنید . |
11 | ![]() |
12 | ![]() ![]() |