

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  | ![]()  | 
