Class | dcl_alloc |
In: |
dcl_alloc.f90
|
namelist を読み込んだ後, 配列を割り付ける
Subroutine : | |
stat : | integer,intent(in) |
subroutine dcl_alloc_val( stat ) 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 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 にも適用可能. implicit none integer, intent(inout) :: stat integer :: i x=(/((xmin+dx*(i-1)),i=1,nx)/) y=(/((ymin+dy*(i-1)),i=1,ny)/) z=(/((zmin+dz*(i-1)),i=1,nz)/) lon=(/((lon_min+dlon*(i-1)),i=1,nx)/) lat=(/((lat_min+dlat*(i-1)),i=1,ny)/) 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 次元版でも使用可能. 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