Class | dycore_dynamics_mod |
In: |
src/run/dycore_dynamics.f90
|
Dims : | type(DYCORE_DIMS), intent(in)
| ||
Vars_a : | type(DYCORE_VARS), intent(inout)
|
渦度発散から、風速 (経度成分、緯度成分) を得る。
subroutine dycore_dynamics_diagnostic( Dims, Vars_a ) !==== Dependency !=end implicit none !=begin !==== Input ! type(DYCORE_DIMS), intent(in) :: Dims ! 次元データ全種 ! !==== In/Out ! type(DYCORE_VARS), intent(inout):: Vars_a ! 格子点データ全種(t+Δt) !=end !----- 作業用内部変数 ----- character(STRING), parameter:: subname = "dycore_dynamics_diagnostic" continue !----------------------------------------------------------------- ! 初期化確認 !----------------------------------------------------------------- call BeginSub(subname) if (.not. dycore_dynamics_initialized) then call EndSub( subname, 'Call dycore_dynamics_init before call %c', c1=trim(subname) ) return endif call dynamics_diagnostic ( Dims%x_Lon%a_Dim(:) , Dims%y_Lat%a_Dim(:) , Dims%z_Sigma%a_Dim(:) , Dims%r_Sigma%a_Dim(:), Vars_a%xyz_VelLon(:,:,:) , Vars_a%xyz_VelLat(:,:,:) , Vars_a%xyz_Vor(:,:,:) , Vars_a%xyz_Div(:,:,:) , Vars_a%xyz_Temp(:,:,:) , Vars_a%xyz_QVap(:,:,:) , Vars_a%xy_Ps(:,:) ) ! intent(in) : 地表面気圧 (t+Δt) call EndSub(subname) end subroutine dycore_dynamics_diagnostic
Vars_b : | type(DYCORE_VARS), intent(in)
| ||
Vars_a : | type(DYCORE_VARS), intent(inout)
|
水平拡散項の計算。
subroutine dycore_dynamics_diffusion( Vars_b, Vars_a ) !==== Dependency !=end implicit none !=begin !==== Input ! type(DYCORE_VARS), intent(in) :: Vars_b ! 格子点データ全種(t-Δt) ! !==== In/Out ! type(DYCORE_VARS), intent(inout):: Vars_a ! 格子点データ全種(t+Δt) !=end !----- 作業用内部変数 ----- character(STRING), parameter:: subname = "dycore_dynamics_diffusion" continue !----------------------------------------------------------------- ! 初期化確認 !----------------------------------------------------------------- call BeginSub(subname) if (.not. dycore_dynamics_initialized) then call EndSub( subname, 'Call dycore_dynamics_init before call %c', c1=trim(subname) ) return endif call dynamics_diffusion( Vars_b%xyz_Vor , Vars_b%xyz_Div , Vars_b%xyz_Temp , Vars_b%xyz_QVap , Vars_a%xyz_Vor , Vars_a%xyz_Div , Vars_a%xyz_Temp , Vars_a%xyz_QVap ) ! intent(inout) : 比湿 (t+Δt) call EndSub(subname) end subroutine dycore_dynamics_diffusion
((< dynamics_mod >)) の終了処理を行なう。
subroutine dycore_dynamics_end !==== Dependency !=end implicit none !----------------------------------------------------------------- ! 変数定義 !----------------------------------------------------------------- !----- 作業用内部変数 ----- character(STRING), parameter:: subname = "dycore_dynamics_end" continue !----------------------------------------------------------------- ! 初期化確認 !----------------------------------------------------------------- call BeginSub(subname) if ( .not. dycore_dynamics_initialized) then call EndSub( subname, 'dycore_dynamics_init was not called', c1=trim(subname) ) return else dycore_dynamics_initialized = .false. endif call dynamics_end call EndSub(subname) end subroutine dycore_dynamics_end
Dims : | type(DYCORE_DIMS), intent(in)
| ||
Vars_a : | type(DYCORE_VARS), intent(out)
|
((< dynamics_mod >)) を初期化し、Vars_a 変数を allocate する。
subroutine dycore_dynamics_init( Dims, Vars_a ) !==== Dependency !=end implicit none !=begin !==== Input ! type(DYCORE_DIMS), intent(in) :: Dims ! 次元データ全種 ! !==== Output ! type(DYCORE_VARS), intent(out):: Vars_a ! 格子点データ全種(t+Δt) !=end !----- 作業用内部変数 ----- character(STRING), parameter:: subname = "dycore_dynamics_init" continue !---------------------------------------------------------------- ! 初期化確認 !---------------------------------------------------------------- call BeginSub(subname) if (dycore_dynamics_initialized) then call EndSub( subname, '%c is already called.', c1=trim(subname) ) return else dycore_dynamics_initialized = .true. endif !---------------------------------------------------------------- ! Version identifier !---------------------------------------------------------------- call DbgMessage('%c :: %c', c1=trim(version), c2=trim(tagname)) !------------------------------------------------------------------- ! SPMODEL 3次元モジュール初期化サブルーチン wa_initial !------------------------------------------------------------------- call spml_init !---------------------------------------------------------------- ! Vars_a の各変数の allocate および初期化 !---------------------------------------------------------------- allocate( Vars_a%xyz_VelLon(im,jm,km) ) allocate( Vars_a%xyz_VelLat(im,jm,km) ) allocate( Vars_a%xyz_Vor(im,jm,km) ) allocate( Vars_a%xyz_Div(im,jm,km) ) allocate( Vars_a%xyz_Temp(im,jm,km) ) allocate( Vars_a%xyz_QVap(im,jm,km) ) allocate( Vars_a%xy_Ps(im,jm) ) Vars_a%xyz_VelLon = 0.0d0 Vars_a%xyz_VelLat = 0.0d0 Vars_a%xyz_Vor = 0.0d0 Vars_a%xyz_Div = 0.0d0 Vars_a%xyz_Temp = 0.0d0 Vars_a%xyz_QVap = 0.0d0 Vars_a%xy_Ps = 0.0d0 !---------------------------------------------------------------- ! dynamics_init へ次元変数の引渡し !---------------------------------------------------------------- call dynamics_init ( Dims%x_Lon%a_Dim(:) , Dims%y_Lat%a_Dim(:) , Dims%z_Sigma%a_Dim(:) , Dims%r_Sigma%a_Dim(:) ) ! intent(in): σレベル(半整数)座標 call EndSub(subname) end subroutine dycore_dynamics_init
Dims : | type(DYCORE_DIMS), intent(in)
| ||
Vars_b : | type(DYCORE_VARS), intent(in)
| ||
Vars_n : | type(DYCORE_VARS), intent(in)
| ||
Vars_a : | type(DYCORE_VARS), intent(inout)
|
予報変数を計算し、Vars_a に返す。
subroutine dycore_dynamics_prediction( Dims, Vars_b, Vars_n, Vars_a ) !==== Dependency !=end implicit none !=begin !==== Input ! type(DYCORE_DIMS), intent(in) :: Dims ! 次元データ全種 type(DYCORE_VARS), intent(in) :: Vars_b ! 格子点データ全種 type(DYCORE_VARS), intent(in) :: Vars_n ! 格子点データ全種 ! !==== Output ! type(DYCORE_VARS), intent(inout):: Vars_a ! 格子点データ全種(t+Δt) !=end !----- 作業用内部変数 ----- character(STRING), parameter:: subname = "dycore_dynamics_prediction" continue !---------------------------------------------------------------- ! 初期化確認 !---------------------------------------------------------------- call BeginSub(subname) if (.not. dycore_dynamics_initialized) then call EndSub( subname, 'Call dycore_dynamics_init before call %c', c1=trim(subname) ) return endif call dynamics_leapfrog ( Dims%x_Lon%a_Dim(:) , Dims%y_Lat%a_Dim(:) , Dims%z_Sigma%a_Dim(:) , Dims%r_Sigma%a_Dim(:), Vars_b%xyz_VelLon(:,:,:) , Vars_b%xyz_VelLat(:,:,:) , Vars_b%xyz_Vor(:,:,:) , Vars_b%xyz_Div(:,:,:) , Vars_b%xyz_Temp(:,:,:) , Vars_b%xyz_QVap(:,:,:) , Vars_b%xy_Ps(:,:) , Vars_n%xyz_VelLon(:,:,:) , Vars_n%xyz_VelLat(:,:,:) , Vars_n%xyz_Vor(:,:,:) , Vars_n%xyz_Div(:,:,:) , Vars_n%xyz_Temp(:,:,:) , Vars_n%xyz_QVap(:,:,:) , Vars_n%xy_Ps(:,:) , Vars_a%xyz_VelLon(:,:,:) , Vars_a%xyz_VelLat(:,:,:) , Vars_a%xyz_Vor(:,:,:) , Vars_a%xyz_Div(:,:,:) , Vars_a%xyz_Temp(:,:,:) , Vars_a%xyz_QVap(:,:,:) , Vars_a%xy_Ps(:,:) ) ! intent(out): 地表面気圧 (t+Δt) call EndSub(subname) end subroutine dycore_dynamics_prediction