Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.

segmentation fault

roddur
Beginner
644 Views
dear friends,
In my code, in a namelist i have declared:
[cpp]&alloy_spec
fil= "Relativistic calculation for JaTa"
z_a=25.0
z_b=29.0
x=.10
y=.90
c_a=18.0
c_b=18.0
spn=2
nscf=100 /[/cpp]

and then allocate arrays as:

[cpp]allocate(A_MOM(0:8,spn),B_MOM(0:8,spn),ECG_A(3,spn),ECG_B(3,spn), &
             sorb(ntype,nfn+1,spn),porb(ntype,nfn+1,spn),             &
             dorb(ntype,nfn+1,spn),dos1(ntype,nfn+1,spn))
[/cpp]
in the main program.
But now in a subroutine:
[cpp]module mdos
    CONTAINS

    subroutine tdos(spec,ipdos,nsp,dos, &
        sorb,porb,dorb,osd1,osd2)

        use parameters
        implicit double precision(a-h,o-z)
        
        integer::osd1,osd2
        dimension spec(nkp,nfn+1),dos(nfn+1)
        real(8),dimension(ntype,nfn+1,spn)::sorb,porb,dorb


        !       write(*,*)ipdos,'from dos.f'

        do i=1,nfn+1
            dos(i)=0.0d0
        enddo

        sum=0.0d0
        do i=1,nfn+1

            sum=sum+spec(1,i)+3.0d0*spec(3,i)+ &
            3.0d0*spec(5,i)+2.0d0*spec(7,i)

            dos(i)=sum

            sum=0.0d0

	write(*,*) shape(sorb), shape(spec),shape(dos)
            sorb(ipdos,i,nsp)=spec(1,i)
            porb(ipdos,i,nsp)=3.0d0*spec(3,i)
            dorb(ipdos,i,nsp)=3.0d0*spec(5,i)+2.0d0*spec(7,i)


        enddo


    end subroutine tdos
end module mdos
[/cpp]
its giving error as segmentation fault. But if I use spn as a parameter and keep every other things unchanged, its going good. Anything you can notice?
0 Kudos
1 Reply
roddur
Beginner
644 Views
aah...it seems working if I use assumed shape arrays in the tdos subroutine!!
0 Kudos
Reply