Read .txt file , Truss optimization
5 ビュー (過去 30 日間)
古いコメントを表示
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 件のコメント
Naif Alsalem
2020 年 11 月 5 日
It would be helpful if you just attached the .txt file so that we can try it out by your code.
採用された回答
Sylvain
2020 年 11 月 5 日
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
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Transportation Engineering についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!