В этой простой программе, когда я компилирую программу, она выдаст мне ошибку в отношении того, что «выделенный объект BoundaryConditionLTU уже выделен». Я знаю проблему, но я не знаю, как ее исправить. Пожалуйста, дайте мне знать, как это исправить. Спасибо. Этот код является частью кода CFD, который я пытаюсь использовать для Граничных условий. Определены три общих граничных условия (т. Е. Дирихеле, Неймана, А смешанного до н.э.). Каждой из переменных потока, таких как скорость, давление и температура, будет присвоено одно из упомянутых граничных условий в начале кода. ClassBoundaryCond является абстрактным классом. Примечание. ClassDirichlet_BC, ClassNeumann_BC и ClassMix_B - это наследование ClassBoundaryCond (расширенный тип ClassBoundaryCond).
module BoundaryCondition
! Date : 08/1/2019
use Varibales_Nst_NoImm_2D_MPH_DEM
!use SubroutineModule
implicit none
!=====================================================================
! Classes
type,abstract :: ClassBoundaryCond
contains
procedure(InterfaceBound) ,deferred :: evaluateBound
procedure(InterfaceBound_N),deferred :: evaluateBound_Neu
end type ClassBoundaryCond
!............................................
type,extends(ClassBoundaryCond) :: ClassDirichlet_BC
contains
procedure :: evaluateBound=>evaluateDir
procedure :: evaluateBound_Neu=>evaluateNeu_Dir
end type ClassDirichlet_BC
!==============
type,extends(ClassBoundaryCond) :: ClassNeumann_BC
contains
procedure :: evaluateBound=>evaluateNeu
procedure :: evaluateBound_Neu=>evaluateNeu_Neu
end type ClassNeumann_BC
!==============
type,extends(ClassBoundaryCond) :: ClassMix_BC
contains
procedure :: evaluateBound=>evaluateMix
procedure :: evaluateBound_Neu=>evaluateNeu_Mix
end type ClassMix_BC
!==============
!=====================================================================
! Interfaces
!---------------------------------------
abstract interface
!---------------------------------------
subroutine InterfaceBound(this)
import :: ClassBoundaryCond
class(ClassBoundaryCond) :: this
end subroutine InterfaceBound
!---------------------------------------
end interface
!=====================================================================
! ClassBoundaryCond is an abstract class
!=====================================================================
! Decelerations
class(ClassBoundaryCond),allocatable,Dimension(:) :: BoundaryConditionLTU
!=====================================================================
contains
!=====================================================================
subroutine initiateBoundaryCondition()
implicit none
integer :: i
! Date : 06/24/2019
! Arguments
! Body
do i=1,6
if (leftBC(i) == 0) then
allocate(ClassDirichlet_BC::BoundaryConditionLTU(i))
else if (leftBC(i) == 1) then
allocate(ClassNeumann_BC::BoundaryConditionLTU(i))
else if (leftBC(i) == 2) then
allocate(ClassMix_BC::BoundaryConditionLTU(i))
end if
end do
end subroutine initiateBoundaryCondition
SUBROUTINE evaluateDir(this)
Implicit None
! Start of Variable Definition
! ----------------------------
Class(ClassDirichlet_BC) :: this
END SUBROUTINE
SUBROUTINE evaluateNeu(this)
Implicit None
! Start of Variable Definition
! ----------------------------
Class(ClassNeumann_BC) :: this
END SUBROUTINE
SUBROUTINE evaluateMix(this)
Implicit None
! Start of Variable Definition
! ----------------------------
Class(ClassMix_BC) :: this
END SUBROUTINE
end module BoundaryCondition