Ich versuche, ein Unterprogramm zu konstruieren Speicher für einen typunabhängigen zuweisbaren Array wie folgt neu zu verteilen:Typ-unabhängige Speicher Neuzuteilung in Fortran
subroutine reallocate(vector, num)
implicit none
class(*), dimension(:), allocatable, intent(inout) :: vector
integer :: num
class(*), dimension(:), allocatable :: tmp
integer :: lb, ub, ii_
if (allocated(vector)) then
ub = max(ubound(vector, 1), ub)
lb = min(lbound(vector, 1), lb)
if (ub .GT. ubound(vector, 1) .OR. lb .LT. lbound(vector, 1)) then
allocate(tmp(ub:lb), source=vector)
tmp(lbound(vector,1):ubound(vector,1)) = vector
call move_alloc(tmp, vector)
else
return
end if
else
allocate(vector(num:num), source=vector)
return
end if
return
end subroutine
Zum Beispiel lassen Sie uns sagen, ich habe einen Typ (Typ1), zuweisbaren :: v innerhalb der Indizes -1 und 4 zugewiesen, und ich rufe neu zuweisen (v, 6). Danach möchte ich v zwischen -1 und 6 zugewiesen werden.
So kommt das Problem hier, wenn Vektor bereits zugewiesen ist, und ich möchte die Informationen bereits im Vektor gespeichert, indem Sie es in eine neu neu zugewiesenen temporalen Array kopieren (Zeile, die tmp liest (lbound (Vektor, 1): ubound (Vektor, 1)) = Vektor). gfortran beschwert sich: "Fehler: Nonallocatable Variable darf nicht polymorph in der intrinsischen Zuweisung bei (1) sein - überprüfen, dass es eine passende spezifische Subroutine für '=' Operator gibt."
Ist was ich in Fortran 2003 Standard erlaubt? Was wäre der Weg dies zu tun?
http://stackoverflow.com/q/27165854/577108 könnte auf diese Frage hilfreich sein. – haraldkl