## Introduction

The Universal Engineering Framework enables us to resolve very complicated problems of science and engineering. One of them is The Space Elevator project. It is not clear if this project would be implemented. However, it is an excellent sample for approving the framework. Now, I am considering only a very simplified model of the problem. It'll be extended later.

## Background

The scheme of the space elevator is shown above. Straining of the cable is described by the following differential equation:

where is the engineering stress, and is the linear density of the fictitious force. In our case, the latter parameter may be calculated as:

The is the linear density, is the gravity acceleration, and is the centrifugal acceleration. Since our system contains a climber that may be considered as a mass point, it is convenient to use the Dirac delta function for the description of . The stress force of the cable is equal to:

Let , be the values of the force at the ground and the counterweight, respectively. Then, , where is the mass of the counterweight. It is clear that this force depends on the height of the counterweight, so we have a boundary value problem of an ordinary differential equation. To solve it, I'll use the regression component that has been considered in part 2. Below, I'll describe the necessary software.

## Importing of external libraries

Every serious engineering problem requires specware. This task requires a gravity field model. I'll show you how you can embed it. To do this, it is necessary to create a class that implements the `ICategoryObject`

interface. Then, you can associate to it any square on the desktop, and use it as well as other objects. Interoperability is implemented by two interfaces. The first one provides a list of objects of the external library and access to them by name. It is presented below:

namespace CategoryTheory
{
public interface IObjectFactory
{
string[] Names
{ get; }
ICategoryObject this[string name]
{ get; }
}
}

The contents of this interface is clear. The second interface provides an editor of properties for the object:

namespace DiagramUI
{
public interface IPropertiesEditor
{
object Editor
{ get; }
object Properties
{ get; set; }
}
}

If we wish to edit the properties of the imported object, the object should implement this interface. The "`Editor`

" property usually returns a Form that performs the editing of the properties of the object. However, if you would like to use another type of user interface (GTK, for example), then the editor should return an object of another type. The editor may return an array of objects. The first object is a property editor, the second one is an object icon. It looks like:

object IPropertiesEditor.Editor
{
get
{
return new object[] { new FormEditor(this), icon };
}
}

The external interface corresponds to the button. If you put this object on the desktop and right click it, then the following editor of properties should appear:

You can select a DLL file and then the type of the object using the combobox below. After performing these operations, the desktop will look like:

You must have noticed that a new icon for this object has appeared. This icon is defined by the `IPropertiesEditor.Editor`

property. Right click on the object square to open a new editor of properties:

Then, we can work with this object as well as with other ones. Using this editor, you can load a text file of the gravity field. I've used the GEM-T3 gravity model.

## Features of the formula editor

As has been said above, this task requires the Dirac delta function. The formula editor supports it. The presence of the delta function at the right part of the ordinary differential equation shows that the result function is not continuous. Indeed, the force of the cable is not continuous at the climber. It is presented on the following chart:

The abscissa axis corresponds to the height, and ordinate one is proportional to the force. The formula editor uses the standard Greek delta symbol for the delta function. It is presented in the following system of differential equations:

This system describes the stress of the cable. Generally, the formula may return any object. Later, I'll introduce the derivations of the delta functions in the sense of distributions. The formula editor is case sensitive. If *f* is a real function with a real return value, then the expression *f(x)* may have a different meaning. If *x* is a real value, then *f(x)* is a real. If *x* is a real vector, then *f(x)* is a real vector obtained by component-wise calculation. If *x* is a function with a real return value, then *f(x)* is a composition of *f* and *x*. The return value of this function is a real, and the type of the argument is equal to the type of the argument of the function *x*. The meaning of other components may be different. For example, the series component may return a vector of abscissas vector of ordinates and a function. It is presented on the following picture:

All these features are used for solving this problem. Looking forward, I note that the formula editor supports automatic differentiation. If you select the *Tools/Derivation* calculator main menu option, then you'll notice this feature:

## Accumulator of the function

This feature was missing in the previous versions of this software. There are lots of cases when we need to obtain full functions at once. The component calculates a function step by step, and then returns it at once. Its property editor is presented in the following picture:

This editor enables us to set the start time, the step, and the count of steps.

## Feedback of ordinary differential equations

The force of the cable depends on the height. However, the height depends on the force since the force causes the enlargement of cable length. It is necessary to provide a feedback for resolving this problem. The solver of ordinary differential equations supports feedback. Its editor of properties is presented below:

This picture means that the variable *u* of the solver is linked to the parameter *u* of the **Trajectory** component.

## Solving the problem

So, we have all the necessary ingredients for solving the problem. The following picture is devoted to defining the stress force of the cable:

Let us describe it in brief. The **Gravity** component is used for calculating the gravity acceleration. The **Compliance** and **Linear density** series contain information about engineering stress and linear density of the cable, respectively. I'd not attempt to use any realistic parameter. You can change them by loading another series. There exists a set of components of math transformations. The **Equations** solve differential equations, and **Accum **accumulates its solution. The **Processor** solves the boundary value problem. Its editor of properties is presented below:

This component defines the initial value of the parameter **v** of **Equations**. This parameter is proportional to the stress force of the cable near the ground. After performing several iterations, we have a more accurate value of this parameter. Then, using **Equations**, we have an opportunity to find the stress along the whole cable. It looks like:

## Points of interests

Modern information technology looks like math. Developer veterans of software development are surprised: "How can functions return a function?" However, it is an everyday practice in modern IT and math as well. I think that the best practice to understand both of them is "There Is No Spoon" of the Matrix.