DLR-SL / CPACS

CPACS - Common Parametric Aircraft Configuration Schema
http://dlr-sl.github.io/CPACS/
Apache License 2.0
78 stars 38 forks source link

Definition of cryogenic fuel storage #786

Closed TimBurschyk closed 9 months ago

TimBurschyk commented 2 years ago

Current research activities consider liquid hydrogen as a possible aviation fuel. The way to store this cryogenic liquid differs quite a bit from storing kerosine. The definition for wingFuelTank or fuselageFuelTank uses border elements (e.g. ribs or spars...), which works fine for fuel tanks using mainly the aircraft structure as enclosure. However, the definition of cryogenic fuel storage needs a more independent approach.

Therefore, the following proposal describes the storage tank geometry as hulls. The hull inherits many features from the fuselageType, like the definition of segments and sections. Also the structure could be used. Defining the ...structure/skin different layers (with material and thickness) could be given in the right orientation from outer surface towards the center. If the layers always have the same thickness standardStorageLayers could be used. If some segments (e.g. domes) have different thicknesses nonStandardStorageLayers can be defined for the corresponding segmentUIDs.

As an example, a double walled vacuum storage tank with multi layer insulation would consist of two hulls. The first hull being the outer vessel may consist of aluminum with additional structural elements. The second hull defines the inner vessel, which may be composed of aluminum and MLI sheets. The vacuum in between the hulls is not explicitly given.

The xml structure of a cryogenic storage tank could look like this:

<aircraft>
  <model>
    <cryogenicFuelStorages>
      <cryogenicFuelStorage uID="..">
        <name></name>
        <description></description>
        <parentUID></parentUID>
        <transformations></transformations>
        <hulls>
          <hull uID=".."> <!-- always outer surface -->
                        <!-- similar to: current approach for fuselage -->
            <name></name>
            <description></description>
            <transformations></transformations>
            <sections></sections>
            <segments></segments>
            <structure>
              <stringers></stringers>
              <frames></frames>
              <skin>
                <standardStorageLayers>
                  <standardStorageLayer>
                    <!-- alternative: use of standardSheetElements -->
                    <materialUID></materialUID>
                    <thickness></thickness>
                  </standardStorageLayer>
                  <standardStorageLayer>
                    <materialUID></materialUID>
                    <thickness></thickness>
                  </standardStorageLayer>
                </standardStorageLayers>
                <nonStandardStorageLayers>
                  <segmentUIDs>
                    <uID></uID>
                    <uID></uID>
                  </segmentUIDs>
                  <nonStandardStorageLayer>
                    <materialUID></materialUID>
                    <thickness></thickness>
                  </nonStandardStorageLayer>
                  <nonStandardStorageLayer/>
                </nonStandardStorageLayers>
              </skin>
            </structure>
          </hull>
        </hulls>
      </cryogenicFuelStorage>
    </cryogenicFuelStorages>
    <analyses>
      <massBreakdown>
        <mOEM>
          <mEM>
            <mPowerUnits>
              <mFuelSystem>
                <massDescription/>
              </mFuelSystem>
            </mPowerUnits>
          </mEM>
        </mOEM>
      </massBreakdown>
    </analyses>
  </model>
</aircraft>

Possible points for discussion are:

I looking forward to discuss this topic with the community. Any suggestions or comments are welcome!

jnwalther commented 2 years ago

Very nice proposal @TimBurschyk! I agree that recycling the fuselage modeling approach is the way to go here to ascertain the conceptual consistency throughout CPACS. My personal feeling is, that the hull definition should describe the innersurface, since the primary task of the storage is to hold a certain volume of fuel, not to fit in the aircraft. Therefore, I think it should be easier to compute the fuel volume, than to integrate the tank with the structure, if that makes any sense, which is the case if we provide the inner hull (even though that will make my life more painful...).

As for the other points you mention, I don't have any strong opinions either way, but here are a few unreladted comments:

That's all I have for now. Once again, great initiative, and, comments aside, I think you're already really close to a final definition.

MarAlder commented 2 years ago

Great proposal! I agree with @jnwalther comments and have some additional thoughts:

I offer to prepare the corresponding scheme soon. Thanks to the good preparation, it will go quickly.

sdeinert commented 2 years ago

Regarding the proposals using skinSegments or directly assigning the values to sections, it might be beneficial for several applications to extend the skinSegment logic so that you can either reference a frame or a section by uID. This way both cases discussed above could be handled without the need to create dummy frames as boundaries. For fuselage structure definitions, this extension would also be helpful for some special cases.

With respect to the standardStorageLayers, I am not sure if I understood correctly. The elements used in this node are simply the same as in a composite definition where different layers with thickness and material uID can be defined. Would it be realistic to re-use the composite element here?

TimBurschyk commented 2 years ago

Thank you for your detailed feedback and the good suggestions!

In regard to your comments - some additional thoughts from my side:

jnwalther commented 2 years ago

Expanding the skinSegment definition could be a good idea. That said, the added value might be less than one might initially think, since the sections are usually x-positions anyway, so the extra step of adding a virtual frame actually takes very little extra effort. On the other hand, the hard part is the stringers, but here the sections won't help. For the purpose of this issue, we can probably simply agree to use skinSegments analogously to the fuselage and open a separate issue to figure out the details. @sdeinert, maybe you can provide a proposal on how to update the schema accordingly.

Concerning @MarAlder's comment, I agree it's probably nicer to have the tanks at fuselage/wing level. In the case of the fuselage, this would, however, leave us with two entries fuelTank and cryogenicFuelStorage at the same level. Here it would be really important that the naming of the nodes brings out the distinction.

MarAlder commented 2 years ago

True, we already have a fuelTank under fuselage 🤔 .. The name should indeed be distinctive. Maybe integralFuelTank or we leave it like the proposed cryogenicFuelStorage, that's fine for me. My concern was just the limitation to cryogenic.

sfreund-DLR commented 2 years ago

thanks @TimBurschyk for the proposal!

  1. There is not really a "standard" to storage layers. Maybe standardStorageLayers should be simpleStorageLayers?
  2. Layers and orientations: As @jnwalther says, the layers should ordered from inside to outside and the geometry is defined on the inside geometric shape. Additionally I think, composite layers should also be stacked from inside to outside. This is the opposite of the skin definition in the fuselage skins (if I recall correctly). What do you think about this?
  3. cryogenicFuelStorage: what about pressurizedFuelStorage? This would at least include high pressure gas tanks, that also requrie a dedicated storage area and is not enclosed by the aircraft's structure.
  4. For now, there is nothing regarding the load acting on the fuel storage. Adding internal pressure, temperature, safety factor, storage-uID etc. to the loadCase-definition might be a simple approach. Altough, this does not tell anything about the load during a mission.
  5. Simplicity: I think, the geometric description is well suited matured tools in aircraft pre-design. It has a lot parameters when recalling all the geometric references to segments, sections, positionings, guideCurves and crossSections. All this is required to model something simple such as a cylindrical tank with ellipsoid domes. This structure is not suited for an easy and quick start with pressurized fuelStorages in CPACS. For a first quick and simple estimation, only few geometric quantities and a pressure level is requried. The output may also be very simple: skin+insulation thickness and total mass. What if we add a choice for a simple parameterization besides the hulls? Parameters could be: cylindrical radius, cylindrical length, domeType and additional parameters regarding the domeType
  6. From a structures perspective, it's not advisable to have frames/stringers with zero properties that should never be zero (such as crosssectional area, thicknesses). I would encourage to either name them virtualFrame/virtualStringer or use other items to reference geometric boundaries such as a combination of stringerFramePositionType.
marcengelmann commented 1 year ago

We at Bauhaus Luftfahrt are using CPACS as the data model for our BLADE aircraft design environment. At the moment, we are enhancing the tool for hydrogen aircraft. For this, we also need liquid hydrogen tanks in CPACS. Currently, we are "misusing" the fuselage definitions with special uIDs for our tank descriptions but we would be more than happy to also be able to use a proper hydrogen tank definition.

We are happy to contribute to this definition and are also willing to share some information or participate in a workshop in this topic if there is interest from your side.

Maybe we can discuss this at the quarterly meeting tomorrow.

In general we also think that it makes sense to stick to the fuselage definition concept for this.

MarAlder commented 1 year ago

Thank you all for the detailed feedback! I uploaded a schema extension via a3a6b6c69b8ffc5925ae030be3619a8641027090 according to your comments. Next step should be that we find an hour to meet and discuss/agree on the open discussion points. I'll soon contact you on this.

Schema download

Location

Just a suggestion to evaluate all possibilities: grafik *ok, cryogenic is also liquid... or 'conventional' or something else...

cryogenicFuelTankTsype

I tried to recycle as many elements from the fuselage as possible. @TimBurschyk, please see if a slightly different arrangement of the skinLayers, analogous to the individual skins of the fuselage, could be feasible. grafik

MarAlder commented 1 year ago

A little update from my side (the above discussion still applies):

Renaming of fuel tanks

I propose to combine any fuel tanks in the fuselage/fuelTanks node. This requires transferring the current definition (which are essentially integral tanks) to a dedicated container node. Thus, integralFuelTanks.

grafik

Choice between simple and detailed design (example)

We can introduce a choice to the detailed description via hulls. The transformation from simple to detailed parametrization may be problematic in practice, but if the simplified definition is worthwhile at this point, I am open to it.

grafik

MarAlder commented 1 year ago

Today we had a meeting with the main stakeholders and agreed on the following:

Using pre-defined tanks

Tanks will not be pre-defined and referenced, but the type will be used directly in the corresponding fuselage element. Furthermore, adding a element of the same type in the wing can be a possible enhancement in the future.

Naming of the parent elements

Not yet ideal, but we didn't came up with a better solution so far: All tanks should be combined under the main node fuelTanks. The current tank definition will be renamed to integralFuelTank and the new definition will be listed under genericFuelTank until someone has a better suggestion. grafik

Choice between simple and detailed parametrization:

We agreed to introduce a choice between simple and detailed parametrization. @sfreund-DLR will work out the parametrization for the first. grafik

Layers from inner to outer

We agreed to always use the definition that the layers count from the inner to outer direction. The documentation needs to be extended so that the direction of the normal vector is clear.

Virtual stringers and frames

We'll introduce virutal stringers and frames to support explicit helper-geometry for the definition of skin segments. So far we are using the exact same type. If we adopt this enhancement for the fuselage itself, we could think about making a baseType without structuralElementUID since this is not required for virtual stringers/frames and extend the actual stringer/frame types with structuralElementUID. grafik

Definition of the skin

We agreed to use the same type as used for fuselage/strcuture/skin, i.e. skinType. This type has some limitations (see discussion above), which will be discussed in a separate issue. Thus, we remain consistent with the fuselage. grafik

ToDo

sfreund-DLR commented 1 year ago

Choice between simple and detailed parametrization:

We agreed to introduce a choice between simple and detailed parametrization. @sfreund-DLR will work out the parametrization for the first. grafik

Questions to all

MarAlder commented 1 year ago

Thanks @sfreund-DLR. I added a emptyElementBaseType because spherical has no child elements. We never did this in CPACS before, but ... why not.

If the burstPressure is a property of the tank itself and not a changeable system state, we could include it in the current definition. If it depends on some system settings or flight conditions, then it should be part of the new configurationDefinition node.

grafik

<fuelTanks>
    <genericFuelTanks>
        <genericFuelTank uID="simpleTank">
            <name>Cryogenic fuel tank</name>
            <designPrameters>
                <transformation>
                    <translation>
                        <x>10.</x>
                        <y>2.</y>
                        <z>0.</z>
                    </translation>
                </transformation>
                <cylinderRadius>1.</cylinderRadius>
                <cylinderLength>5.</cylinderLength>
                <domeType>
                    <spherical/>
                </domeType>
            </designPrameters>
        </genericFuelTank>
    </genericFuelTanks>
</fuelTanks>
sfreund-DLR commented 1 year ago

Thanks @MarAlder

From a structures perspective, materialUID should be mandatory.

The burstPressure is a key parameter for both, the simple and the detailed version. Though, I don't have a good suggestion for it's location

MarAlder commented 1 year ago

Ok, so lets put burstPressure one level above:

grafik

Btw., the integralFuelTanks have a volume node. We could also implement this if needed.

TimBurschyk commented 1 year ago

Thanks @sfreund-DLR and @MarAlder for your last comments. Almost at the finish line, I got two more thoughts:

MarAlder commented 9 months ago

Not sure, as the genericFuelTanks are explicitly a child of the fuselage and are mainly described by the structure of the hull(s), I would find it more intuitive to keep them in mFuselageStructure:

grafik

The powerUnits are, in my understanding, more like systems of distributed components. But I'm open to both places.

TimBurschyk commented 9 months ago

Setting the boundaries for the mass breakdown is a difficult thing. In my opinion the fuel tanks are part of ATA 28: Fuel system (incl. storage, distribution, ...). BUT: the cpacs mass breakdown is not alligned with the ATA chapters, anyway. Additionally, mFuelSystem has only a single occurence, if I'm right. So all in all:

-> keeping mGenericFuelTanks in mFuselageStructure is fine for me