fortran.cat
A few bits of Fortran
- English , fortran , language , llenguatge
How to overload assignment (=) in a class
Overloading a subroutine means to redefine its internal functionality for a customized behavior. Overall it adapts the class new characteristics to already wide-spread Fortran functionalities (==, =, + ,-, …). Specifically, this post only focus on assignment (=).
In the following example, Mynumber is generic class to hold any type of real number. For that reason, it seems interesting enough to be able to directly set or get its data.
The main program exemplifies what is meant to do in a clean way:
4 types of assignment can be found above:
- mynumber = mynumber
- mynumber = scalar number
- mynumber = array
- array = mynumber
Regarding the 4 cases, the last one is the most interesting to me. It is a reverse copy/assignment. It gets its internal values in a simple way.
When writing the code, you should make sure to properly define the subroutines headers. Those must follow Fortran standards. In any case, the compiler will complain if it is not the case.
Its current implementation for each type of assignment:
copy_array_to_raw_rsp_1 should be extended for each rank/kind/type you might want to support. Because it’s a boring task, it is better to let fypp (or any other pre-processor) do the job for you. So it generates the remaining code. But this is another story đ
Leave a Reply Cancel reply
Your email address will not be published. Required fields are marked *
Save my name, email, and website in this browser for the next time I comment.
Recent Posts
- Memory alignment for multidimensional arrays
- Edge cases when implementing scientific equations
- Mapping namelists from a derived type
- How to profile a Fortran binary with the ‘perf’ tool
- Parametrized derived types (PDT)
- What is Fortran
- February 2024
- November 2023
- September 2023
- December 2022
- February 2022
- December 2021
- November 2021
- October 2021
- September 2021
- Performance
Proudly Powered By WordPress
10 Overloading operators for derived types
This chapter covers:.
- Overloading operators in a minimal countdown app
- Validating user input
- Synchronization on assignment in the tsunami simulator
Almost any app working with real-world data, or any program more complex than a toy model, will use derived types (classes) to handle abstract data. Fortranâs intrinsic operators for arithmetic ( + , - , * , / , ** ) and comparison ( == , /= , >= , â , > , < ) are available out of the box for intrinsic numeric ( integer , real , complex ) but not for derived types. For example, to keep track of calendar date and time in an app, youâd need to compare, add, and subtract datetime instances (data structures that represent date and time). This is where derived types (Chapter 6) and generic procedures and custom operators (Chapter 7) come together to form a powerful feature of the language: Overloading intrinsic operators for derived types. This will allow you to define what the intrinsic (and custom) operators mean for any derived type, and in a way extend the syntax of the language.
10.1 Happy Birthday! A countdown app
10.1.1 some basic specification, 10.1.2 implementation strategy, 10.2 getting user input and current time, 10.2.1 your first datetime class, 10.2.2 reading user input, 10.2.3 getting current date and time, 10.3 calculating the difference between two times, 10.3.1 modeling a time interval, 10.3.2 overloading the subtraction operator, 10.3.3 time difference algorithm, 10.3.4 the complete program, 10.4 overloading operators in the tsunami simulator, 10.4.1 a refresher on the field class, 10.4.2 implementing the arithmetic for the field class, 10.4.3 syncing parallel images on assignment, 10.5 answer key, 10.5.1 exercise 1: validating user input, 10.7 summary.
IMAGES
VIDEO