- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

Is it possible to define a static property that is shared between all instances of a class?

The case is a element class which uses a vector class.

I want that all element objects have a vector_i and vector_j which define the global normal vectors (i.e vector_i = vector(1, 0, 0) and vector_j = vector(0, 1, 0)).

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

Arjen Markus wrote:You can define a parameter in the module that contains the definition:

module vectors

module vectors real, dimension(3), parameter :: vector_i = [1.0, 0.0, 0.0] ... end module vectorsThat parameter would be available to all objects you define via this module.

FYI, The same trick works for custom types also

type(vector3), parameter :: & o_ = vector3(0.0,0.0,0.0), & i_ = vector3(1.0,0.0,0.0), & j_ = vector3(0.0,1.0,0.0), & k_ = vector3(0.0,0.0,1.0)

PS. I use a different convention of `i_` instead of `_i`

Link Copied

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

You can define a parameter in the module that contains the definition:

module vectors

module vectors real, dimension(3), parameter :: vector_i = [1.0, 0.0, 0.0] ... end module vectors

That parameter would be available to all objects you define via this module.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

Arjen Markus wrote:You can define a parameter in the module that contains the definition:

module vectors

module vectors real, dimension(3), parameter :: vector_i = [1.0, 0.0, 0.0] ... end module vectorsThat parameter would be available to all objects you define via this module.

Markus, thank; but I was thinking if this may make an independent parameter for each instance and take more memory? (my concern is reduce memory usage)

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

No, if you do it this way, the vectors will exist (may be an inadequate terminology) outside any object. Only when you put some component vector_i or vector_j in the class definition will they occupy memory in each one.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

Arjen Markus wrote:You can define a parameter in the module that contains the definition:

module vectors

module vectors real, dimension(3), parameter :: vector_i = [1.0, 0.0, 0.0] ... end module vectorsThat parameter would be available to all objects you define via this module.

FYI, The same trick works for custom types also

type(vector3), parameter :: & o_ = vector3(0.0,0.0,0.0), & i_ = vector3(1.0,0.0,0.0), & j_ = vector3(0.0,1.0,0.0), & k_ = vector3(0.0,0.0,1.0)

PS. I use a different convention of `i_` instead of `_i`

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page