Opensees Community
1.11K subscribers
500 photos
158 videos
62 files
166 links
The Largest OpenSees Community of Iran (LOCI). Channel is managed by Dr. Afshin Alborzi.

https://www.instagram.com/ledocteurafshina

YouTube: LOCI Community

Contact with administrator👇

@OpenSeesCommunity_pm
Download Telegram
یکی از مکان های مورد علاقه ام، طبقه دوم یک کافی شاپ در نزدیکی آموزشگاهی است که در آنجا تدریس می‌کنم. پاتوقی که بیشترین سهم خاطره‌هایم و مطالعاتم متعلق به آنجا است! مکانی آرام، دنج و البته کمی هم رمانتیک! از این بالا می‌توانم آدم‌هایی را ببینم که آنها نمی‌توانند من را بینند! (چون معمولا موقع راه رفتن به بالا نگاه نمی‌کنند) با برانداز کردن می‌توانم مکث‌هایشان، حرکت‌هایشان و روزمرگی‌هایشان را ببینم و خوب به تمامی آنها فکر کنم. در نهایت پس از تفکر و تجسمی عمیق، ذهنم را وادار کنم تا این آدم‌ها را با کامندهایی جایگزین نماید!، و ببیند آیا الگوریتم حاصله از این حجم کامند عصبانی، کاربردی هم می تواند داشته باشد یا خیر؟! درخت پشت سرم، در پیاده روی خیابان سرو غربی واقع شده است و رایحه عجیب و غریبی دارد. همین جا بود که تعداد زیادی از الگوریتم‌ها را رمزگشایی کردم. صاحب کافی شاپ زیبا که دوستم نیز است، خوب می‌داند موقع برنامه نویسی باید برایم قهوه دابل بیاورد! و خوب می‌داند که من دوست دارم ساعت‌ها تنها باشم و با الگوریتم‌های پیچیده کلنجار بروم. و برایم خیلی غم انگیز است که به زودی باید از این مکان برای همیشه خداحافظی نمایم!
بلوک های زبان برنامه نویسی #C مختص مختصات نودها و تعریف قیود، جهت مقایسه با اینترپرتر زبان TCL (سه پست قبل):🌷

//# Units: kip, in, sec
//# ----------------------------
//# Start of model generation
//# ----------------------------
//# Create ModelBuilder with 3 dimensions and 6 DOF/node
//model BasicBuilder -ndm 3 - ndf 6
var theModel = new OpenSees.AnalysisModelWrapper();
var theDomain = new OpenSees.Components.DomainWrapper();
//# Define geometry
//# Set parameters for model geometry
// set h 144.0; # Story height
//set by 240.0; # Bay width in Y-direction
//set bx 240.0; # Bay width in X-direction
var h = 144.0; //Story height
var by = 240.0; //Bay width in Y-direction
var bx = 240.0; //Bay width in X-direction
//# Create nodes
//# tag X Y Z
// node 1[expr -$bx / 2][expr $by / 2] 0
//node 2[expr $bx / 2][expr $by / 2] 0
//node 3[expr $bx / 2][expr -$by / 2] 0
//node 4[expr -$bx / 2][expr -$by / 2] 0
//node 5[expr -$bx / 2][expr $by / 2] $h
//node 6[expr $bx / 2][expr $by / 2] $h
//node 7[expr $bx / 2][expr -$by / 2] $h
//node 8[expr -$bx / 2][expr -$by / 2] $h
//node 10[expr -$bx / 2][expr $by / 2][expr 2 *$h]
//node 11[expr $bx / 2][expr $by / 2][expr 2 *$h]
//node 12[expr $bx / 2][expr -$by / 2][expr 2 *$h]
//node 13[expr -$bx / 2][expr -$by / 2][expr 2 *$h]
//node 15[expr -$bx / 2][expr $by / 2][expr 3 *$h]
//node 16[expr $bx / 2][expr $by / 2][expr 3 *$h]
//node 17[expr $bx / 2][expr -$by / 2][expr 3 *$h]
//node 18[expr -$bx / 2][expr -$by / 2][expr 3 *$h]
theDomain.AddNode(new OpenSees.Components.NodeWrapper(1, 6, -bx / 2, by / 2, 0));
theDomain.AddNode(new OpenSees.Components.NodeWrapper(2, 6, bx / 2, by / 2, 0));
theDomain.AddNode(new OpenSees.Components.NodeWrapper(3, 6, bx / 2, -by / 2, 0));
theDomain.AddNode(new OpenSees.Components.NodeWrapper(4, 6, -bx / 2, -by / 2, 0));

theDomain.AddNode(new OpenSees.Components.NodeWrapper(5, 6, -bx / 2, by / 2, h));
theDomain.AddNode(new OpenSees.Components.NodeWrapper(6, 6, bx / 2, by / 2, h));
theDomain.AddNode(new OpenSees.Components.NodeWrapper(7, 6, bx / 2, -by / 2, h));
theDomain.AddNode(new OpenSees.Components.NodeWrapper(8, 6, -bx / 2, -by / 2, h));

theDomain.AddNode(new OpenSees.Components.NodeWrapper(10, 6, -bx / 2, by / 2, 2 * h));
theDomain.AddNode(new OpenSees.Components.NodeWrapper(11, 6, bx / 2, by / 2, 2 * h));
theDomain.AddNode(new OpenSees.Components.NodeWrapper(12, 6, bx / 2, -by / 2, 2 * h));
theDomain.AddNode(new OpenSees.Components.NodeWrapper(13, 6, -bx / 2, -by / 2, 2 * h));

theDomain.AddNode(new OpenSees.Components.NodeWrapper(15, 6, -bx / 2, by / 2, 3 * h));
theDomain.AddNode(new OpenSees.Components.NodeWrapper(16, 6, bx / 2, by / 2, 3 * h));
theDomain.AddNode(new OpenSees.Components.NodeWrapper(17, 6, bx / 2, -by / 2, 3 * h));
theDomain.AddNode(new OpenSees.Components.NodeWrapper(18, 6, -bx / 2, -by / 2, 3 * h));
//# Master nodes for rigid diaphragm
//# tag X Y Z
//node 9 0 0 $h
//node 14 0 0[expr 2 *$h]
//node 19 0 0[expr 3 *$h]
theDomain.AddNode(new OpenSees.Components.NodeWrapper(9, 6, 0, 0, 1 * h));
theDomain.AddNode(new OpenSees.Components.NodeWrapper(14, 6, 0, 0, 2 * h));
theDomain.AddNode(new OpenSees.Components.NodeWrapper(19, 6, 0, 0, 3 * h));
//# Set base constraints
//# tag DX DY DZ RX RY RZ
// fix 1 1 1 1 1 1 1
//fix 2 1 1 1 1 1 1
//fix 3 1 1 1 1 1 1
//fix 4 1 1 1 1 1 1
foreach (var nodeId in new int[] { 1, 2, 3, 4 })
{
for (var i = 0; i < 6; i++)
{
theDomain.AddSP_Constraint(new OpenSees.Components.Constraints.SP_ConstraintWrapper(nodeId, i, 0.0, true));
}
}
//# Define rigid diaphragm multi-point constraints
//# normalDir master slaves
//rigidDiaphragm 3 9 5 6 7 8
//rigidDiaphragm 3 14 10 11 12 13
//rigidDiaphragm 3 19 15 16 17 18
theDomain.CreateRigidDiaphragm(9, new IDWrapper(new int[] { 5, 6, 7, 8 }), 2);
theDomain.CreateRigidDiaphragm(14, new IDWrapper(new int[] { 10, 11, 12, 13 }), 2);
theDomain.CreateRigidDiaphragm(19, new IDWrapper(new int[] { 15, 16, 17, 18 }), 2);

//# Constraints for rigid diaphragm master nodes
//# tag DX DY DZ RX RY RZ
//fix 9 0 0 1 1 1 0
//fix 14 0 0 1 1 1 0
//fix 19 0 0 1 1 1 0
foreach (var nodeId in new int[] { 9, 14, 19 })
{
for (var i = 2; i < 5; i++)
{
theDomain.AddSP_Constraint(new OpenSees.Components.Constraints.SP_ConstraintWrapper(nodeId, i, 0.0, true));
}
}
This media is not supported in your browser
VIEW IN TELEGRAM
لحظه بازكردن فواره هاي پارك پترهوف در سنت پترزبورگ، خليج فنلاند، ۲۳ مرداد ۱۳۹۸ رأس ساعت ١١
بلوک زبان برنامه نویسی TCL مختص تعریف رفتار مصالح، جهت مقایسه تخصصی با اینترپرتر زبان #C (پست بعدی):🌷

# Define materials for nonlinear columns
# --------------------------------------
# CONCRETE
# Core concrete (confined)
# tag f'c epsc0 f'cu epscu
uniaxialMaterial Concrete01 1 -5.0 -0.005 -3.5 -0.02

# Cover concrete (unconfined)
set fc 4.0
uniaxialMaterial Concrete01 2 -$fc -0.002 0.0 -0.006

# STEEL
# Reinforcing steel
# tag fy E b
uniaxialMaterial Steel01 3 60 30000 0.02

# Column width
set h 18.0

# Source in a procedure for generating an RC fiber section
source RCsection.tcl

# Column torsional stiffness
set GJ 1.0e10;

# Call the procedure to generate the column section
# id h b cover core cover steel nBars barArea nfCoreY nfCoreZ nfCoverY nfCoverZ GJ
RCsection 1 $h $h 2.5 1 2 3 3 0.79 8 8 10 10 $GJ

# Concrete elastic stiffness
set E [expr 57000.0*sqrt($fc*1000)/1000];

# Linear elastic torsion for the column
# uniaxialMaterial Elastic 10 $GJ

# Attach torsion to the RC column section
# tag uniTag uniCode secTag
# section Aggregator 2 10 T -section 1
پاسخ به سوالات علمی دانشجویان خوب🌷❤️مختص تعطیلات آخر هفته
پاسخ به سوالات علمی دانشجویان خوب🌷❤️مختص تعطیلات آخر هفته
پاسخ به سوالات علمی دانشجویان خوب🌷❤️مختص تعطیلات آخر هفته
شکل ۱ مربوط به سوال مطرح شده در پست قبلی
شکل ۲ مربوط به سوال مطرح شده در پست قبلی
بلوک زبان برنامه نویسی #C مختص رفتار مصالح و تعریف مقاطع، جهت مقایسه با اینترپرتر زبان TCL (شش پست قبل):🌷

//# Define materials for nonlinear columns
//# --------------------------------------
//# CONCRETE
//# Core concrete (confined)
//# tag f'c epsc0 f'cu epscu
//uniaxialMaterial Concrete01 1 - 5.0 - 0.005 - 3.5 - 0.02
var mat1 = new OpenSees.Materials.Uniaxials.Concrete01Wrapper(1, -5.0, -0.005, -3.5, -0.02);

//# Cover concrete (unconfined)
var fc = 4.0;
var mat2 = new OpenSees.Materials.Uniaxials.Concrete01Wrapper(2, -fc, -0.002, 0, -0.006);

//# STEEL
//# Reinforcing steel
//# tag fy E b
//uniaxialMaterial Steel01 3 60 30000 0.02
var mat3 = new OpenSees.Materials.Uniaxials.Steel01Wrapper(3, 60, 30000, 0.02);

var colh = 18.0;
var colb = 18.0;

//# Concrete elastic stiffness
//set E[expr 57000.0 * sqrt($fc * 1000) / 1000];
var Ec = 57000.0 * Math.Sqrt(fc * 1000) / 1000;
var GJ = 1.0e10;

var GJMat = new OpenSees.Materials.Uniaxials.ElasticMaterialWrapper(10, GJ, 0);

OpenSees.Materials.Sections.SectionForceDeformationWrapper colSection = null;
if (!elastic)
{
colSection = CreateRCSection(1, colh, colb, 2.5,
new KeyValuePair<int, Materials.Uniaxials.UniaxialMaterialWrapper>(1, mat1),
new KeyValuePair<int, Materials.Uniaxials.UniaxialMaterialWrapper>(2, mat2),
new KeyValuePair<int, Materials.Uniaxials.UniaxialMaterialWrapper>(3, mat3),
3, 0.79, 8, 8, 10, 10, GJMat);
}
else

{
colSection = new OpenSees.Materials.Sections.ElasticSection3dWrapper(4, Ec, colb * colh, 1 / 12.0 * colb * Math.Pow(colh, 3), 1 / 12.0 * colh * Math.Pow(colb, 3), GJ, 1);
}
بلوک های زبان برنامه نویسی TCL مختص تعریف مقاطع و المان های غیرخطی، جهت مقایسه با اینترپرتر زبان #C (پست بعدی):🌷

set colSec 1

# Define column elements

#set PDelta "ON"
set PDelta "OFF"

# Geometric transformation for columns
if {$PDelta == "ON"} {
# tag vecxz
geomTransf LinearWithPDelta 1 1 0 0
} else {
geomTransf Linear 1 1 0 0
}
# Number of column integration points (sections)

set np 4

# Create the nonlinear column elements
# tag ndI ndJ nPts secID transf
element nonlinearBeamColumn 1 1 5 $np $colSec 1
element nonlinearBeamColumn 2 2 6 $np $colSec 1
element nonlinearBeamColumn 3 3 7 $np $colSec 1
element nonlinearBeamColumn 4 4 8 $np $colSec 1

element nonlinearBeamColumn 5 5 10 $np $colSec 1
element nonlinearBeamColumn 6 6 11 $np $colSec 1
element nonlinearBeamColumn 7 7 12 $np $colSec 1
element nonlinearBeamColumn 8 8 13 $np $colSec 1

element nonlinearBeamColumn 9 10 15 $np $colSec 1
element nonlinearBeamColumn 10 11 16 $np $colSec 1
element nonlinearBeamColumn 11 12 17 $np $colSec 1
element nonlinearBeamColumn 12 13 18 $np $colSec 1

# Define beam elements

# Define material properties for elastic beams
# Using beam depth of 24 and width of 18
# --------------------------------------------
set Abeam [expr 18*24];
# "Cracked" second moments of area
set Ibeamzz [expr 0.5*1.0/12*18*pow(24,3)];
set Ibeamyy [expr 0.5*1.0/12*24*pow(18,3)];

# Define elastic section for beams
# tag E A Iz Iy G J
section Elastic 3 $E $Abeam $Ibeamzz $Ibeamyy $GJ 1.0
set beamSec 3

# Geometric transformation for beams
# tag vecxz
geomTransf Linear 2 1 1 0

# Number of beam integration points (sections)
set np 3

# Create the beam elements
# tag ndI ndJ nPts secID transf
element nonlinearBeamColumn 13 5 6 $np $beamSec 2
element nonlinearBeamColumn 14 6 7 $np $beamSec 2
element nonlinearBeamColumn 15 7 8 $np $beamSec 2
element nonlinearBeamColumn 16 8 5 $np $beamSec 2

element nonlinearBeamColumn 17 10 11 $np $beamSec 2
element nonlinearBeamColumn 18 11 12 $np $beamSec 2
element nonlinearBeamColumn 19 12 13 $np $beamSec 2
element nonlinearBeamColumn 20 13 10 $np $beamSec 2

element nonlinearBeamColumn 21 15 16 $np $beamSec 2
element nonlinearBeamColumn 22 16 17 $np $beamSec 2
element nonlinearBeamColumn 23 17 18 $np $beamSec 2
element nonlinearBeamColumn 24 18 15 $np $beamSec 2
بلوک های زبان برنامه نویسی #C مختص تعریف المان های غیرخطی، جهت مقایسه با اینترپرتر زبان TCL (دو پست قبل):🌷

//#define geometric transformation: performs a linear geometric transformation of beam stiffness and resisting force from the basic system to the global-coordinate system
//set ColTransfTag 1; # associate a tag to column transformation
//set BeamTransfTag 2; # associate a tag to beam transformation (good practice to keep col and beam separate)
//set ColTransfType Linear; # options, Linear PDelta Corotational
//geomTransf $ColTransfType $ColTransfTag; # only columns can have PDelta effects (gravity effects)
//geomTransf Linear $BeamTransfTag;
var pdelta = false;
Elements.CrdTransfs.CrdTransfWrapper colTransf = null;
if (!pdelta)
colTransf = new Elements.CrdTransfs.LinearCrdTransf3dWrapper(new VectorWrapper(new double[] { 1, 0, 0 }));
else
colTransf = new Elements.CrdTransfs.PDeltaCrdTransf3dWrapper(new VectorWrapper(new double[] { 1, 0, 0 }));
//# Number of column integration points (sections)
//set np 4
//# Create the nonlinear column elements
//# tag ndI ndJ nPts secID transf
//element nonlinearBeamColumn 1 1 5 $np $colSec 1
//element nonlinearBeamColumn 2 2 6 $np $colSec 1
//element nonlinearBeamColumn 3 3 7 $np $colSec 1
//element nonlinearBeamColumn 4 4 8 $np $colSec 1

//element nonlinearBeamColumn 5 5 10 $np $colSec 1
//element nonlinearBeamColumn 6 6 11 $np $colSec 1
//element nonlinearBeamColumn 7 7 12 $np $colSec 1
//element nonlinearBeamColumn 8 8 13 $np $colSec 1

//element nonlinearBeamColumn 9 10 15 $np $colSec 1
//element nonlinearBeamColumn 10 11 16 $np $colSec 1
//element nonlinearBeamColumn 11 12 17 $np $colSec 1
//element nonlinearBeamColumn 12 13 18 $np $colSec 1

var np = 4;

var integrationRule = new Elements.BeamIntegrations.BeamIntegrationWrapper(Elements.BeamIntegrations.BeamIntegrationType.Lobatto);
theDomain.AddElement(new Elements.ForceBeamColumn3dWrapper(1, 1, 5, np, colSection, integrationRule, colTransf));
theDomain.AddElement(new Elements.ForceBeamColumn3dWrapper(2, 2, 6, np, colSection, integrationRule, colTransf));
theDomain.AddElement(new Elements.ForceBeamColumn3dWrapper(3, 3, 7, np, colSection, integrationRule, colTransf));
theDomain.AddElement(new Elements.ForceBeamColumn3dWrapper(4, 4, 8, np, colSection, integrationRule, colTransf));

theDomain.AddElement(new Elements.ForceBeamColumn3dWrapper(5, 5, 10, np, colSection, integrationRule, colTransf));
theDomain.AddElement(new Elements.ForceBeamColumn3dWrapper(6, 6, 11, np, colSection, integrationRule, colTransf));
theDomain.AddElement(new Elements.ForceBeamColumn3dWrapper(7, 7, 12, np, colSection, integrationRule, colTransf));
theDomain.AddElement(new Elements.ForceBeamColumn3dWrapper(8, 8, 13, np, colSection, integrationRule, colTransf));

theDomain.AddElement(new Elements.ForceBeamColumn3dWrapper(9, 10, 15, np, colSection, integrationRule, colTransf));
theDomain.AddElement(new Elements.ForceBeamColumn3dWrapper(10, 11, 16, np, colSection, integrationRule, colTransf));
theDomain.AddElement(new Elements.ForceBeamColumn3dWrapper(11, 12, 17, np, colSection, integrationRule, colTransf));
theDomain.AddElement(new Elements.ForceBeamColumn3dWrapper(12, 13, 18, np, colSection, integrationRule, colTransf));

//# Define beam elements
//# --------------------
var Abeam = 18 * 24;
var Ibeamzz = 0.5 * 1.0 / 12 * 18.0 * Math.Pow(24, 3);
var Ibeamyy = 0.5 * 1.0 / 12 * 24.0 * Math.Pow(18, 3);

//# Define elastic section for beams
//# tag E A Iz Iy G J
//section Elastic 3 $E $Abeam $Ibeamzz $Ibeamyy $GJ 1.0
var beamSection = new OpenSees.Materials.Sections.ElasticSection3dWrapper(3, Ec, Abeam, Ibeamzz, Ibeamyy, GJ, 1);

//# Geometric transformation for beams
//# tag vecxz
//geomTransf Linear 2 1 1 0
Elements.CrdTransfs.LinearCrdTransf3dWrapper beamTransf = new Elements.CrdTransfs.LinearCrdTransf3dWrapper(new VectorWrapper(new double[] { 1, 1, 0 }));

var beam_np = 5;
//# Create the beam elements
//# tag ndI ndJ nPts secID transf
//element nonlinearBeamColumn 13 5 6 $np $beamSec 2
//element nonlinearBeamColumn 14 6 7 $np $beamSec 2
//element nonlinearBeamColumn 15 7 8 $np $beamSec 2
//element nonlinearBeamColumn 16 8 5 $np $beamSec 2

//element nonlinearBeamColumn 17 10 11 $np $beamSec 2
//element nonlinearBeamColumn 18 11 12 $np $beamSec 2
//element nonlinearBeamColumn 19 12 13 $np $beamSec 2
//element nonlinearBeamColumn 20 13 10 $np $beamSec 2

//element nonlinearBeamColumn 21 15 16 $np $beamSec 2
//element nonlinearBeamColumn 22 16 17 $np $beamSec 2
//element nonlinearBeamColumn 23 17 18 $np $beamSec 2
//element nonlinearBeamColumn 24 18 15 $np $beamSec 2

theDomain.AddElement(new Elements.ForceBeamColumn3dWrapper(13, 5, 6, beam_np, beamSection, integrationRule, beamTransf));
theDomain.AddElement(new Elements.ForceBeamColumn3dWrapper(14, 6, 7, beam_np, beamSection, integrationRule, beamTransf));
theDomain.AddElement(new Elements.ForceBeamColumn3dWrapper(15, 7, 8, beam_np, beamSection, integrationRule, beamTransf));
theDomain.AddElement(new Elements.ForceBeamColumn3dWrapper(16, 8, 5, beam_np, beamSection, integrationRule, beamTransf));

theDomain.AddElement(new Elements.ForceBeamColumn3dWrapper(17, 10, 11, beam_np, beamSection, integrationRule, beamTransf));
theDomain.AddElement(new Elements.ForceBeamColumn3dWrapper(18, 11, 12, beam_np, beamSection, integrationRule, beamTransf));
theDomain.AddElement(new Elements.ForceBeamColumn3dWrapper(19, 12, 13, beam_np, beamSection, integrationRule, beamTransf));
theDomain.AddElement(new Elements.ForceBeamColumn3dWrapper(20, 13, 10, beam_np, beamSection, integrationRule, beamTransf));

theDomain.AddElement(new Elements.ForceBeamColumn3dWrapper(21, 15, 16, beam_np, beamSection, integrationRule, beamTransf));
theDomain.AddElement(new Elements.ForceBeamColumn3dWrapper(22, 16, 17, beam_np, beamSection, integrationRule, beamTransf));
theDomain.AddElement(new Elements.ForceBeamColumn3dWrapper(23, 17, 18, beam_np, beamSection, integrationRule, beamTransf));
theDomain.AddElement(new Elements.ForceBeamColumn3dWrapper(24, 18, 15, beam_np, beamSection, integrationRule, beamTransf));
umfpack2_x64.zip
704.5 KB
نکته بسیار مهم و کاربردی:

دانشجویان و پژوهشگران عزیزجهت انجام تحلیل های مدل های خیلی سنگین و پیچیده، می توانند از سیستم حل معادلات خارجی UmfPack2 استفاده نمایند. این اپلیکیشن با پسوند dll.، سرعت حل معادلات را ۷۰ برابر افزایش می دهد و نسخه ویندوز ۶۴ بیتی آن جهت دانلود در کانال قرار گرفت.

system umfpack2
عصر آدینه تون بخیر❤️معبد آرتمیس واقع در شهر افسس ترکیه، زیباترین بنای روی زمین و یکی از عجایب هفتگانه🌷
Opensees Community
umfpack2_x64.zip
نکته تکمیلی پیرامون نحوه استفاده از سیستم حل معادلات خارجی UmfPack2 (درخواستی ۷۲ نفر از عزیزان کانال):

فایل dll. بایستی در فولدر کدنویسی مربوطه باشد و UmfPack2 نیز از طریق کامند ذیل در کد اصلی سورس شود:

loadPackage umfpack2 ; # load the dll with the new commands
Media is too big
VIEW IN TELEGRAM
هشدار که عالم به مویی بند است!🌷

سفر با ترن زندگی فراز و نشیب‌های زیادی دارد،
انسان گاهی در میانه‌‌ی این راه، سخت دلش می‌گیرد و از رفتن باز می‌ماند!
گردنه‌ای که هیچ، انتظارش را نداشتیم!
شاید در این لحظات، باید یادمان نرود و به یاد آوریم که زندگی، نمی‌تواند همیشه همان مسیر مستقیم و روشن و بی پیچ و خم باشد!
شاید باید بدانیم که بدون این پیچ و خم‌ها؛ زندگی، اصلا زندگی نیست!
و شاید بهتر باشد تا به جای دلگیر شدن از این پیچ و خم‌های پر از مه، عبور از آن‌ها را بیاموزیم و بکوشیم تا راه خود را گم نکنیم!