Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(type_material_manager), | intent(inout) | :: | self | |||
type(type_input), | intent(in) | :: | input | |||
integer(kind=int32), | intent(inout) | :: | ierr |
subroutine initialize(self, input, ierr) class(type_material_manager), intent(inout) :: self type(type_input), intent(in) :: input integer(int32), intent(inout) :: ierr integer(int32) :: i, model_idx integer(int32) :: num_unique_regions, num_id integer(int32), allocatable :: unique_material_ids(:) integer(int32) :: current_material_id ierr = 0 call input%geometry%vtk%get_active_region_info(unique_material_ids, ierr) num_unique_regions = input%basic%num_materials ! ステップ2: 配列を確保 allocate (self%thc(num_unique_regions)) allocate (self%den(num_unique_regions)) allocate (self%sph(num_unique_regions)) allocate (self%vhc(num_unique_regions)) allocate (self%gcc(num_unique_regions)) allocate (self%wrf(num_unique_regions)) ! allocate (self%region_id_map(num_unique_regions)) allocate (self%region_id_map, source=unique_material_ids) ! self%region_id_map = 0 ! 0は無効なインデックスとする ! ステップ3: 事前にあなたのFactoryを呼び出してモデルを生成し、マッピングする do model_idx = 1, num_unique_regions current_material_id = unique_material_ids(model_idx) call self%thc(model_idx)%initialize(input, current_material_id) call self%den(model_idx)%initialize(input, current_material_id) call self%sph(model_idx)%initialize(input, current_material_id) call self%vhc(model_idx)%initialize(input, current_material_id) call self%gcc(model_idx)%initialize(input, current_material_id) call self%wrf(model_idx)%initialize(input, current_material_id) self%region_id_map(current_material_id) = model_idx end do end subroutine initialize