| Class | dcl_alloc |
| In: |
dcl_alloc.f90
|
namelist を読み込んだ後, 配列を割り付ける
| Subroutine : | |
| stat : | integer,intent(in) |
subroutine dcl_alloc_val( stat )
use dcl_defval
use dcl_arrayval
implicit none
integer,intent(in) :: stat
integer :: tmp_num1 ! 仮配列数 1
integer :: tmp_num2 ! 仮配列数 2
call val_counter( d2valc, val2d )
call val_counter( ad2valc, val2ad )
if(val2d+val2ad==0)then
tmp_num1=1
else
tmp_num1=val2d+val2ad
end if
call val_counter( d3valc, val3d )
call val_counter( ad3valc, val3ad )
if(val3d+val3ad==0)then
tmp_num2=1
else
tmp_num2=val3d+val3ad
end if
allocate(x(nx))
allocate(y(ny))
allocate(z(nz))
allocate(lon(nx))
allocate(lat(ny))
allocate(val2(nx,ny,tmp_num1))
allocate(val3(nx,ny,nz,tmp_num2))
end subroutine
| Subroutine : |
subroutine dcl_dealloc_val use dcl_defval use dcl_arrayval deallocate(x) deallocate(y) deallocate(z) deallocate(lon) deallocate(lat) deallocate(val2) deallocate(val3) end subroutine
| Subroutine : | |
| stat : | integer, intent(inout) |
格子数と始点, 格子間隔から位置座標配列に値を代入するルーチン nx, ny 等を調整すると, lon, lat にも適用可能.
subroutine dcl_pointdef( stat )
! 格子数と始点, 格子間隔から位置座標配列に値を代入するルーチン
! nx, ny 等を調整すると, lon, lat にも適用可能.
use dcl_defval
use dcl_arrayval
! use m_stretch
implicit none
integer, intent(inout) :: stat
integer :: i
real, allocatable :: tmpz(:), tmpdz(:)
real :: ztop1, ztop2, zsfc
allocate(tmpz(nz+3)) ! stretch array
allocate(tmpdz(nz+3)) ! stretch array
zsfc=0.0
ztop1=zsfc+dz*real(nz)
ztop2=ztop1-dz
x=(/((xmin+dx*(i-1)),i=1,nx)/)
y=(/((ymin+dy*(i-1)),i=1,ny)/)
if(layer1/=0.0.or.layer2/=0.0)then
call stretch( sthopt, 0.0, dzmin, layer1, layer2, ztop2, ztop1, nz+3, tmpz, tmpdz )
do i=1,nz
z(i)=tmpz(i+1)
end do
else
z=(/((zmin+dz*(i-1)),i=1,nz)/)
end if
lon=(/((lon_min+dlon*(i-1)),i=1,nx)/)
lat=(/((lat_min+dlat*(i-1)),i=1,ny)/)
deallocate(tmpz)
deallocate(tmpdz)
end subroutine
| Subroutine : | |||
| valc : | character(*), intent(in)
| ||
| valcount : | integer, intent(inout)
|
CReSS の dump ファイルに格納されている 3 次元変数のうち, 呼び出す 必要のある変数の数を計算するルーチン valc に ‘121000021’ などの文字型変数に数字が埋め込まれている形をとる. 1 番目から順に数字を評価し, 何個の変数が必要かを計算する. ‘0’ = 変数としてカウントしない, ‘1’ = 1 つ分として変数をカウントする. ちなみに同様のフォーマットにすると, 2 次元版でも使用可能.
subroutine val_counter( valc, valcount )
! CReSS の dump ファイルに格納されている 3 次元変数のうち, 呼び出す
! 必要のある変数の数を計算するルーチン
! valc に '121000021' などの文字型変数に数字が埋め込まれている形をとる.
! 1 番目から順に数字を評価し, 何個の変数が必要かを計算する.
! '0' = 変数としてカウントしない, '1' = 1 つ分として変数をカウントする.
! ちなみに同様のフォーマットにすると, 2 次元版でも使用可能.
use dcl_defval
use dcl_arrayval
implicit none
character(*), intent(in) :: valc ! dump されているかの確認変数
integer, intent(inout) :: valcount ! 用意する必要のある変数の数
integer :: i, chan
valcount=0
chan=len_trim(valc)
write(*,*) "len=", chan
do i=1,chan
select case (valc(i:i))
case ('0')
valcount=valcount
case ('1')
valcount=valcount+1
end select
end do
end subroutine