source below compiled by (and error thrown):

/usr/bin/gfortran -c invert.f90 
invert.f90: In function 'invert':
invert.f90:80: internal compiler error: in instantiate_virtual_regs_lossage, at
function.c:1442
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://gcc.gnu.org/bugs.html> for instructions.

source (not dependency SPECTRAL.f90 is also appended below):

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
SUBROUTINE invert(nlevs,tbsp,ttsp,pvsp,phi0b,phi0t,phi0)
  USE spectral

  ! Originators: G. J. Hakim,  University of Washington
  !
  ! 14 July 2004; version 0.1

  IMPLICIT NONE

  ! Invert PV for streamfunction; compute spectral derivatives on 
  ! the transform (advection) grid.

  integer, intent(in) :: nlevs
  complex, intent(in), dimension(2*kmax,2*lmax) :: tbsp,ttsp
  complex, intent(in), dimension(2*kmax,2*lmax,nlevs) :: pvsp
  complex, intent(out), dimension(2*kmax,2*lmax) :: phi0b,phi0t
  complex, intent(out), dimension(2*kmax,2*lmax,nlevs) :: phi0
  complex, dimension(2*kmax,2*lmax,nlevs) :: bpvsp     
  complex, dimension(2*kmax,2*lmax,nlevs-1) :: pz      
  complex, dimension(2*kmax,2*lmax) :: pxx,pyy,pzz,errsp      
  real, dimension(2*kmax,2*lmax) :: errxy,tmpxy
  real :: ak,bl,dz
  integer :: j,k,l,kk,ll
  complex, dimension(nlevs) :: psi
  complex,dimension(2*kmax,2*lmax),save:: dx,dy,Id

  dz = ZH/real(nlevs)

  ! derivative operators
  call d_setup(dx,dy,Id)

  ! initialize arrays to zero:
  phi0b=0.;phi0t=0.;phi0=0.

  bpvsp = pvsp
  do k=1,2*kmax; do l=1,2*lmax

     !     add boundary theta to a copy of spectral pv:
     bpvsp(k,l,1) = bpvsp(k,l,1) + (tbsp(k,l)/dz)
     bpvsp(k,l,nlevs) = bpvsp(k,l,nlevs) - (ttsp(k,l)/dz)

     !     get wavenumbers
     call get_waves(k,l,ak,bl)

     !     spectral inversion (zero mean)
     if (k .eq. 1 .and. l .eq. 1) then
        phi0b(k,l) = 0.; phi0t(k,l) = 0.; phi0(k,l,:) = 0.
     else
        call matinv(nlevs,bpvsp(k,l,:),ak,bl,psi,1)
        phi0b(k,l) = psi(1) - (0.5*dz*tbsp(k,l))
        phi0t(k,l) = psi(nlevs) + (0.5*dz*ttsp(k,l))
        phi0(k,l,:) = psi(:)
     endif
  enddo; enddo

! BEGIN leading-order PV check
! phi_xx + phi_yy + phi_zz = q

! first z-loop for phi_z at at intermediate levels
  do k = 1,nlevs-1
     pz(:,:,k) = (phi0(:,:,k+1) - phi0(:,:,k)) / dz
     if (k .eq. 1) then 
        call sp_to_xy(tbsp,tmpxy,kmax,lmax,2*kmax,2*lmax)
        print*,'theta maxval at surface: ',maxval(abs(tmpxy))
     endif
     call sp_to_xy(pz(:,:,k),tmpxy,kmax,lmax,2*kmax,2*lmax)
     print*,'pz maxval at level ',k,' : ',maxval(abs(tmpxy))
  enddo

! second z-loop for laplacian at grid levels and phi_zz; pv calc
  do k = 1,nlevs
     
     call d_s2s(phi0(:,:,k),pxx,1,dx*dx)
     call d_s2s(phi0(:,:,k),pyy,1,dy*dy)

    if (k .eq. 1) then
        pzz = (pz(:,:,k) - tbsp) / dz
     elseif (k .eq. nlevs) then
        pzz = (ttsp - pz(:,:,k-1)) / dz
     else
        pzz = (pz(:,:,k) - pz(:,:,k-1)) / dz
     endif
! this is critical to get the inversion to check; the mean is zero in the 
inversion
     pzz(1,1) = 0.

     errsp = pvsp(:,:,k) - (pxx + pyy + pzz)
     call sp_to_xy(errsp,errxy,kmax,lmax,2*kmax,2*lmax)
     print*,'max leading-order pv error at level ',k,' : ',maxval(abs(errxy))
     call sp_to_xy(pxx+pyy,tmpxy,kmax,lmax,2*kmax,2*lmax)
     print*,'max vort CHECK at level ',k,' : ',maxval(abs(tmpxy))
     call sp_to_xy(pzz,tmpxy,kmax,lmax,2*kmax,2*lmax)
     print*,'max pzz CHECK at level ',k,' : ',maxval(abs(tmpxy))

  enddo
! END leading-order PV check

  return
end SUBROUTINE invert

! SPECTRAL module
! v.3  6 September 2005
!
! a module to be used with spectral surface-based models.
!
MODULE spectral
  integer, parameter :: model = 1    ! 1:2sQG; 2:sQG trop; 3:sQG sfc; 4:HsQG
  real,    parameter :: dt =  0.01        ! model time step
  integer, parameter :: ntims =  101     ! number of model time steps
  integer, parameter :: iplot =  100      ! plots every iplot time steps
  integer, parameter :: imean =  int(10.e3/dt) ! compute area mean every imean

  logical, parameter :: iterr = .FALSE.   ! flag for terrain
  logical, parameter :: linear = .FALSE.  ! flag for linear advection
  logical, parameter :: trop = .FALSE.    ! flag for tropopause geometry

  real, parameter :: pi=3.14159265358979323846264338327950288419

  integer, parameter:: kmax = 64/2 ! number of x waves
  integer, parameter:: lmax = 64/2 ! number of y waves

  integer, parameter:: n = 8  ! diffusion parameter
  real, parameter :: tau = 10*dt ! diffusion time scale 

  real, parameter :: XL = 5.0   ! x domain length
  real, parameter :: YL = 5.0  ! y domain length
  real, parameter :: H  = 1.0   ! z domain length

  real, parameter :: Ross = 0.1 ! Rossby number
!  real, parameter :: Ross = 0. ! Rossby number

  real, parameter :: gamma=0.0  ! ekman parameter

!  logical, parameter :: hw = .FALSE.!  jet off
  logical, parameter :: hw = .TRUE.!  jet off
  logical, parameter :: restart = .FALSE. ! use restart file for ic
  logical, parameter :: grow = .FALSE. ! grow a normal mode
  real, parameter :: amu = 1.0 ! HW jet parameter (0->1)
  real, parameter :: shear = 1.0 ! shear parameter (1 for HW jet)

  real, parameter :: trl = 1000 ! jet relaxation parameter (e-folding time)
  logical, parameter :: cdf = .TRUE.      ! write to netcdf files
!  logical, parameter :: cdf = .FALSE.     ! write to text ASCII files

  character path*2; parameter (path='./') ! file location:

  ! do not modify below this point:
  integer, parameter :: kmid=kmax/2,lmid=lmax/2,mmax=3.125*kmax, &
       &        nmax=3.125*lmax,l2=nmax-lmax,k2=mmax-kmax, &
       &        lmaxp1=lmax+1,kmaxp1=kmax+1
  real, parameter :: facx=2.*pi/XL,facy=2.*pi/YL,eps=0.1
  real, parameter :: amiss=-99.,hwp=5.539118,ryl=2.*pi/hwp

! START pvinv specific-------------------------------------------------------
  real, parameter :: ZH = H ! z domain length
  integer, parameter :: pmax = 11 ! number of vertical levels

!  integer, parameter :: order = 0 ! leading-order only
!  integer, parameter :: order = 1 ! first-order only
  integer, parameter :: order = 2 ! use this for full inversion

CONTAINS

  ! scaling parameters:
  SUBROUTINE scaling(grav,tnot,Ns,km,Cor,Ls,Hs,Us,Ws,Ps,Ts)

    real, intent(out) :: grav,tnot,Ns,km,Cor,Ls,Hs,Us,Ws,Ps,Ts

    grav = 9.81            ! gravitational constant (m s^-2)
    tnot = 300.            ! theta constant at Z = 0 (K)
    Ns = 1.e-4             ! bouyancy frequency
    km = 1000.             ! 1000 m in a kilometer
    Cor = 1.e-4            ! Coriolis parameter (s^-1)
    Ls = 1000.*km          ! horizontal length scale (m)
    Hs = 10.*km            ! vertical length scale (m)

    if (Ross .ne. 0) then 
       Us = Ross*Cor*Ls       ! Horizontal wind scale (m s^-1)
       print*,'Us = ',Us
    else
       Us = 10.
    endif

    Ws = Ross*Hs*Us/Ls     ! Vertical wind scale (m s^-1)
    Ps = Us*Cor*Ls         ! geopotential scale (m^2 s^-2)
    Ts = Ps*tnot/(grav*Hs) ! potential temperature (K)

    return

  end SUBROUTINE scaling

  ! rolv's routine to get dimensional dx, dy, dz, and dt
  SUBROUTINE dx_echo(dxs,dys,dzs,dts)
    ! send back dimensional values for dx, dy, dz, and dt.

    real, intent(out) :: dxs,dys,dzs,dts
    real :: grav,tnot,Ns,km,Cor,Ls,Hs,Us,Ws,Ps,Ts

    call scaling(grav,tnot,Ns,km,Cor,Ls,Hs,Us,Ws,Ps,Ts)

    dxs = Ls*XL/real(2*kmax) ! meters
    dys = Ls*YL/real(2*kmax) ! meters
    dzs = Hs*ZH/real(pmax)   ! meters
    dts = Ls*dt/Us           ! seconds

    return
  end SUBROUTINE dx_echo
  ! END pvinv specific-------------------------------------------------------
ENDMODULE spectral

-- 
           Summary: internal compiler error: in
                    instantiate_virtual_regs_lossage, at function.c:1442
           Product: gcc
           Version: 4.1.0
            Status: UNCONFIRMED
          Severity: critical
          Priority: P2
         Component: fortran
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: hakim at atmos dot washington dot edu
                CC: gcc-bugs at gcc dot gnu dot org
 GCC build triplet: ./gcc/configure --prefix=/usr/local/gfortran --enable-
                    languages=
  GCC host triplet: gcc version 4.1.0 20050325 (experimental)
GCC target triplet: powerpc-apple-darwin7.8.0


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24047

Reply via email to