yaeos__math Module

Mathematical methods for yaeos

Description

This module provides all the relevant mathematical functions used in this library. Most important ones are:

  • newton: Newton solving method
  • solve_system: Solving linear system Ax = b
  • continuation: Continuation method for line tracing

Examples

Squared error calculation

 use yaeos__math, only: sq_error
 real(pr) :: x = 2.5, y = 3.0, error
 print *, sq_error(2.5, 3.0)
------------------------------------
 use yaeos__math, only: sq_error
 real(pr) :: x = [2.5, 5.0], y = [3.0, 4.5], error
 ! It also works with arrays
 print *, sq_error(x, y)

Uses

  • module~~yaeos__math~~UsesGraph module~yaeos__math yaeos__math module~yaeos__constants yaeos__constants module~yaeos__math->module~yaeos__constants module~yaeos__math_continuation yaeos__math_continuation module~yaeos__math->module~yaeos__math_continuation module~yaeos__math_linalg yaeos__math_linalg module~yaeos__math->module~yaeos__math_linalg iso_fortran_env iso_fortran_env module~yaeos__constants->iso_fortran_env module~yaeos__math_continuation->module~yaeos__constants module~yaeos__math_continuation->module~yaeos__math_linalg module~yaeos__math_linalg->module~yaeos__constants

Used by

  • module~~yaeos__math~~UsedByGraph module~yaeos__math yaeos__math module~yaeos__equilibria_binaries yaeos__equilibria_binaries module~yaeos__equilibria_binaries->module~yaeos__math module~yaeos__equilibria_boundaries_auxiliar yaeos__equilibria_boundaries_auxiliar module~yaeos__equilibria_boundaries_auxiliar->module~yaeos__math module~yaeos__equilibria_boundaries_generalized_isopleths yaeos__equilibria_boundaries_generalized_isopleths module~yaeos__equilibria_boundaries_generalized_isopleths->module~yaeos__math module~yaeos__equilibria_boundaries_phase_envelopes_mp yaeos__equilibria_boundaries_phase_envelopes_mp module~yaeos__equilibria_boundaries_phase_envelopes_mp->module~yaeos__math module~yaeos__equilibria_boundaries_phase_envelopes_mp->module~yaeos__equilibria_boundaries_auxiliar module~yaeos__equilibria_boundaries_phase_envelopes_mp_px yaeos__equilibria_boundaries_phase_envelopes_mp_px module~yaeos__equilibria_boundaries_phase_envelopes_mp_px->module~yaeos__math module~yaeos__equilibria_boundaries_phase_envelopes_mp_px->module~yaeos__equilibria_boundaries_auxiliar module~yaeos__equilibria_boundaries_phase_envelopes_mp_tx yaeos__equilibria_boundaries_phase_envelopes_mp_tx module~yaeos__equilibria_boundaries_phase_envelopes_mp_tx->module~yaeos__math module~yaeos__equilibria_boundaries_phase_envelopes_mp_tx->module~yaeos__equilibria_boundaries_auxiliar module~yaeos__equilibria_boundaries_phase_envelopes_pt3 yaeos__equilibria_boundaries_phase_envelopes_pt3 module~yaeos__equilibria_boundaries_phase_envelopes_pt3->module~yaeos__math module~yaeos__equilibria_boundaries_phase_envelopes_px3 yaeos__equilibria_boundaries_phase_envelopes_px3 module~yaeos__equilibria_boundaries_phase_envelopes_px3->module~yaeos__math module~yaeos__equilibria_boundaries_phase_envelopes_px3->module~yaeos__equilibria_boundaries_auxiliar module~yaeos__models_ge_uniquac yaeos__models_ge_uniquac module~yaeos__models_ge_uniquac->module~yaeos__math proc~check_critical_jump check_critical_jump proc~check_critical_jump->module~yaeos__math proc~critical_line critical_line proc~critical_line->module~yaeos__math proc~critical_point critical_point proc~critical_point->module~yaeos__math proc~detect_critical~3 detect_critical proc~detect_critical~3->module~yaeos__math proc~homotopy homotopy proc~homotopy->module~yaeos__math proc~look_for_cep look_for_cep proc~look_for_cep->module~yaeos__math proc~solve_generalized_point solve_generalized_point proc~solve_generalized_point->module~yaeos__math proc~solve_mp_flash_point solve_mp_flash_point proc~solve_mp_flash_point->module~yaeos__math proc~solve_point PXEnvelMP%solve_point proc~solve_point->module~yaeos__math proc~solve_point~4 PTEnvelMP%solve_point proc~solve_point~4->module~yaeos__math proc~solve_point~7 TXEnvelMP%solve_point proc~solve_point~7->module~yaeos__math proc~solve_tp solve_TP proc~solve_tp->module~yaeos__math proc~solve_vxvyt solve_VxVyT proc~solve_vxvyt->module~yaeos__math proc~three_phase_line_f three_phase_line_F proc~three_phase_line_f->module~yaeos__math proc~three_phase_line_f_solve three_phase_line_F_solve proc~three_phase_line_f_solve->module~yaeos__math proc~volume Gerg2008%volume proc~volume->module~yaeos__math proc~volume~3 ArModel%volume proc~volume~3->module~yaeos__math module~yaeos__equilibria yaeos__equilibria module~yaeos__equilibria->module~yaeos__equilibria_binaries module~yaeos__equilibria->module~yaeos__equilibria_boundaries_generalized_isopleths module~yaeos__equilibria->module~yaeos__equilibria_boundaries_phase_envelopes_mp module~yaeos__equilibria->module~yaeos__equilibria_boundaries_phase_envelopes_mp_px module~yaeos__equilibria->module~yaeos__equilibria_boundaries_phase_envelopes_mp_tx module~yaeos__equilibria->module~yaeos__equilibria_boundaries_phase_envelopes_pt3 module~yaeos__equilibria->module~yaeos__equilibria_boundaries_phase_envelopes_px3 module~yaeos__equilibria_boundaries_phase_envelopes_px yaeos__equilibria_boundaries_phase_envelopes_px module~yaeos__equilibria->module~yaeos__equilibria_boundaries_phase_envelopes_px module~yaeos__equilibria_boundaries_phase_envelopes_tx yaeos__equilibria_boundaries_phase_envelopes_tx module~yaeos__equilibria->module~yaeos__equilibria_boundaries_phase_envelopes_tx module~yaeos__equilibria_boundaries_phase_envelopes_px->module~yaeos__equilibria_boundaries_auxiliar module~yaeos__equilibria_boundaries_phase_envelopes_tx->module~yaeos__equilibria_boundaries_auxiliar module~yaeos__models_ge_implementations yaeos__models_ge_implementations module~yaeos__models_ge_implementations->module~yaeos__models_ge_uniquac module~yaeos yaeos module~yaeos->module~yaeos__equilibria module~yaeos__models yaeos__models module~yaeos->module~yaeos__models module~yaeos__models->module~yaeos__models_ge_implementations proc~psrk PSRK proc~psrk->module~yaeos__models_ge_implementations

Interfaces

public interface newton

  • public subroutine newton_1d(f, x, tol, max_iters, failed)

    Arguments

    Type IntentOptional Attributes Name
    procedure(f_1d) :: f
    real(kind=pr), intent(inout) :: x
    real(kind=pr), intent(in) :: tol
    integer, intent(in) :: max_iters
    logical, intent(out) :: failed

Abstract Interfaces

abstract interface

  • public subroutine f_1d(x, f, df)

    Arguments

    Type IntentOptional Attributes Name
    real(kind=pr), intent(in) :: x
    real(kind=pr), intent(out) :: f
    real(kind=pr), intent(out) :: df

Derived Types

type, public ::  Point

Represents the single point of a line segment.

Read more…

Components

Type Visibility Attributes Name Initial
integer, public :: i

Index of the first line segment

integer, public :: j

Index of the second line segment

real(kind=pr), public :: x

X coordinate

real(kind=pr), public :: y

Y coordinate


Functions

public function derivative_d2xk_dnidnj(n) result(d2xk_dnidnj)

Calculate the mole fraction second derivatives respect to mole numbers

Read more…

Arguments

Type IntentOptional Attributes Name
real(kind=pr), intent(in) :: n(:)

Return Value real(kind=pr), (size(n),size(n),size(n))

public function derivative_dxk_dni(n) result(dxk_dni)

Calculate the mole fraction first derivatives respect to mole numbers

Read more…

Arguments

Type IntentOptional Attributes Name
real(kind=pr), intent(in) :: n(:)

Return Value real(kind=pr), (size(n),size(n))

public function dx_to_dn(x, dx) result(dn)

Convert the mole fraction derivatives of a quantity (calculated so they do not sum to 1) to mole number derivatives (where the mole fractions do sum to one). Requires the derivatives and the mole fractions of the mixture. From https://chemicals.readthedocs.io/chemicals.utils.html?highlight=dxs_to_dns#chemicals.utils.dxs_to_dns

Read more…

Arguments

Type IntentOptional Attributes Name
real(kind=pr), intent(in) :: x(:)
real(kind=pr), intent(in) :: dx(:)

Return Value real(kind=pr), (size(x))

public elemental function interpol(x1, x2, y1, y2, x_obj) result(y)

Linear interpolation.

Read more…

Arguments

Type IntentOptional Attributes Name
real(kind=pr), intent(in) :: x1

First point x value

real(kind=pr), intent(in) :: x2

Second point x value

real(kind=pr), intent(in) :: y1

First point y value

real(kind=pr), intent(in) :: y2

Second point y value

real(kind=pr), intent(in) :: x_obj

Desired x value to interpolate

Return Value real(kind=pr)

y value at x_obj

public function intersect_one_line(lx, ly) result(intersections)

Find the intersections of a single line with itself.

Read more…

Arguments

Type IntentOptional Attributes Name
real(kind=pr), intent(in) :: lx(:)
real(kind=pr), intent(in) :: ly(:)

Return Value type(Point), allocatable, (:)

public elemental function sq_error(exp, pred)

Read more…

Arguments

Type IntentOptional Attributes Name
real(kind=pr), intent(in) :: exp
real(kind=pr), intent(in) :: pred

Return Value real(kind=pr)


Subroutines

public subroutine intersects(x1, x2, x3, x4, y1, y2, y3, y4, s, t)

Calculate the intersection between two line segments.

Read more…

Arguments

Type IntentOptional Attributes Name
real(kind=pr), intent(in) :: x1
real(kind=pr), intent(in) :: x2
real(kind=pr), intent(in) :: x3
real(kind=pr), intent(in) :: x4
real(kind=pr), intent(in) :: y1
real(kind=pr), intent(in) :: y2
real(kind=pr), intent(in) :: y3
real(kind=pr), intent(in) :: y4
real(kind=pr), intent(out) :: s
real(kind=pr), intent(out) :: t

public subroutine levenberg_marquardt(fun, tol, X, F, info)

Arguments

Type IntentOptional Attributes Name
public subroutine fun(m, n, x, fvec, iflag)
Arguments
Type IntentOptional Attributes Name
integer, intent(in) :: m
integer, intent(in) :: n
real(kind=pr), intent(in) :: x(n)
real(kind=pr), intent(out) :: fvec(m)
integer, intent(inout) :: iflag
real(kind=pr), intent(in) :: tol
real(kind=pr), intent(inout) :: X(:)

Variables vector

real(kind=pr), intent(out) :: F(:)

Function values at solved point

integer, intent(inout) :: info

public subroutine newton_1d(f, x, tol, max_iters, failed)

Arguments

Type IntentOptional Attributes Name
procedure(f_1d) :: f
real(kind=pr), intent(inout) :: x
real(kind=pr), intent(in) :: tol
integer, intent(in) :: max_iters
logical, intent(out) :: failed

public subroutine powel_hybrid(fun, tol, X, F, info)

Arguments

Type IntentOptional Attributes Name
public subroutine fun(n, x, fvec, iflag)
Arguments
Type IntentOptional Attributes Name
integer, intent(in) :: n
real(kind=pr), intent(in) :: x(n)
real(kind=pr), intent(out) :: fvec(n)
integer, intent(inout) :: iflag
real(kind=pr), intent(in) :: tol
real(kind=pr), intent(inout) :: X(:)

Variables vector

real(kind=pr), intent(out) :: F(:)

Function values at solved point

integer, intent(out) :: info