Read .txt file , Truss optimization
    6 visualizzazioni (ultimi 30 giorni)
  
       Mostra commenti meno recenti
    
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 Commenti
  Naif Alsalem
 il 5 Nov 2020
				It would be helpful if you just attached the .txt file so that we can try it out by your code. 
Risposta accettata
  Sylvain
      
 il 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
Più risposte (0)
Vedere anche
Categorie
				Scopri di più su Get Started with Optimization Toolbox in Help Center e File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


