Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(type_bc), | intent(inout) | :: | self | |||
type(type_input), | intent(in) | :: | input | |||
type(type_domain), | intent(in) | :: | domain |
subroutine initialize_type_bc(self, input, domain) class(type_bc), intent(inout) :: self type(type_input), intent(in) :: input type(type_domain), intent(in) :: domain integer(int32), allocatable :: group_ids(:) integer(int32) :: i, i_material real(real64) :: time_conv self%num_boundaries = input%conditions%num_boundaries ! 2. 各グループのコンテナを確保 if (allocated(self%bc)) deallocate (self%bc) allocate (self%bc(self%num_boundaries)) select case (input%conditions%time_control%simulation_period%unit) case ("second") time_conv = 1.0d0 case ("minute") time_conv = 60.0d0 case ("hour") time_conv = 3600.0d0 case ("day") time_conv = 86400.0d0 case ("year") time_conv = 31557600.0d0 end select ! 3. 各グループをループして、対応するBCオブジェクトを生成・セットアップ do i = 1, self%num_boundaries i_material = input%conditions%boundary_conditions(i)%id if (input%basic%analysis_controls%calculate_thermal) then select case (input%conditions%boundary_conditions(i)%thermal%type) case ("dirichlet") allocate (type_bc_thermal_dirichlet :: self%bc(i)%t) call self%bc(i)%t%initialize(input, domain, i, i_material, time_conv) case ("adiabatic") allocate (type_bc_thermal_adiabatic :: self%bc(i)%t) call self%bc(i)%t%initialize(input, domain, i, i_material, time_conv) end select end if if (input%basic%analysis_controls%calculate_hydraulic) then ! select case (input%conditions%boundary_conditions(i)%thermal%type) ! case ("dirichlet") ! allocate (type_bc_thermal_dirichlet :: self%bc(i)%t) ! call self%bc(i)%t%initialize(input, domain, i_material, time_conv) ! case ("adiabatic") ! allocate (type_bc_thermal_adiabatic :: self%bc(i)%t) ! call self%bc(i)%t%initialize(input, domain, i_material, time_conv) ! end select end if end do end subroutine initialize_type_bc