Loading...
Searching...
No Matches
dcdatetimemul.f90
Go to the documentation of this file.
1!= 利用者定義演算子 (*) のための関数
2!= Functions for user defined operation (*)
3!
4! Authors:: Yasuhiro MORIKAWA, Eizi TOYODA
5! Version:: $Id: dcdatetimemul.f90,v 1.2 2009-05-31 11:46:03 morikawa Exp $
6! Tag Name:: $Name: $
7! Copyright:: Copyright (C) GFD Dennou Club, 2000-2005. All rights reserved.
8! License:: See COPYRIGHT[link:../../COPYRIGHT]
9!
10 function dcdatetime_mul_if(factor, diff) result(result)
11 !
12 ! 日時差 *diff* と *facter* とを乗算した結果を返します.
13 !
16 use dc_scaledsec, only: operator(*)
17 implicit none
18 type(dc_difftime):: result
19 integer, intent(in):: factor
20 type(dc_difftime), intent(in):: diff
21 continue
22 result % mon = factor * diff % mon
23 result % day = factor * diff % day
24 result % sec = factor * diff % sec
25 result % day_seconds = diff % day_seconds
26 result % nondim_flag = diff % nondim_flag
27 call dcdate_normalize(result % day, result % sec, result % day_seconds, result % nondim_flag)
28 end function dcdatetime_mul_if
29
30 function dcdatetime_mul_fi(diff, factor) result(result)
31 use dc_date_generic, only: operator(*)
33 implicit none
34 type(dc_difftime):: result
35 type(dc_difftime), intent(in):: diff
36 integer, intent(in):: factor
37 continue
38 result = factor * diff
39 end function dcdatetime_mul_fi
40
41 function dcdatetime_mul_rf(factor, diff) result(result)
42 !
43 ! ※ 注意 : 月差を非整数倍すると近似的結果になるおそれがあります
44 use dc_date_generic, only: operator(*)
46 use dc_types, only: dp
47 implicit none
48 type(dc_difftime):: result
49 real, intent(in):: factor
50 type(dc_difftime), intent(in):: diff
51 continue
52 result = real(factor, dp) * diff
53 end function dcdatetime_mul_rf
54
55 function dcdatetime_mul_fr(diff, factor) result(result)
56 !
57 ! ※ 注意 : 月差を非整数倍すると近似的結果になるおそれがあります
58 use dc_date_generic, only: operator(*)
60 implicit none
61 type(dc_difftime):: result
62 type(dc_difftime), intent(in):: diff
63 real, intent(in):: factor
64 continue
65 result = factor * diff
66 end function dcdatetime_mul_fr
67
68 function dcdatetime_mul_df(factor, diff) result(result)
69 !
70 ! ※ 注意 : 月差を非整数倍すると近似的結果になるおそれがあります
73 use dc_scaledsec, only: dc_scaled_sec, &
74 & operator(<), operator(>), operator(<=), operator(>=), &
75 & operator(+), operator(-), operator(*), operator(/), &
76 & modulo, int, abs, sign
77 use dc_types, only: dp
78 implicit none
79 type(dc_difftime):: result
80 real(dp), intent(in):: factor
81 type(dc_difftime), intent(in):: diff
82 type(dc_scaled_sec):: month, day
83 continue
84 month = factor * diff % mon
85 result % mon = int(month)
86 day = factor * diff % day + int(cyclic_mdays * (month - result % mon))
87 result % day = int(day)
88 result % sec = &
89 & factor * diff % sec + (day - result % day) * diff % day_seconds
90 result % day_seconds = diff % day_seconds
91 result % nondim_flag = diff % nondim_flag
92 call dcdate_normalize(result % day, result % sec, result % day_seconds, result % nondim_flag)
93 end function dcdatetime_mul_df
94
95 function dcdatetime_mul_fd(diff, factor) result(result)
96 !
97 ! ※ 注意 : 月差を非整数倍すると近似的結果になるおそれがあります
98 use dc_date_generic, only: operator(*)
100 use dc_types, only: dp
101 implicit none
102 type(dc_difftime):: result
103 type(dc_difftime), intent(in):: diff
104 real(dp), intent(in):: factor
105 continue
106 result = factor * diff
107 end function dcdatetime_mul_fd
type(dc_difftime) function dcdatetime_mul_if(factor, diff)
type(dc_difftime) function dcdatetime_mul_rf(factor, diff)
type(dc_difftime) function dcdatetime_mul_df(factor, diff)
type(dc_difftime) function dcdatetime_mul_fd(diff, factor)
type(dc_difftime) function dcdatetime_mul_fr(diff, factor)
type(dc_difftime) function dcdatetime_mul_fi(diff, factor)
subroutine, public dcdate_normalize(day, sec, day_seconds, nondim_flag)
real(dp), parameter, public cyclic_mdays
Provides kind type parameter values.
Definition dc_types.f90:49
integer, parameter, public dp
Double Precision Real number
Definition dc_types.f90:83