Read .txt file , Truss optimization
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Rita Akonobi
am 5 Nov. 2020
Kommentiert: Rita Akonobi
am 5 Nov. 2020
Hi all, Please I have been stuck trying to figure out why my code does not read some part of my file. It doesn't read the NODE_COORDINATES. I have attached the .txt file and the code. NOTE: If I run other files with the code, it works, so i'm pretty sure the error is in the .txt file but I just can't find it
TITLE = test_22
ELEMENTS = 22
1 1 2 0.04 2.281e-4
2 2 3 0.04 2.281e-4
3 3 4 0.04 2.281e-4
4 4 5 0.04 2.281e-4
5 5 6 0.04 1.902e-4
6 6 7 0.04 1.902e-4
7 1 7 0.04 2.281e-4
8 2 6 0.04 2.281e-4
9 3 5 0.04 2.281e-4
10 2 7 0.04 2.281e-4
11 3 6 0.04 2.281e-4
12 1 6 0.04 2.281e-4
13 2 5 0.04 2.281e-4
14 1 8 0.04 1.902e-4
15 8 9 0.04 1.902e-4
16 9 10 0.04 2.281e-4
17 10 11 0.04 2.281e-4
18 11 12 0.04 2.281e-4
19 7 12 0.04 2.281e-4
20 8 12 0.04 2.281e-4
21 9 11 0.04 2.281e-4
22 7 8 0.04 2.281e-4
23 9 12 0.04 2.281e-4
24 1 12 0.04 1.902e-4
25 8 11 0.04 1.902e-4
NODE_COORDINATES = 12
1 0.00 0.00
2 -5.00 0.00
3 -10.00 0.00
4 -15.00 0.00
5 -10.00 3.33
6 -5.00 5.33
7 0.00 6.00
8 5.0 0.00
9 10.00 0.00
10 15.00 0.00
11 10.00 3.33
12 5.00 5.33
NODES_WITH_PRESCRIBED_DISPLACEMENTS = 2
4 01 0.000 0.000
10 11 0.000 0.000
YOUNG_MODULUS = 200000000000.0
YIELD_STRESS = 130000.0
DENSITY = 7860
THRESH_HOLD_FREQUENCY = 2.5
NODES_WITH_POINT_LOAD = 5
1 0 -300
2 0 -300
3 0 -300
8 0 -300
9 0 -300
PLOTTING_AMPLIFICATION_FACTOR = 50
NODES_WITH_VARIABLE_COORDINATES = 5
5 01 -15.0 1.0 -5.0 6.0
6 01 -10.0 2.0 0.0 10.0
7 01 -5.0 2.5 5.0 12.0
11 01 5.0 1.0 15.0 6.0
12 01 .2.50 2.0 10.0 10.0
DEFLECTION_LIMIT = 4
1 11 0.0508 0.0508
2 11 0.0508 0.0508
3 11 0.0508 0.0508
9 11 0.0508 0.0508
function [coorddofvar,fixeddata] = truss2D_readdata(filename)
%
% Set some basic variables
% ========================
% Number of degrees of freedom per node
ndofn=2;
% Number of nodes of the element
nnode=2;
%
% Read information from data file
% ===============================
%
fid = fopen(filename, 'r');
title = fscanf(fid, 'TITLE = %s',1);
%
% Total number of elements in the mesh
nelem = fscanf(fid, '\nELEMENTS = %d', 1);
%
%Read Table of connectivities
%
lnods = fscanf(fid, '\n%d %d %d %f %f', [nnode+3,nelem]);
lnods = lnods';
sortrows(lnods,1);
%...cross-sectional areas
csarea = lnods(:,4);
%...second moment of areas
sndmoa = lnods(:,5);
%...store only connectivities in lnods
lnods = lnods(:,2:nnode+1);
%...create table of element global degrees of freedom
eldofX = lnods*ndofn-1;
eldofY = lnods*ndofn;
eldofs = [ eldofX(:,1) eldofY(:,1) eldofX(:,2) eldofY(:,2) ]
%
% Read Nodal coordinates
%
npoin = fscanf(fid, '\nNODE_COORDINATES = %d', 1)
coord = fscanf(fid, '\n%d %f %f', [3, npoin])
coord = coord';sortrows(coord,1);nodnumbers=coord(:,1)
coord = coord(:,2:3);
%...create table of nodal degrees of freedom
nodofs = [ nodnumbers*ndofn-1 nodnumbers*ndofn ];
%
%
% Read Prescribed displacements
%
nnodefix = fscanf(fid,'\nNODES_WITH_PRESCRIBED_DISPLACEMENTS = %d',1);
ipresc = fscanf(fid, '\n%d %d %f %f', [2+ndofn, nnodefix]);
ipresc = ipresc';fixednodes=ipresc(:,1);
%...create tables of fixed dofs and corresponding prescribed values
ifdoffix = zeros(npoin*ndofn,1);
icount = 0;
for inodefix = 1:nnodefix
ipoin=ipresc(inodefix,1);
dofX=nodofs(ipoin,1);
dofY=nodofs(ipoin,2);
if ipresc(inodefix,2)==11
ifdoffix(dofX)=1;
ifdoffix(dofY)=1 ;
icount = icount+1;
valuedoffix(icount) = ipresc(inodefix,3);
fixeddoftable(icount) = dofX;
icount = icount+1;
valuedoffix(icount) = ipresc(inodefix,4);
fixeddoftable(icount) = dofY;
elseif ipresc(inodefix,2)==1
ifdoffix(dofY)=1;
icount = icount+1;
valuedoffix(icount) = ipresc(inodefix,4);
fixeddoftable(icount) = dofY;
elseif ipresc(inodefix,2)==10
ifdoffix(dofX)=1;
icount = icount+1;
valuedoffix(icount) = ipresc(inodefix,3);
fixeddoftable(icount) = dofX;
elseif ipresc(inodefix,2)==0
else
error('Wrong displacement prescription code in data file')
end
end
%...create table of free dofs by subtracting the set of fixed dofs
% from the set of all dofs
ngdof=npoin*ndofn
alldoftable=[1:ngdof]'
freedoftable = setxor(alldoftable,fixeddoftable);
%
% Read Material properties
%
matprop.young = fscanf(fid, '\nYOUNG_MODULUS = %f', 1);
matprop.yield = fscanf(fid, '\nYIELD _STRESS = %f', 1);
%added by Ritamatprop
matprop.density = fscanf(fid, '\nDENSITY = %f', 1);
matprop.frequency = fscanf(fid,'\nTHRESH_HOLD_FREQUENCY = %f', 1);
2 Kommentare
Naif Alsalem
am 5 Nov. 2020
It would be helpful if you just attached the .txt file so that we can try it out by your code.
Akzeptierte Antwort
Sylvain
am 5 Nov. 2020
The issue is not in your code, but in your text file, line 71:
12 01 .2.50 2.0 10.0 10.0
Must be converted to :
12 01 2.50 2.0 10.0 10.0
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Transportation Engineering finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!