IV.2.11.3 Getting superelement Results from XDB files
We illustrate how the Results can be retrieved from XDB files when model contains superelements in
file “RUBY/EX27/readXdb.rb”. As the model cannot be read from XDB file, database is initialized by
reading a BDF file. Results are read into master database and its superelement databases using
readXdb method:
printf("' n' n 0) Reading all the results in the DataBase : ' n' n")
db.readXdb(xdbFileName)
As master database contains no nodes or elements, no Results are associated to master database, and
the following lines produce no output, except the title line:
printf("' n' n A) Getting results from the main database : ' n' n")
db.each_resultKey do |lcName,scName,tpName|
tmpRes=db.getResultCopy(lcName,scName,tpName)
printf("A) %-20s%-25s%-60s%-10d' n",lcName,scName,tpName,tmpRes.Size)
end
On the other hand, the following lines produce the same output as the corresponding ruby lines in the
“OP2” example in section IV.2.11.2:
printf("' n' n B) Getting all the results from all databases : ' n' n")
seIds.each do |seId|
currentDb=nil
if seId>0 then
currentDb=db.getSuperElementFromId(seId)
else
currentDb=db
end
printf("currentDb.SEID = %d' n",currentDb.SEID)
currentDb.each_resultKey do |lcName,scName,tpName|
res=currentDb.getResultCopy(lcName,scName,tpName)
$stdout.printf("B) %s - %s - %s : %d' n",lcName,scName,tpName,res.Size)
if (res.Name=="Displacements, Translational"||res.Name=="Stress Tensor") then
if (bDebug) then
str=format("%s on SEID %d",res.Name,seId)
Util::printRes($stdout,str,res)
end
end
end
end
XDB files can be attached to a NastranDb object:
printf("' n' n 1) Attaching XDB file to the database : ' n' n")
db.attachXdb(xdbFileName)
Then, information can be retrieved from XDB file, as is done when no superelement is present in the
model. This information can be dependent on the superelement too, so that corresponding
superelement database must be used to obtain the information. For example:
sdb3=db.getSuperElementFromId(3)
puts sdb3.getAttachmentNodeInfo(xdbFileName,1)
puts sdb3.getAttachmentNodeInfo(xdbFileName,2)
puts sdb3.getAttachmentNodeInfo(xdbFileName,3)
puts sdb3.getAttachmentElementExtId(xdbFileName,7,1)
puts sdb3.getAttachmentElementExtId(xdbFileName,7,5)
puts sdb3.getAttachmentElementExtId(xdbFileName,7,8)
Remark that the XDB file is attached to master database, but accessed from one of the superelement
database.
One obtains information from XDB attachment calling different methods from “db”
object:
printf("' n' n C) Attachment information : ' n' n")
db.getAttachmentLcInfos(xdbFileName).each do |info|
$stdout.printf("%s%30s%8d%8d%14f%14f' n",
info[0],info[1],info[3],info[4],info[5],info[6])
end
$stdout.printf("nbr load cases = %d' n",db.getAttachmentNbrLoadCases(xdbFileName))
lcNames=db.getAttachmentLcNames(xdbFileName)
scNames=db.getAttachmentScNames(xdbFileName)
resNames=db.getAttachmentResNames(xdbFileName)
puts lcNames,scNames,resNames
Previous lines produce the following output:
C) Attachment information :
Load Case 1 Statics 1 101 -1.000000 -1.000000
nbr load cases = 1
Load Case 1
Statics
Applied Loads, Forces
Applied Loads, Moments
Displacements, Rotational
Displacements, Translational
Reaction Forces, Forces
Reaction Forces, Moments
SPC Forces, Forces
SPC Forces, Moments
Stress Tensor
Note that tree “lcNames”, “scNames” and “resNames” Arrays are filled by these instrutions. These
arrays are used later in the rest of the script.
Again, no Results can be obtained from the master database, so that the following lines produce no
output except the title line:
printf("' n' n D) Getting Attachment results from the main database : ' n' n")
lcNames.each do |lcName|
scNames.each do |scName|
resNames.each do |resName|
h=db.getAttachmentResults(xdbFileName,lcName,scName,resName)
if (h) then
h.each do |key,res|
str1,str2,str3=key
$stdout.printf("D) SEID %d - %s - %s - %s : %d' n",db.SEID,str1,str2,str3,res.Size)
end
end
end
end
end
On the other hand, the following lines output Results obtained using “getAttachmentResults” for the
superelement databases:
printf("' n' n E) Getting Attachment results from all databases : ' n' n")
seIds.each do |seId|
currentDb=nil
if seId>0 then
currentDb=db.getSuperElementFromId(seId)
else
currentDb=db
end
printf("currentDb.SEID = %d' n",currentDb.SEID)
lcNames.each do |lcName|
scNames.each do |scName|
resNames.each do |resName|
h=currentDb.getAttachmentResults(xdbFileName,lcName,scName,resName)
if (h) then
h.each do |key,res|
str1,str2,str3=key
$stdout.printf("E) SEID %d - %s - %s - %s : %d' n",currentDb.SEID,str1,str2,str3,res.Size)
end
end
end
end
end
end
In the same script, one also outputs the characteristics of Results obtained by calling the method
“readXdb2H” on master and superelement databases.