Toggle navigation
Gtool Project
地球流体電脳倶楽部
dcmodel プロジェクト
SIGEN
English
gtdata
gtdata_memory
gtdata_memory_internal.f90
Go to the documentation of this file.
1
!= gtdata_memory 内で使用される内部向け定数, 変数, 手続き群
2
!= Internal constants, variables, procedures used in "gtdata_memory"
3
!
4
! Authors:: Yasuhiro MORIKAWA, Eizi TOYODA
5
! Version:: $Id: gtdata_memory_internal.f90,v 1.1 2009-05-25 09:47:27 morikawa Exp $
6
! Tag Name:: $Name: $
7
! Copyright:: Copyright (C) GFD Dennou Club, 2001-2009. All rights reserved.
8
! License:: See COPYRIGHT[link:../../COPYRIGHT]
9
!
10
module
gtdata_memory_internal
11
!= gtdata_memory 内で使用される内部向け定数, 変数, 手続き群
12
!= Internal constants, variables, procedures used in "gtdata_memory"
13
!
14
! <b>Note that Japanese and English are described in parallel.</b>
15
!
16
17
use
gtdata_memory_types
, only
:
gd_mem_variable_entry
18
implicit none
19
private
20
21
public
::
memtab
,
memtab_add
,
memtab_lookup
22
23
type
(
gd_mem_variable_entry
),
allocatable
,
save
,
target
::
memtab
(:)
24
! メモリー変数情報テーブル.
25
! A table of memory variables
26
27
interface
memtab_add
28
module procedure
memtab_add
29
end interface
30
31
interface
memtab_lookup
32
module procedure
memtab_lookup
33
end interface
34
35
contains
36
37
integer
function
memtab_add
(var, name)
result
(stat)
38
use
gtdata_memory_types
, only
:
gd_mem_variable
,
gd_mem_variable_entry
39
use
dc_error
, only
:
gt_enomem
40
type
(
gd_mem_variable
),
intent(out)
:: var
41
character(len = *)
,
intent(in)
:: name
42
type
(
gd_mem_variable_entry
),
allocatable
:: tmptab(:)
43
integer
:: i, n
44
45
if
(.not.
allocated
(
memtab
))
then
46
allocate
(
memtab
(16), stat=stat)
47
if
(stat /= 0)
then
48
stat =
gt_enomem
49
return
50
endif
51
do
, i = 1,
size
(
memtab
)
52
memtab
(i)%name =
""
53
memtab
(i)%xtype =
""
54
nullify
(
memtab
(i)%dbuf)
55
nullify
(
memtab
(i)%attr,
memtab
(i)%current)
56
enddo
57
endif
58
do
, i = 1,
size
(
memtab
)
59
if
(
memtab
(i)%name ==
""
)
then
60
stat = 0
61
var =
gd_mem_variable
(i)
62
memtab
(i)%name = name
63
return
64
endif
65
end do
66
67
n =
size
(
memtab
)
68
allocate
(tmptab(n), stat=stat)
69
if
(stat /= 0)
then
70
stat =
gt_enomem
71
return
72
endif
73
tmptab(:) =
memtab
(:)
74
deallocate
(
memtab
)
75
allocate
(
memtab
(n * 2), stat=stat)
76
if
(stat /= 0)
then
77
stat =
gt_enomem
78
return
79
endif
80
memtab
(1:n) = tmptab(1:n)
81
deallocate
(tmptab)
82
do
, i = n + 1, n * 2
83
memtab
(i)%name =
""
84
nullify
(
memtab
(i)%dbuf)
85
nullify
(
memtab
(i)%attr,
memtab
(i)%current)
86
enddo
87
88
i = n + 1
89
var =
gd_mem_variable
(i)
90
memtab
(i)%name = name
91
end function
memtab_add
92
93
integer
function
memtab_lookup
(var, ent)
result
(stat)
94
use
gtdata_memory_types
, only
:
gd_mem_variable
,
gd_mem_variable_entry
95
use
netcdf
, only
: nf90_enotvar
96
type
(
gd_mem_variable
),
intent(in)
:: var
97
type
(
gd_mem_variable_entry
),
pointer
:: ent
98
99
if
(.not.
allocated
(
memtab
))
goto
999
100
if
(var%id <= 0 .or. var%id >
size
(
memtab
))
goto
999
101
if
(
memtab
(var%id)%name ==
""
)
goto
999
102
ent =>
memtab
(var%id)
103
stat = 0
104
999
continue
105
nullify
(ent)
106
stat = nf90_enotvar
107
end function
memtab_lookup
108
109
end module
gtdata_memory_internal
dc_error
Definition:
dc_error.f90:11
gtdata_memory_types::gd_mem_variable
Definition:
gtdata_memory_types.f90:29
gtdata_memory_internal::memtab_add
Definition:
gtdata_memory_internal.f90:27
dc_error::gt_enomem
integer, parameter, public gt_enomem
Definition:
dc_error.f90:534
gtdata_memory_internal
Definition:
gtdata_memory_internal.f90:10
gtdata_memory_internal::memtab
type(gd_mem_variable_entry), dimension(:), allocatable, target, save, public memtab
Definition:
gtdata_memory_internal.f90:23
gtdata_memory_types
Definition:
gtdata_memory_types.f90:9
gtdata_memory_internal::memtab_lookup
Definition:
gtdata_memory_internal.f90:31
gtdata_memory_types::gd_mem_variable_entry
Definition:
gtdata_memory_types.f90:21