FeResPost Web Site                     FeResPost Online User Manual

X.F.5.1 Data for load cases

Those data are very similar to those defined in “A” version of the post-processing. One added however, new methods to the “LoadCase” module to allow the post-processing of dynamic Results (SOL108 and SOL111 of Nastran).

In iterator “LoadCases::each”, a new proc object called “makeDynamLoop” loops on all the dynamic sub-cases (frequency outputs) for a given load case name. The three argument of this loop are

The first operation performed by “makeDynamLoop” is to build a list of sub-cases in sorted in order of increasing frequencies:

            lcNames=[lcName]
            tmpList={}
            xdbInfos=db.getXdbLcInfos(fullXdbName)
            xdbInfos.each do |info|
                if (info[0]==lcName) then
                    tmpList[info[4]]=info[1]
                end
            end
            scList=tmpList.sort

In the previous instructions, one first loads the information about load cases and sub-cases stored in the xdb Result file. Then, the sub-cases corresponding to the selected load case name are selected. Finally, they are sorted and stored in the Array “scList”.

Then, a loop is done on the list of sub-cases stored in “scList”. A new Array “scNames” containing a list of sub-cases is filled. Each time its size reaches the values specified by the proc argument, one reads the Results, yields them, and finally erases them from the DataBase. This is done as follows:

            scNames=[]
            scList.each do |intId,scName|
                scNames << scName
                if (scNames.size==maxScNbr) then
                    db.readXdb(fullXdbName,lcNames,scNames)
                    scNames.each do |name|
                        yield([db,lcName,name])
                        db.removeResults("SubCaseId",name)
                        GC.start
                    end
                    scNames=[]
                end
            end

At the end, the remaining sub-cases are calculated the same way:

            db.readXdb(fullXdbName,lcNames,scNames)
            scNames.each do |name|
                yield([db,lcName,name])
                db.removeResults("SubCaseId",name)
                GC.start
            end
            GC.start
        end

An example of use of the “makeDynamLoop” proc follows:

        when "SINUS_Z" then
            db=getDb("LAUNCH")
            fullXdbName=getXdbDirName()+"/sol111_ri_xyz.xdb"
            makeDynamLoop.call(fullXdbName,"SINUS_Z",30)

In this case, the Results of “SINUS_Z” load case are required, and the maximum number of sub-cases loaded simultaneously in the DataBase is 30. Note that this number should be chosen with care: if it is too small, many readings of the Nastran xdb file will be necessary which increases the disk access time. On the other hand, if the number is too big, a larger amount of memory might be necessary to store the Results in the DataBase. This is important if you have limited resources. It is the responsibility of “LoadCases” module manager to select an appropriate value of this integer parameter.

Note that we voluntarily limit the example of dynamic Results post-processing to a simple extraction from an xdb file. Actually, the possibilities of FeResPost are larger that. For example, it should be possible to read simultaneously the Results for different load cases as “SINUS_X”, “SINUS_Y” and “SINUS_Z” and to yield linear combinations of these elementary Results for the different frequency outputs.