Cold Front Calculator With Loop#
Adapted from: “Modern Fortran: Building Efficient Parallel Applications” by Milan Curcic (Manning)
Program to Calculate the Temperature due to a Cold Front Using a Loop#
program cold_front
implicit none
integer :: n
real :: nhours
do n = 6, 48, 6
nhours = real(n)
print *, "Temperature after ", &
nhours, " hours is ", &
cold_front_temperature(12., 24., 20., 960., nhours), " degrees."
end do
contains
real function cold_front_temperature ( &
temp1, temp2, c, dx, dt) result(res)
real, intent(in) :: temp1, temp2, c, dx, dt
res = temp2 - c * (temp2 - temp1) / dx * dt
end function cold_front_temperature
end program cold_front
Program Explanation#
The following explanation is given by “Code Copilot” within ChatGPT 4.
The Fortran program named cold_front is designed to calculate and display the temperature at different time intervals as a cold front moves through a region, altering the temperature linearly based on its speed and the initial temperature gradient over a given distance. The core computation is encapsulated within a function cold_front_temperature, which calculates the resulting temperature after the cold front has affected the area for a specified duration.
Program Structure and Explanation#
Variable Declarations:
n: An integer used as a counter in the loop to represent time in hours.nhours: A real number that convertsninto a real data type appropriate for passing to thecold_front_temperaturefunction.
Loop Execution:
The
doloop runs from 6 to 48 hours in increments of 6 hours. For each iteration, it calculates the temperature afternhoursusing thecold_front_temperaturefunction and prints the result.
Function Definition (
cold_front_temperature):Input Parameters:
temp1(Real): The initial temperature at the starting point (e.g., 12 degrees Celsius).temp2(Real): The initial temperature at a distancedxfrom the starting point (e.g., 24 degrees Celsius).c(Real): The speed of the cold front in km/hr (e.g., 20 km/hr).dx(Real): The distance over which the initial temperature differencetemp2 - temp1is observed (e.g., 960 km).dt(Real): The time in hours for which the effect of the cold front is being calculated (e.g.,nhours).
Calculation and Result:
The formula
temp2 - c * (temp2 - temp1) / dx * dtis used to calculate the temperature after the cold front has moved fordthours. This calculation effectively adjusts the temperature at the pointtemp2by considering how the temperature gradient changes linearly with distance, scaled by the speed of the cold front and the time elapsed.
Calculation Explanation#
The function calculates the change in temperature as a function of time due to the movement of the cold front:
(temp2 - temp1) / dxcomputes the rate of temperature change per kilometer (temperature gradient).Multiplying this gradient by the cold front’s speed
cgives the rate of temperature change per hour.Multiplying further by
dtscales this hourly change by the number of hoursnhoursto determine the total change in temperature over that period.
The result is subtracted from
temp2because as the cold front moves, it brings the characteristics (temperature) of the starting point (temp1) towards the point initially attemp2.
Usage and Output#
The program is particularly useful for educational purposes or simple meteorological predictions to understand the impact of a moving cold front over time on the local temperature.
It provides a straightforward and clear output showing how the temperature changes every 6 hours from 6 to 48 hours as a cold front progresses through the area.
This program is an excellent example of using procedural abstraction (cold_front_temperature function) to encapsulate the logic for a specific calculation, making the main program more readable and easier to manage.
Program Compilation and Execution#
The above program is compiled and run using Fortran Package Manager (fpm):
import os
root_dir = os.getcwd()
code_dir = root_dir + "/" + "Fortran_Code/Cold_Front_Calculator_with_Loop"
os.chdir(code_dir)
build_status = os.system("fpm build 2>/dev/null")
exec_status = os.system("fpm run 2>/dev/null")
Temperature after 6.00000000 hours is 22.5000000 degrees.
Temperature after 12.0000000 hours is 21.0000000 degrees.
Temperature after 18.0000000 hours is 19.5000000 degrees.
Temperature after 24.0000000 hours is 18.0000000 degrees.
Temperature after 30.0000000 hours is 16.5000000 degrees.
Temperature after 36.0000000 hours is 15.0000000 degrees.
Temperature after 42.0000000 hours is 13.5000000 degrees.
Temperature after 48.0000000 hours is 12.0000000 degrees.