FEM: source code typos, issue 0002914
This commit is contained in:
@@ -93,7 +93,7 @@ TYPESYSTEM_SOURCE(Fem::FemMesh , Base::Persistence);
|
||||
FemMesh::FemMesh()
|
||||
{
|
||||
//Base::Console().Log("FemMesh::FemMesh():%p (id=%i)\n",this,StatCount);
|
||||
// create a mesh allways with new StudyId to avoid overlapping destruction
|
||||
// create a mesh always with new StudyId to avoid overlapping destruction
|
||||
myMesh = getGenerator()->CreateMesh(StatCount++,false);
|
||||
}
|
||||
|
||||
@@ -1126,7 +1126,7 @@ void FemMesh::writeABAQUS(const std::string &Filename) const
|
||||
//
|
||||
// tetras
|
||||
// master 0.14 release
|
||||
// changed to this in August 2013, commited by juergen (jriedel)
|
||||
// changed to this in August 2013, committed by juergen (jriedel)
|
||||
// https://github.com/FreeCAD/FreeCAD/commit/af56b324b9566b20f3b6e7880c29354c1dbe7a99
|
||||
//std::vector<int> c3d4 = boost::assign::list_of(0)(3)(1)(2);
|
||||
//std::vector<int> c3d10 = boost::assign::list_of(0)(2)(1)(3)(6)(5)(4)(7)(9)(8);
|
||||
|
||||
@@ -989,7 +989,7 @@ PyObject* FemMeshPy::getGroupElements(PyObject *args)
|
||||
return Py::new_reference_to(tuple);
|
||||
}
|
||||
|
||||
// ===== Atributes ============================================================
|
||||
// ===== Attributes ============================================================
|
||||
|
||||
Py::Dict FemMeshPy::getNodes(void) const
|
||||
{
|
||||
|
||||
@@ -60,7 +60,7 @@ FemPostPipeline::FemPostPipeline()
|
||||
ADD_PROPERTY_TYPE(Filter, (0), "Pipeline", App::Prop_None, "The filter used in in this pipeline");
|
||||
ADD_PROPERTY_TYPE(Functions, (0), "Pipeline", App::Prop_Hidden, "The function provider which groups all pipeline functions");
|
||||
ADD_PROPERTY_TYPE(Mode,(long(0)), "Pipeline", App::Prop_None, "Selects the pipeline data transition mode. In serial every filter"
|
||||
"gets the output of the previous one as input, in parrallel every"
|
||||
"gets the output of the previous one as input, in parallel every"
|
||||
"filter gets the pipelien source as input.");
|
||||
Mode.setEnums(ModeEnums);
|
||||
}
|
||||
|
||||
@@ -129,7 +129,7 @@ class FemGmshTools():
|
||||
def get_dimension(self):
|
||||
# Dimension
|
||||
# known_element_dimensions = ['From Shape', '1D', '2D', '3D']
|
||||
# if not given, GMSH uses the hightest availabe.
|
||||
# if not given, GMSH uses the hightest available.
|
||||
# A use case for not "From Shape" would be a surface (2D) mesh of a solid
|
||||
if self.dimension == 'From Shape':
|
||||
shty = self.part_obj.Shape.ShapeType
|
||||
|
||||
@@ -200,7 +200,7 @@ class FemInputWriterCcx(FemInputWriter.FemInputWriter):
|
||||
inpfileMain.write('** written by femmesh.writeABAQUS\n')
|
||||
inpfileMain.write('*INCLUDE,INPUT=' + include_name + "_Node_Elem_sets.inp \n")
|
||||
|
||||
# create seperate inputfiles for each node set or constraint
|
||||
# create separate inputfiles for each node set or constraint
|
||||
if self.fixed_objects or self.displacement_objects or self.planerotation_objects:
|
||||
inpfileNodes = open(name + "_Node_sets.inp", 'w')
|
||||
if self.analysis_type == "thermomech" and self.temperature_objects:
|
||||
@@ -253,7 +253,7 @@ class FemInputWriterCcx(FemInputWriter.FemInputWriter):
|
||||
if self.analysis_type == "thermomech" and self.temperature_objects:
|
||||
self.write_node_sets_constraints_temperature(inpfileNodeTemp)
|
||||
|
||||
# include seperately written temperature constraint in input file
|
||||
# include separately written temperature constraint in input file
|
||||
if self.analysis_type == "thermomech":
|
||||
inpfileMain.write('\n***********************************************************\n')
|
||||
inpfileMain.write('**Node sets for temperature constraint\n')
|
||||
@@ -321,7 +321,7 @@ class FemInputWriterCcx(FemInputWriter.FemInputWriter):
|
||||
if self.fluidsection_objects:
|
||||
self.write_constraints_fluidsection(inpfileMain)
|
||||
|
||||
# include seperately written constraints in input file
|
||||
# include separately written constraints in input file
|
||||
inpfileMain.write('\n***********************************************************\n')
|
||||
inpfileMain.write('** Node loads\n')
|
||||
inpfileMain.write('** written by write_constraints_force\n')
|
||||
@@ -725,7 +725,7 @@ class FemInputWriterCcx(FemInputWriter.FemInputWriter):
|
||||
self.solver_obj.TimeEnd = 1.0
|
||||
elif self.analysis_type == 'static' or self.analysis_type == 'frequency':
|
||||
pass # not supported for static and frequency!
|
||||
# ANALYSIS paramter line
|
||||
# ANALYSIS parameter line
|
||||
analysis_parameter = ''
|
||||
if self.analysis_type == 'static':
|
||||
if self.solver_obj.IterationsUserDefinedIncrementations:
|
||||
@@ -827,7 +827,7 @@ class FemInputWriterCcx(FemInputWriter.FemInputWriter):
|
||||
|
||||
def write_constraints_transform(self, f):
|
||||
f.write('\n***********************************************************\n')
|
||||
f.write('** Transform Constaints\n')
|
||||
f.write('** Transform Constraints\n')
|
||||
f.write('** written by {} function\n'.format(sys._getframe().f_code.co_name))
|
||||
for trans_object in self.transform_objects:
|
||||
trans_obj = trans_object['Object']
|
||||
@@ -853,7 +853,7 @@ class FemInputWriterCcx(FemInputWriter.FemInputWriter):
|
||||
f.write('\n')
|
||||
# grav (erdbeschleunigung) is equal for all elements
|
||||
# should be only one constraint
|
||||
# different elment sets for different density are written in the material element sets allready
|
||||
# different elment sets for different density are written in the material element sets already
|
||||
|
||||
def write_constraints_force(self, f):
|
||||
# check shape type of reference shape and get node loads
|
||||
@@ -1275,7 +1275,7 @@ def get_ccx_elset_beam_name(mat_name, beamsec_name, mat_short_name=None, beamsec
|
||||
mat_short_name = 'Mat0'
|
||||
if not beamsec_short_name:
|
||||
beamsec_short_name = 'Beam0'
|
||||
if len(mat_name + beamsec_name) > 20: # max identifier lenght in CalculiX for beam elsets
|
||||
if len(mat_name + beamsec_name) > 20: # max identifier length in CalculiX for beam elsets
|
||||
return mat_short_name + beamsec_short_name
|
||||
else:
|
||||
return mat_name + beamsec_name
|
||||
@@ -1297,7 +1297,7 @@ def get_ccx_elset_shell_name(mat_name, shellth_name, mat_short_name=None, shellt
|
||||
mat_short_name = 'Mat0'
|
||||
if not shellth_short_name:
|
||||
shellth_short_name = 'Shell0'
|
||||
if len(mat_name + shellth_name) > 80: # standard max identifier lenght in CalculiX
|
||||
if len(mat_name + shellth_name) > 80: # standard max identifier length in CalculiX
|
||||
return mat_short_name + shellth_short_name
|
||||
else:
|
||||
return mat_name + shellth_name
|
||||
@@ -1308,7 +1308,7 @@ def get_ccx_elset_solid_name(mat_name, solid_name=None, mat_short_name=None):
|
||||
solid_name = 'Solid'
|
||||
if not mat_short_name:
|
||||
mat_short_name = 'Mat0'
|
||||
if len(mat_name + solid_name) > 80: # standard max identifier lenght in CalculiX
|
||||
if len(mat_name + solid_name) > 80: # standard max identifier length in CalculiX
|
||||
return mat_short_name + solid_name
|
||||
else:
|
||||
return mat_name + solid_name
|
||||
|
||||
@@ -51,7 +51,7 @@ def get_femelements_by_references(femmesh, femelement_table, references, femnode
|
||||
# blind fast binary search, works for volumes only
|
||||
references_femelements += get_femelements_by_femnodes_bin(femelement_table, femnodes_ele_table, ref_femnodes) # femelements for all references
|
||||
else:
|
||||
# standars search
|
||||
# standard search
|
||||
references_femelements += get_femelements_by_femnodes_std(femelement_table, ref_femnodes) # femelements for all references
|
||||
return references_femelements
|
||||
|
||||
@@ -652,7 +652,7 @@ def get_ref_edgenodes_table(femmesh, femelement_table, refedge):
|
||||
|
||||
|
||||
def get_ref_edgenodes_lengths(femnodes_mesh, edge_table):
|
||||
# calulate the appropriate node_length for every node of every mesh edge (me)
|
||||
# calculate the appropriate node_length for every node of every mesh edge (me)
|
||||
# G. Lakshmi Narasaiah, Finite Element Analysis, p206ff
|
||||
|
||||
# [ (nodeID, length), ... , (nodeID, length) ] some nodes will have more than one entry
|
||||
@@ -848,7 +848,7 @@ def build_mesh_faces_of_volume_elements(face_table, femelement_table):
|
||||
|
||||
|
||||
def get_ref_facenodes_areas(femnodes_mesh, face_table):
|
||||
# calulate the appropriate node_areas for every node of every mesh face (mf)
|
||||
# calculate the appropriate node_areas for every node of every mesh face (mf)
|
||||
# G. Lakshmi Narasaiah, Finite Element Analysis, p206ff
|
||||
# FIXME only gives exact results in case of a real triangle. If for S6 or C3D10 elements
|
||||
# the midnodes are not on the line between the end nodes the area will not be a triangle
|
||||
@@ -985,7 +985,7 @@ def get_ref_facenodes_areas(femnodes_mesh, face_table):
|
||||
|
||||
|
||||
def get_ref_shape_node_sum_geom_table(node_geom_table):
|
||||
# shape could be Edge or Face, geom could be lenght or area
|
||||
# shape could be Edge or Face, geom could be length or area
|
||||
# summ of legth or area for each node of the ref_shape
|
||||
node_sum_geom_table = {}
|
||||
for n, A in node_geom_table:
|
||||
@@ -1076,7 +1076,7 @@ def get_reference_group_elements(obj, aPart):
|
||||
def get_anlysis_empty_references_group_elements(group_elements, aAnalysis, aShape):
|
||||
'''get the elementIDs if the Reference shape is empty
|
||||
see get_analysis_group_elements() for more informatations
|
||||
on solid meshes only material objects could have an empty reference without beeing something wrong!
|
||||
on solid meshes only material objects could have an empty reference without being something wrong!
|
||||
face meshes could have empty ShellThickness and edge meshes could have empty BeamSection/FluidSection
|
||||
'''
|
||||
# print(group_elements)
|
||||
|
||||
@@ -42,7 +42,7 @@ class FemToolsCcx(FemTools.FemTools):
|
||||
|
||||
## The constructor
|
||||
# @param analysis - analysis object to be used as the core object.
|
||||
# @param test_mode - True indicates that no real calculations will take place, so ccx bianry is not required. Used by test module.
|
||||
# @param test_mode - True indicates that no real calculations will take place, so ccx binary is not required. Used by test module.
|
||||
# "__init__" tries to use current active analysis in analysis is left empty.
|
||||
# Rises exception if analysis is not set and there is no active analysis
|
||||
def __init__(self, analysis=None, solver=None, test_mode=False):
|
||||
|
||||
@@ -856,7 +856,7 @@ void CmdFemConstraintInitialTemperature::activated(int)
|
||||
|
||||
std::string FeatName = getUniqueObjectName("FemConstraintInitialTemperature");
|
||||
|
||||
openCommand("Make FEM constraint intial temperature on body");
|
||||
openCommand("Make FEM constraint initial temperature on body");
|
||||
doCommand(Doc,"App.activeDocument().addObject(\"Fem::ConstraintInitialTemperature\",\"%s\")",FeatName.c_str());
|
||||
doCommand(Doc,"App.activeDocument().%s.Scale = 1",FeatName.c_str()); //OvG: set initial scale to 1
|
||||
doCommand(Doc,"App.activeDocument().%s.Member = App.activeDocument().%s.Member + [App.activeDocument().%s]",
|
||||
@@ -1446,7 +1446,7 @@ void CmdFemPostFunctions::languageChange()
|
||||
|
||||
QAction* cmd = a[0];
|
||||
cmd->setText(QApplication::translate("CmdFemPostFunctions","Plane"));
|
||||
cmd->setToolTip(QApplication::translate("Fem_PostCreateFunctions","Create a plane function, defined by its orgin and normal"));
|
||||
cmd->setToolTip(QApplication::translate("Fem_PostCreateFunctions","Create a plane function, defined by its origin and normal"));
|
||||
cmd->setStatusTip(cmd->toolTip());
|
||||
|
||||
cmd = a[1];
|
||||
|
||||
@@ -376,7 +376,7 @@ void TaskFemConstraintFluidBoundary::updateSubtypeUI()
|
||||
|
||||
}
|
||||
|
||||
/// hide/disable UI only happend in constructor, update helptext and valuetext here
|
||||
/// hide/disable UI only happened in constructor, update helptext and valuetext here
|
||||
void TaskFemConstraintFluidBoundary::updateTurbulenceUI()
|
||||
{
|
||||
ui->labelHelpText->setText(tr(TurbulenceSpecificationHelpTexts[ui->comboTurbulenceSpecification->currentIndex()]));
|
||||
|
||||
@@ -131,7 +131,7 @@ void ViewProviderFemConstraintContact::updateData(const App::Property* prop)
|
||||
//define separator
|
||||
SoSeparator* sep = new SoSeparator();
|
||||
|
||||
//first move to correct postion
|
||||
//first move to correct position
|
||||
SoTranslation* trans = new SoTranslation();
|
||||
SbVec3f newPos=base+scaledheight*dir*0.12f;
|
||||
trans->translation.setValue(newPos);
|
||||
@@ -154,7 +154,7 @@ void ViewProviderFemConstraintContact::updateData(const App::Property* prop)
|
||||
cbe->height.setValue(scaledheight*0.25);
|
||||
cbe->width.setValue(scaledwidth*0.75);
|
||||
sep->addChild(cbe);
|
||||
//translate postion
|
||||
//translate position
|
||||
SoTranslation* trans2 = new SoTranslation();
|
||||
trans2->translation.setValue(SbVec3f(0,0,0));
|
||||
sep->addChild(trans2);
|
||||
|
||||
@@ -131,7 +131,7 @@ void ViewProviderFemConstraintHeatflux::updateData(const App::Property* prop)
|
||||
SoSeparator* sep = new SoSeparator();
|
||||
|
||||
///draw a temp gauge,with sphere and a cylinder
|
||||
//first move to correct postion
|
||||
//first move to correct position
|
||||
SoTranslation* trans = new SoTranslation();
|
||||
SbVec3f newPos=base+scaledradius*dir*0.7f;
|
||||
trans->translation.setValue(newPos);
|
||||
@@ -152,7 +152,7 @@ void ViewProviderFemConstraintHeatflux::updateData(const App::Property* prop)
|
||||
SoSphere* sph = new SoSphere();
|
||||
sph->radius.setValue(scaledradius*0.75);
|
||||
sep->addChild(sph);
|
||||
//translate postion
|
||||
//translate position
|
||||
SoTranslation* trans2 = new SoTranslation();
|
||||
trans2->translation.setValue(SbVec3f(0,scaledheight*0.375,0));
|
||||
sep->addChild(trans2);
|
||||
@@ -161,7 +161,7 @@ void ViewProviderFemConstraintHeatflux::updateData(const App::Property* prop)
|
||||
cyl->height.setValue(scaledheight*0.5);
|
||||
cyl->radius.setValue(scaledradius*0.375);
|
||||
sep->addChild(cyl);
|
||||
//translate postion
|
||||
//translate position
|
||||
SoTranslation* trans3 = new SoTranslation();
|
||||
trans3->translation.setValue(SbVec3f(0,scaledheight*0.375,0));
|
||||
sep->addChild(trans3);
|
||||
@@ -174,7 +174,7 @@ void ViewProviderFemConstraintHeatflux::updateData(const App::Property* prop)
|
||||
cyl2->height.setValue(scaledheight*0.25);
|
||||
cyl2->radius.setValue(scaledradius*0.375);
|
||||
sep->addChild(cyl2);
|
||||
//translate postion
|
||||
//translate position
|
||||
SoTranslation* trans4 = new SoTranslation();
|
||||
trans4->translation.setValue(SbVec3f(0,-scaledheight*0.375,0));
|
||||
sep->addChild(trans4);
|
||||
|
||||
@@ -137,7 +137,7 @@ void ViewProviderFemConstraintPlaneRotation::updateData(const App::Property* pro
|
||||
SoSeparator* sep = new SoSeparator();
|
||||
|
||||
///draw a temp gauge,with sphere and a cylinder
|
||||
//first move to correct postion
|
||||
//first move to correct position
|
||||
SoTranslation* trans = new SoTranslation();
|
||||
SbVec3f newPos=base+scaledradius*dir*0.08f;
|
||||
trans->translation.setValue(newPos);
|
||||
@@ -158,7 +158,7 @@ void ViewProviderFemConstraintPlaneRotation::updateData(const App::Property* pro
|
||||
//SoSphere* sph = new SoSphere();
|
||||
//sph->radius.setValue(scaledradius*0.75);
|
||||
//sep->addChild(sph);
|
||||
//translate postion
|
||||
//translate position
|
||||
//SoTranslation* trans2 = new SoTranslation();
|
||||
//trans2->translation.setValue(SbVec3f(0,scaledheight*0.375,0));
|
||||
//sep->addChild(trans2);
|
||||
@@ -167,7 +167,7 @@ void ViewProviderFemConstraintPlaneRotation::updateData(const App::Property* pro
|
||||
cyl->height.setValue(scaledheight*0.5);
|
||||
cyl->radius.setValue(scaledradius*0.375);
|
||||
sep->addChild(cyl);
|
||||
//translate postion
|
||||
//translate position
|
||||
//SoTranslation* trans3 = new SoTranslation();
|
||||
//trans3->translation.setValue(SbVec3f(0,scaledheight*0.05,0));
|
||||
//sep->addChild(trans3);
|
||||
|
||||
@@ -130,7 +130,7 @@ void ViewProviderFemConstraintTemperature::updateData(const App::Property* prop)
|
||||
SoSeparator* sep = new SoSeparator();
|
||||
|
||||
///draw a temp gauge,with sphere and a cylinder
|
||||
//first move to correct postion
|
||||
//first move to correct position
|
||||
SoTranslation* trans = new SoTranslation();
|
||||
SbVec3f newPos=base+scaledradius*dir*0.7f;
|
||||
trans->translation.setValue(newPos);
|
||||
@@ -151,7 +151,7 @@ void ViewProviderFemConstraintTemperature::updateData(const App::Property* prop)
|
||||
SoSphere* sph = new SoSphere();
|
||||
sph->radius.setValue(scaledradius*0.75);
|
||||
sep->addChild(sph);
|
||||
//translate postion
|
||||
//translate position
|
||||
SoTranslation* trans2 = new SoTranslation();
|
||||
trans2->translation.setValue(SbVec3f(0,scaledheight*0.375,0));
|
||||
sep->addChild(trans2);
|
||||
@@ -160,7 +160,7 @@ void ViewProviderFemConstraintTemperature::updateData(const App::Property* prop)
|
||||
cyl->height.setValue(scaledheight*0.5);
|
||||
cyl->radius.setValue(scaledradius*0.375);
|
||||
sep->addChild(cyl);
|
||||
//translate postion
|
||||
//translate position
|
||||
SoTranslation* trans3 = new SoTranslation();
|
||||
trans3->translation.setValue(SbVec3f(0,scaledheight*0.375,0));
|
||||
sep->addChild(trans3);
|
||||
|
||||
@@ -1099,7 +1099,7 @@ void ViewProviderFEMMeshBuilder::createMesh(const App::Property* prop,
|
||||
vFaceElementIdx.resize(triangleCount);
|
||||
int index=0,indexIdx=0;
|
||||
int32_t* indices = faces->coordIndex.startEditing();
|
||||
// iterate all not hided element faces, allways assure CLOCKWISE triangle ordering to allow backface culling
|
||||
// iterate all not hided element faces, always assure CLOCKWISE triangle ordering to allow backface culling
|
||||
for(int l=0; l< FaceSize;l++){
|
||||
if(! facesHelper[l].hide){
|
||||
switch( facesHelper[l].Element->NbNodes()){
|
||||
|
||||
@@ -243,7 +243,7 @@ Py::List ViewProviderFemMeshPy::getVisibleElementFaces(void) const
|
||||
const std::vector<unsigned long> & visElmFc = this->getViewProviderFemMeshPtr()->getVisibleElementFaces();
|
||||
std::vector<unsigned long> trans;
|
||||
|
||||
// sorting out double faces through higer order elements and null entries
|
||||
// sorting out double faces through higher order elements and null entries
|
||||
long elementOld =0, faceOld=0;
|
||||
for (std::vector<unsigned long>::const_iterator it = visElmFc.begin();it!=visElmFc.end();++it){
|
||||
if(*it == 0)
|
||||
|
||||
@@ -305,7 +305,7 @@
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">P1-P3 # Stress intensity stress equation. Available values are numpy array format. Calculation np.funtion can be used on available values. </span></p></body></html></string>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">P1-P3 # Stress intensity stress equation. Available values are numpy array format. Calculation np.function can be used on available values. </span></p></body></html></string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
||||
@@ -466,10 +466,10 @@ class _TaskPanelFemMaterial:
|
||||
material_name = os.path.basename(saveName[:-len('.FCMat')])
|
||||
if material_name not in knownMaterials:
|
||||
self.export_FCMat(saveName, self.obj.Material)
|
||||
FreeCAD.Console.PrintMessage("Sucessfully save the Material property file: " + saveName + "\n")
|
||||
FreeCAD.Console.PrintMessage("Successfully save the Material property file: " + saveName + "\n")
|
||||
else:
|
||||
self.export_FCMat(saveName, self.obj.Material)
|
||||
FreeCAD.Console.PrintMessage("Sucessfully overwritren the Material property file: " + saveName + "\n")
|
||||
FreeCAD.Console.PrintMessage("Successfully overwritren the Material property file: " + saveName + "\n")
|
||||
"""
|
||||
msgBox = QMessageBox()
|
||||
msgBox.setText("FcMat file name {} has existed in {} or system folder, overwriting?\n".format(saveName, TargetDir))
|
||||
@@ -479,7 +479,7 @@ class _TaskPanelFemMaterial:
|
||||
ret = msgBox.exec_()
|
||||
if ret == QMessageBox.Yes:
|
||||
self.export_FCMat(saveName, self.obj.Material)
|
||||
FreeCAD.Console.PrintMessage("Sucessfully overwritren the Material property file: "+ saveName + "\n")
|
||||
FreeCAD.Console.PrintMessage("Successfully overwritren the Material property file: "+ saveName + "\n")
|
||||
"""
|
||||
|
||||
###################geometry reference selection #################
|
||||
|
||||
@@ -663,7 +663,7 @@ def readResult(frd_input):
|
||||
mode_results['stressv'] = mode_stressv
|
||||
mode_results['strainv'] = mode_strain
|
||||
mode_results['peeq'] = mode_peeq
|
||||
mode_results['time'] = 0 # Dont return time if static
|
||||
mode_results['time'] = 0 # Don't return time if static
|
||||
results.append(mode_results)
|
||||
mode_disp = {}
|
||||
mode_stress = {}
|
||||
|
||||
@@ -146,7 +146,7 @@ def read_z88_disp(z88_disp_input):
|
||||
disp_file = '/pathtofile/z88o2.txt'
|
||||
importZ88O2Results.import_z88_disp(disp_file , fea.analysis)
|
||||
|
||||
The FreeCAD file needs to have an Analysis and an appropiate FEM Mesh
|
||||
The FreeCAD file needs to have an Analysis and an appropriate FEM Mesh
|
||||
'''
|
||||
nodes = {}
|
||||
mode_disp = {}
|
||||
|
||||
Reference in New Issue
Block a user