Merge branch 'feature/correlation_expansion' into devel
epsi-builds/msspec_python3/pipeline/head There was a failure building this commit
Details
epsi-builds/msspec_python3/pipeline/head There was a failure building this commit
Details
This commit is contained in:
commit
25fd8114a5
|
@ -17,8 +17,8 @@
|
|||
# along with this msspec. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
# Source file : src/msspec/calculator.py
|
||||
# Last modified: Mon, 27 Sep 2021 17:49:48 +0200
|
||||
# Committed by : sylvain tricot <sylvain.tricot@univ-rennes1.fr>
|
||||
# Last modified: Wed, 09 Feb 2022 19:08:22 +0100
|
||||
# Committed by : Sylvain Tricot <sylvain.tricot@univ-rennes1.fr>
|
||||
|
||||
|
||||
"""
|
||||
|
@ -97,6 +97,7 @@ from msspec.spec.fortran import _eig_mi
|
|||
from msspec.spec.fortran import _eig_pw
|
||||
from msspec.spec.fortran import _phd_mi_noso_nosp_nosym
|
||||
from msspec.spec.fortran import _phd_se_noso_nosp_nosym
|
||||
from msspec.spec.fortran import _phd_ce_noso_nosp_nosym
|
||||
from msspec.spec.fortran import _comp_curves
|
||||
from msspec.utils import get_atom_index
|
||||
|
||||
|
@ -405,6 +406,8 @@ class _MSCALCULATOR(Calculator):
|
|||
do_spec = _phd_se_noso_nosp_nosym.run
|
||||
elif self.global_parameters.algorithm == 'inversion':
|
||||
do_spec = _phd_mi_noso_nosp_nosym.run
|
||||
elif self.global_parameters.algorithm == 'correlation':
|
||||
do_spec = _phd_ce_noso_nosp_nosym.run
|
||||
else:
|
||||
LOGGER.error("\'{}\' spectroscopy with \'{}\' algorithm is not "
|
||||
"an allowed combination.".format(self.global_parameters.spectroscopy,
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
.PHONY: all phd_se phd_mi eig_mi eig_pw comp_curve clean
|
||||
.PHONY: all phd_se phd_mi phd_ce eig_mi eig_pw comp_curve clean
|
||||
|
||||
all: phd_se phd_mi eig_mi eig_pw comp_curve
|
||||
all: phd_se phd_mi phd_ce eig_mi eig_pw comp_curve
|
||||
|
||||
phd_se:
|
||||
@+$(MAKE) -f phd_se_noso_nosp_nosym.mk all
|
||||
|
@ -8,6 +8,9 @@ phd_se:
|
|||
phd_mi:
|
||||
@+$(MAKE) -f phd_mi_noso_nosp_nosym.mk all
|
||||
|
||||
phd_ce:
|
||||
@+$(MAKE) -f phd_ce_noso_nosp_nosym.mk all
|
||||
|
||||
eig_mi:
|
||||
@+$(MAKE) -f eig_mi.mk all
|
||||
|
||||
|
@ -20,6 +23,7 @@ comp_curve:
|
|||
clean::
|
||||
@+$(MAKE) -f phd_se_noso_nosp_nosym.mk $@
|
||||
@+$(MAKE) -f phd_mi_noso_nosp_nosym.mk $@
|
||||
@+$(MAKE) -f phd_ce_noso_nosp_nosym.mk $@
|
||||
@+$(MAKE) -f eig_mi.mk $@
|
||||
@+$(MAKE) -f eig_pw.mk $@
|
||||
@+$(MAKE) -f comp_curve.mk $@
|
||||
|
|
|
@ -25,6 +25,9 @@
|
|||
USE OUTUNITS_MOD
|
||||
USE PARCAL_MOD
|
||||
USE PARCAL_A_MOD
|
||||
USE CORREXP_MOD
|
||||
USE GAUNT_C_MOD
|
||||
USE Q_ARRAY_MOD
|
||||
USE RELADS_MOD
|
||||
USE RELAX_MOD
|
||||
USE RESEAU_MOD
|
||||
|
@ -136,6 +139,7 @@
|
|||
CALL ALLOC_OUTUNITS()
|
||||
CALL ALLOC_PARCAL()
|
||||
CALL ALLOC_PARCAL_A()
|
||||
CALL ALLOC_Q_ARRAY()
|
||||
CALL ALLOC_RELADS()
|
||||
CALL ALLOC_RELAX()
|
||||
CALL ALLOC_RENORM()
|
||||
|
@ -173,6 +177,7 @@
|
|||
CALL ALLOC_C_G()
|
||||
CALL ALLOC_C_G_A()
|
||||
CALL ALLOC_C_G_M()
|
||||
CALL ALLOC_CORREXP()
|
||||
CALL ALLOC_DEXPFAC2()
|
||||
CALL ALLOC_DFACTSQ()
|
||||
CALL ALLOC_EIGEN()
|
||||
|
@ -186,6 +191,7 @@
|
|||
CALL ALLOC_SPECTRUM()
|
||||
CALL ALLOC_DIRECT()
|
||||
CALL ALLOC_DIRECT_A()
|
||||
CALL ALLOC_GAUNT_C()
|
||||
CALL ALLOC_PATH()
|
||||
CALL ALLOC_ROT()
|
||||
CALL ALLOC_ROT_CUB()
|
||||
|
|
|
@ -34,6 +34,7 @@ C ===============================================================
|
|||
INTEGER NCG_M
|
||||
INTEGER N_BESS, N_GAUNT
|
||||
INTEGER NLTWO
|
||||
INTEGER NLMM
|
||||
C ===============================================================
|
||||
CONTAINS
|
||||
SUBROUTINE INIT_DIM()
|
||||
|
@ -64,5 +65,6 @@ C N_GAUNT=5*NL_M
|
|||
N_GAUNT=10*NL_M
|
||||
|
||||
NLTWO=2*NL_M
|
||||
NLMM=LINMAX*NGR_M
|
||||
END SUBROUTINE INIT_DIM
|
||||
END MODULE DIM_MOD
|
||||
|
|
|
@ -192,6 +192,20 @@ C=======================================================================
|
|||
END SUBROUTINE ALLOC_COOR
|
||||
END MODULE COOR_MOD
|
||||
|
||||
C=======================================================================
|
||||
MODULE CORREXP_MOD
|
||||
IMPLICIT NONE
|
||||
COMPLEX*16, ALLOCATABLE, DIMENSION(:,:) :: A
|
||||
CONTAINS
|
||||
SUBROUTINE ALLOC_CORREXP()
|
||||
USE DIM_MOD
|
||||
IF (ALLOCATED(A)) THEN
|
||||
DEALLOCATE(A)
|
||||
ENDIF
|
||||
ALLOCATE(A(NLMM,NLMM))
|
||||
END SUBROUTINE ALLOC_CORREXP
|
||||
END MODULE CORREXP_MOD
|
||||
|
||||
C=======================================================================
|
||||
MODULE DEBWAL_MOD
|
||||
IMPLICIT NONE
|
||||
|
@ -417,6 +431,20 @@ C=======================================================================
|
|||
END SUBROUTINE ALLOC_PARCAL_A
|
||||
END MODULE PARCAL_A_MOD
|
||||
|
||||
C=======================================================================
|
||||
MODULE Q_ARRAY_MOD
|
||||
IMPLICIT NONE
|
||||
REAL, ALLOCATABLE, DIMENSION(:) :: Q
|
||||
CONTAINS
|
||||
SUBROUTINE ALLOC_Q_ARRAY()
|
||||
USE DIM_MOD
|
||||
IF (ALLOCATED(Q)) THEN
|
||||
DEALLOCATE(Q)
|
||||
ENDIF
|
||||
ALLOCATE(Q(NGR_M))
|
||||
END SUBROUTINE ALLOC_Q_ARRAY
|
||||
END MODULE Q_ARRAY_MOD
|
||||
|
||||
C=======================================================================
|
||||
MODULE RELADS_MOD
|
||||
IMPLICIT NONE
|
||||
|
@ -778,6 +806,20 @@ C=======================================================================
|
|||
END SUBROUTINE ALLOC_DEXPFAC
|
||||
END MODULE DEXPFAC_MOD
|
||||
|
||||
C=======================================================================
|
||||
MODULE GAUNT_C_MOD
|
||||
IMPLICIT NONE
|
||||
REAL*8, ALLOCATABLE, DIMENSION(:,:,:) :: GNT
|
||||
CONTAINS
|
||||
SUBROUTINE ALLOC_GAUNT_C()
|
||||
USE DIM_MOD
|
||||
IF (ALLOCATED(GNT)) THEN
|
||||
DEALLOCATE(GNT)
|
||||
ENDIF
|
||||
ALLOCATE(GNT(0:N_GAUNT,LINMAX,LINMAX))
|
||||
END SUBROUTINE ALLOC_GAUNT_C
|
||||
END MODULE GAUNT_C_MOD
|
||||
|
||||
C=======================================================================
|
||||
MODULE LOGAMAD_MOD
|
||||
IMPLICIT NONE
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
memalloc_src := memalloc/dim_mod.f memalloc/modules.f memalloc/allocation.f
|
||||
cluster_gen_src := $(wildcard cluster_gen/*.f)
|
||||
common_sub_src := $(wildcard common_sub/*.f)
|
||||
renormalization_src := $(wildcard renormalization/*.f)
|
||||
phd_ce_noso_nosp_nosym_src := $(filter-out phd_ce_noso_nosp_nosym/lapack_axb.f, $(wildcard phd_ce_noso_nosp_nosym/*.f))
|
||||
|
||||
SRCS = $(memalloc_src) $(cluster_gen_src) $(common_sub_src) $(renormalization_src) $(phd_ce_noso_nosp_nosym_src)
|
||||
MAIN_F = phd_ce_noso_nosp_nosym/main.f
|
||||
SO = _phd_ce_noso_nosp_nosym.so
|
||||
|
||||
include ../../../options.mk
|
|
@ -0,0 +1,41 @@
|
|||
C
|
||||
C======================================================================
|
||||
C
|
||||
SUBROUTINE CMNGR(NAT,NGR,CMN)
|
||||
C
|
||||
C input : NAT,NGR
|
||||
C output : CMN
|
||||
C
|
||||
C This subroutine calculate C(NAT-N,M-N) where,
|
||||
C 1<=M<=NGR<=NAT,1<=N<=M
|
||||
C C(NAT-N,M-N) is stored as CMN(N,M)
|
||||
C
|
||||
C H.-F. Zhao 2007
|
||||
C
|
||||
USE DIM_MOD
|
||||
C
|
||||
INTEGER NAT,NGR
|
||||
C
|
||||
REAL CMN(NGR_M,NGR_M)
|
||||
C
|
||||
IF(NGR.GT.NAT) THEN
|
||||
WRITE(6,*) 'NGR is larger than NAT, which is wrong'
|
||||
STOP
|
||||
ENDIF
|
||||
C
|
||||
DO M=1,NGR
|
||||
DO N=1,NGR
|
||||
CMN(N,M)=0.
|
||||
ENDDO
|
||||
CMN(M,M)=1.
|
||||
ENDDO
|
||||
C
|
||||
DO M=1,NGR
|
||||
DO N=M-1,1,-1
|
||||
CMN(N,M)=CMN(N+1,M)*FLOAT(NAT-N)/FLOAT(M-N)
|
||||
ENDDO
|
||||
ENDDO
|
||||
C
|
||||
RETURN
|
||||
C
|
||||
END
|
|
@ -0,0 +1,46 @@
|
|||
C
|
||||
C======================================================================
|
||||
C
|
||||
SUBROUTINE COEFPQ(NAT,NGR)
|
||||
C
|
||||
C This subroutine computes the P(n,m) and Q(n) coefficients
|
||||
C involved in the correlation expansion formulation
|
||||
C
|
||||
C Reference : equations (2.15) and (2.16) of
|
||||
C H. Zhao, D. Sebilleau and Z. Wu,
|
||||
C J. Phys.: Condens. Matter 20, 275241 (2008)
|
||||
C
|
||||
C H.-F. Zhao 2007
|
||||
C
|
||||
USE DIM_MOD
|
||||
USE Q_ARRAY_MOD
|
||||
C
|
||||
INTEGER NAT,NGR
|
||||
C
|
||||
REAL CMN(NGR_M,NGR_M),P(NGR_M,NGR_M)
|
||||
C
|
||||
C
|
||||
IF(NGR.GT.NAT) THEN
|
||||
WRITE(6,*) 'NGR is larger than NAT, which is wrong'
|
||||
STOP
|
||||
ENDIF
|
||||
C
|
||||
CALL CMNGR(NAT,NGR,CMN)
|
||||
C
|
||||
DO N=1,NGR
|
||||
P(N,N)=1.
|
||||
Q(N)=P(N,N)
|
||||
DO M=N+1,NGR
|
||||
P(N,M)=0.
|
||||
DO I=N,M-1
|
||||
P(N,M)=P(N,M)-P(N,I)*CMN(I,M)
|
||||
ENDDO
|
||||
Q(N)=Q(N)+P(N,M)
|
||||
C
|
||||
ENDDO
|
||||
C
|
||||
ENDDO
|
||||
C
|
||||
RETURN
|
||||
C
|
||||
END
|
|
@ -0,0 +1,47 @@
|
|||
C
|
||||
C======================================================================
|
||||
C
|
||||
SUBROUTINE COREXP_SAVM(JE,IGR,NGR,NLM,ITYPE,IGS,TAU)
|
||||
C
|
||||
C This subroutine call the correlation matrices calculations
|
||||
C for a given order IGR
|
||||
C
|
||||
C H.-F. Zhao : 2007
|
||||
C
|
||||
USE DIM_MOD
|
||||
USE COOR_MOD
|
||||
USE Q_ARRAY_MOD
|
||||
USE TRANS_MOD
|
||||
C
|
||||
INTEGER NLM(NGR_M),ITYPE(NGR_M),IGS(NGR_M)
|
||||
C
|
||||
REAL QI
|
||||
C
|
||||
COMPLEX*16 TAU(LINMAX,LINFMAX,NATCLU_M)
|
||||
C
|
||||
C
|
||||
DO ITYP=1,N_PROT
|
||||
NBTYP=NATYP(ITYP)
|
||||
NLM(IGR)=LMAX(ITYP,JE)
|
||||
ITYPE(IGR)=ITYP
|
||||
DO NUM=1,NBTYP
|
||||
IGS(IGR)=NCORR(NUM,ITYP)
|
||||
C
|
||||
IF(IGS(IGR).GT.IGS(IGR-1)) THEN
|
||||
QI=Q(IGR)
|
||||
CALL MPIS(IGR,NLM,ITYPE,IGS,JE,QI,TAU)
|
||||
C
|
||||
IGR=IGR+1
|
||||
IF(IGR.LE.NGR) THEN
|
||||
CALL COREXP_SAVM1(JE,IGR,NGR,NLM,ITYPE,IGS,TAU)
|
||||
ENDIF
|
||||
IGR=IGR-1
|
||||
C
|
||||
ENDIF
|
||||
C
|
||||
ENDDO
|
||||
ENDDO
|
||||
C
|
||||
RETURN
|
||||
C
|
||||
END
|
|
@ -0,0 +1,19 @@
|
|||
C
|
||||
C======================================================================
|
||||
C
|
||||
SUBROUTINE COREXP_SAVM1(JE,IGR,NGR,NLM,ITYPE,IGS,TAU)
|
||||
C
|
||||
C This subroutine allows a recursive use of COREXP_SAVM
|
||||
C
|
||||
C H.-F. Zhao : 2007
|
||||
C
|
||||
USE DIM_MOD
|
||||
C
|
||||
INTEGER NLM(NGR_M),ITYPE(NGR_M),IGS(NGR_M)
|
||||
COMPLEX*16 TAU(LINMAX,LINFMAX,NATCLU_M)
|
||||
C
|
||||
CALL COREXP_SAVM(JE,IGR,NGR,NLM,ITYPE,IGS,TAU)
|
||||
C
|
||||
RETURN
|
||||
C
|
||||
END
|
|
@ -0,0 +1,121 @@
|
|||
C
|
||||
C=======================================================================
|
||||
C
|
||||
SUBROUTINE COUMAT(ITL,MI,LF,MF,DELTA,RADIAL,MATRIX)
|
||||
C
|
||||
C This routine calculates the spin-independent PhD optical matrix
|
||||
C elements for dipolar excitations. It is stored in
|
||||
C MATRIX(JDIR,JPOL)
|
||||
C
|
||||
C Here, the conventions are :
|
||||
C
|
||||
C IPOL=1 : linearly polarized light
|
||||
C IPOL=2 : circularly polarized light
|
||||
C
|
||||
C JPOL=1 : +/x polarization for circular/linear light
|
||||
C JPOL=2 : -/y polarization for circular/linear light
|
||||
C
|
||||
C When IDICHR=0, JDIR = 1,2 and 3 correspond respectively to the x,y
|
||||
C and z directions for the linear polarization. But for IDICHR=1,
|
||||
C these basis directions are those of the position of the light.
|
||||
C
|
||||
C Last modified : 8 Dec 2008
|
||||
C
|
||||
USE DIM_MOD
|
||||
C
|
||||
USE INIT_L_MOD , L2 => NNL, L3 => LF1, L4 => LF2, L5 => ISTEP_LF
|
||||
USE SPIN_MOD , I1 => ISPIN, N1 => NSPIN, N2 => NSPIN2, I2 => ISFLI
|
||||
&P, I8 => IR_DIA, N3 => NSTEP
|
||||
USE TYPCAL_MOD , I3 => IPHI, I4 => IE, I5 => ITHETA, I6 => IFTHET,
|
||||
& I7 => IMOD, I9 => I_CP, I10 => I_EXT
|
||||
C
|
||||
COMPLEX MATRIX(3,2),SUM_1,SUM_2,DELTA,YLM(3,-1:1),RADIAL
|
||||
COMPLEX ONEC,IC,IL,COEF,PROD
|
||||
C
|
||||
REAL RLM(1-NL_M:NL_M-1,1-NL_M:NL_M-1,0:NL_M-1),GNT(0:N_GAUNT)
|
||||
REAL THETA(3),PHI(3)
|
||||
C
|
||||
DATA PI4S3,C_LIN,SQR2 /4.188790,1.447202,1.414214/
|
||||
DATA PIS2 /1.570796/
|
||||
C
|
||||
ONEC=(1.,0.)
|
||||
IC=(0.,1.)
|
||||
C
|
||||
IF(INITL.EQ.0) GOTO 2
|
||||
C
|
||||
M=MF-MI
|
||||
C
|
||||
IF(MOD(LF,4).EQ.0) THEN
|
||||
IL=ONEC
|
||||
ELSEIF(MOD(LF,4).EQ.1) THEN
|
||||
IL=IC
|
||||
ELSEIF(MOD(LF,4).EQ.2) THEN
|
||||
IL=-ONEC
|
||||
ELSEIF(MOD(LF,4).EQ.3) THEN
|
||||
IL=-IC
|
||||
ENDIF
|
||||
C
|
||||
CALL GAUNT(LI,MI,LF,MF,GNT)
|
||||
C
|
||||
IF(ITL.EQ.0) THEN
|
||||
c COEF=CEXP(IC*DELTA)*CONJG(IL)
|
||||
COEF=CEXP(IC*DELTA)*IL
|
||||
ELSE
|
||||
IF(IDICHR.EQ.0) THEN
|
||||
c COEF=PI4S3*CONJG(IL)
|
||||
COEF=PI4S3*IL
|
||||
ELSE
|
||||
c COEF=C_LIN*CONJG(IL)
|
||||
COEF=C_LIN*IL
|
||||
ENDIF
|
||||
ENDIF
|
||||
C
|
||||
PROD=COEF*RADIAL*GNT(1)
|
||||
C
|
||||
IF(IDICHR.EQ.0) THEN
|
||||
YLM(1,-1)=(0.345494,0.)
|
||||
YLM(1,0)=(0.,0.)
|
||||
YLM(1,1)=(-0.345494,0.)
|
||||
YLM(2,-1)=(0.,-0.345494)
|
||||
YLM(2,0)=(0.,0.)
|
||||
YLM(2,1)=(0.,-0.345494)
|
||||
YLM(3,-1)=(0.,0.)
|
||||
YLM(3,0)=(0.488602,0.)
|
||||
YLM(3,1)=(0.,0.)
|
||||
C
|
||||
DO JDIR=1,3
|
||||
MATRIX(JDIR,1)=PROD*CONJG(YLM(JDIR,M))
|
||||
ENDDO
|
||||
C
|
||||
ELSEIF(IDICHR.GE.1) THEN
|
||||
C
|
||||
THETA(1)=PIS2
|
||||
PHI(1)=0.
|
||||
THETA(2)=PIS2
|
||||
PHI(2)=PIS2
|
||||
THETA(3)=0.
|
||||
PHI(3)=0.
|
||||
C
|
||||
DO JDIR=1,3
|
||||
CALL DJMN(THETA(JDIR),RLM,1)
|
||||
SUM_1=RLM(-1,M,1)*PROD*CEXP((0.,-1.)*M*PHI(JDIR))
|
||||
SUM_2=RLM(1,M,1)*PROD*CEXP((0.,-1.)*M*PHI(JDIR))
|
||||
IF(IPOL.EQ.2) THEN
|
||||
MATRIX(JDIR,1)=SQR2*SUM_1
|
||||
MATRIX(JDIR,2)=SQR2*SUM_2
|
||||
ELSEIF(ABS(IPOL).EQ.1) THEN
|
||||
MATRIX(JDIR,1)=(SUM_2-SUM_1)
|
||||
MATRIX(JDIR,2)=(SUM_2+SUM_1)*IC
|
||||
ENDIF
|
||||
ENDDO
|
||||
ENDIF
|
||||
GOTO 1
|
||||
C
|
||||
2 DO JDIR=1,3
|
||||
MATRIX(JDIR,1)=ONEC
|
||||
MATRIX(JDIR,2)=ONEC
|
||||
ENDDO
|
||||
C
|
||||
1 RETURN
|
||||
C
|
||||
END
|
|
@ -0,0 +1,85 @@
|
|||
C
|
||||
C=======================================================================
|
||||
C
|
||||
SUBROUTINE DWSPH(JTYP,JE,X,TLT,ISPEED)
|
||||
C
|
||||
C This routine recomputes the T-matrix elements taking into account the
|
||||
C mean square displacements.
|
||||
C
|
||||
C When the argument X is tiny, no vibrations are taken into account
|
||||
C
|
||||
C Last modified : 25 Apr 2013
|
||||
C
|
||||
USE DIM_MOD
|
||||
C
|
||||
USE TRANS_MOD
|
||||
C
|
||||
DIMENSION GNT(0:N_GAUNT)
|
||||
C
|
||||
COMPLEX TLT(0:NT_M,4,NATM,NE_M),SL1,ZEROC
|
||||
C
|
||||
COMPLEX*16 FFL(0:2*NL_M)
|
||||
C
|
||||
DATA PI4,EPS /12.566371,1.0E-10/
|
||||
C
|
||||
ZEROC=(0.,0.)
|
||||
C
|
||||
IF(X.GT.EPS) THEN
|
||||
C
|
||||
C Standard case: vibrations
|
||||
C
|
||||
IF(ISPEED.LT.0) THEN
|
||||
NSUM_LB=ABS(ISPEED)
|
||||
ENDIF
|
||||
C
|
||||
COEF=PI4*EXP(-X)
|
||||
NL2=2*LMAX(JTYP,JE)+2
|
||||
IBESP=5
|
||||
MG1=0
|
||||
MG2=0
|
||||
C
|
||||
CALL BESPHE(NL2,IBESP,X,FFL)
|
||||
C
|
||||
DO L=0,LMAX(JTYP,JE)
|
||||
XL=FLOAT(L+L+1)
|
||||
SL1=ZEROC
|
||||
C
|
||||
DO L1=0,LMAX(JTYP,JE)
|
||||
XL1=FLOAT(L1+L1+1)
|
||||
CALL GAUNT(L,MG1,L1,MG2,GNT)
|
||||
L2MIN=ABS(L1-L)
|
||||
IF(ISPEED.GE.0) THEN
|
||||
L2MAX=L1+L
|
||||
ELSEIF(ISPEED.LT.0) THEN
|
||||
L2MAX=L2MIN+2*(NSUM_LB-1)
|
||||
ENDIF
|
||||
SL2=0.
|
||||
C
|
||||
DO L2=L2MIN,L2MAX,2
|
||||
XL2=FLOAT(L2+L2+1)
|
||||
C=SQRT(XL1*XL2/(PI4*XL))
|
||||
SL2=SL2+C*GNT(L2)*REAL(DREAL(FFL(L2)))
|
||||
ENDDO
|
||||
C
|
||||
SL1=SL1+SL2*TL(L1,1,JTYP,JE)
|
||||
ENDDO
|
||||
C
|
||||
TLT(L,1,JTYP,JE)=COEF*SL1
|
||||
C
|
||||
ENDDO
|
||||
C
|
||||
ELSE
|
||||
C
|
||||
C Argument X tiny: no vibrations
|
||||
C
|
||||
DO L=0,LMAX(JTYP,JE)
|
||||
C
|
||||
TLT(L,1,JTYP,JE)=TL(L,1,JTYP,JE)
|
||||
C
|
||||
ENDDO
|
||||
C
|
||||
ENDIF
|
||||
C
|
||||
RETURN
|
||||
C
|
||||
END
|
|
@ -0,0 +1,26 @@
|
|||
C
|
||||
C=======================================================================
|
||||
C
|
||||
SUBROUTINE FACDIF(COSTH,JAT,JE,FTHETA)
|
||||
C
|
||||
C This routine computes the plane wave scattering factor
|
||||
C
|
||||
USE DIM_MOD
|
||||
C
|
||||
USE TRANS_MOD
|
||||
C
|
||||
DIMENSION PL(0:100)
|
||||
C
|
||||
COMPLEX FTHETA
|
||||
C
|
||||
FTHETA=(0.,0.)
|
||||
NL=LMAX(JAT,JE)+1
|
||||
CALL POLLEG(NL,COSTH,PL)
|
||||
DO 20 L=0,NL-1
|
||||
FTHETA=FTHETA+(2*L+1)*TL(L,1,JAT,JE)*PL(L)
|
||||
20 CONTINUE
|
||||
FTHETA=FTHETA/VK(JE)
|
||||
C
|
||||
RETURN
|
||||
C
|
||||
END
|
|
@ -0,0 +1,113 @@
|
|||
C
|
||||
C=======================================================================
|
||||
C
|
||||
SUBROUTINE FACDIF1(VKE,RJ,RJK,THRJ,PHIRJ,BETA,GAMMA,L,M,FSPH,JAT,J
|
||||
&E,*)
|
||||
C
|
||||
C This routine computes a spherical wave scattering factor
|
||||
C
|
||||
C Last modified : 03/04/2006
|
||||
C
|
||||
USE DIM_MOD
|
||||
USE APPROX_MOD
|
||||
USE EXPFAC_MOD
|
||||
USE TRANS_MOD
|
||||
USE TYPCAL_MOD , I2 => IPHI, I3 => IE, I4 => ITHETA, I5 => IMOD, I
|
||||
&6 => IPOL, I7 => I_CP, I8 => I_EXT, I9 => I_TEST
|
||||
C
|
||||
DIMENSION PLMM(0:100,0:100)
|
||||
DIMENSION D(1-NL_M:NL_M-1,1-NL_M:NL_M-1,0:NL_M-1)
|
||||
C
|
||||
COMPLEX HLM(0:NO_ST_M,0:NL_M-1),HLN(0:NO_ST_M,0:NL_M-1),FSPH,RHOJ
|
||||
COMPLEX HLM1,HLM2,HLM3,HLM4,ALMU,BLMU,SLP,SNU,SMU,VKE
|
||||
COMPLEX RHOJK
|
||||
C
|
||||
C
|
||||
DATA PI/3.141593/
|
||||
C
|
||||
A=1.
|
||||
INTER=0
|
||||
IF(ITL.EQ.1) VKE=VK(JE)
|
||||
RHOJ=VKE*RJ
|
||||
RHOJK=VKE*RJK
|
||||
HLM1=(1.,0.)
|
||||
HLM2=(1.,0.)
|
||||
HLM3=(1.,0.)
|
||||
HLM4=(1.,0.)
|
||||
IEM=1
|
||||
CSTH=COS(BETA)
|
||||
IF((IFTHET.EQ.0).OR.(THRJ.LT.0.0001)) THEN
|
||||
INTER=1
|
||||
BLMU=SQRT(4.*PI/FLOAT(2*L+1))*CEXP((0.,-1.)*M*(PHIRJ-PI))
|
||||
ENDIF
|
||||
CALL PLM(CSTH,PLMM,LMAX(JAT,JE))
|
||||
IF(ISPHER.EQ.0) NO1=0
|
||||
IF(ISPHER.EQ.1) THEN
|
||||
IF(NO.EQ.8) THEN
|
||||
NO1=LMAX(JAT,JE)+1
|
||||
ELSE
|
||||
NO1=NO
|
||||
ENDIF
|
||||
CALL POLHAN(ISPHER,NO1,LMAX(JAT,JE),RHOJ,HLM)
|
||||
IF(IEM.EQ.0) THEN
|
||||
HLM4=HLM(0,L)
|
||||
ENDIF
|
||||
IF(RJK.GT.0.0001) THEN
|
||||
NDUM=0
|
||||
CALL POLHAN(ISPHER,NDUM,LMAX(JAT,JE),RHOJK,HLN)
|
||||
ENDIF
|
||||
CALL DJMN(THRJ,D,L)
|
||||
A1=ABS(D(0,M,L))
|
||||
IF(((A1.LT.0.0001).AND.(IFTHET.EQ.1)).AND.(INTER.EQ.0)) RETURN 1
|
||||
&
|
||||
ENDIF
|
||||
MUMAX=MIN0(L,NO1)
|
||||
SMU=(0.,0.)
|
||||
DO 10 MU=0,MUMAX
|
||||
IF(MOD(MU,2).EQ.0) THEN
|
||||
B=1.
|
||||
ELSE
|
||||
B=-1.
|
||||
IF(SIN(BETA).LT.0.) THEN
|
||||
A=-1.
|
||||
ENDIF
|
||||
ENDIF
|
||||
IF(ISPHER.LE.1) THEN
|
||||
ALMU=(1.,0.)
|
||||
C=1.
|
||||
ENDIF
|
||||
IF(ISPHER.EQ.0) GOTO 40
|
||||
IF(INTER.EQ.0) BLMU=CMPLX(D(M,0,L))
|
||||
IF(MU.GT.0) THEN
|
||||
C=B*FLOAT(L+L+1)/EXPF(MU,L)
|
||||
ALMU=(D(M,MU,L)*CEXP((0.,-1.)*MU*GAMMA)+B*
|
||||
* CEXP((0.,1.)*MU*GAMMA)*D(M,-MU,L))/BLMU
|
||||
ELSE
|
||||
C=1.
|
||||
ALMU=CMPLX(D(M,0,L))/BLMU
|
||||
ENDIF
|
||||
40 SNU=(0.,0.)
|
||||
NU1=INT(0.5*(NO1-MU)+0.0001)
|
||||
NUMAX=MIN0(NU1,L-MU)
|
||||
DO 20 NU=0,NUMAX
|
||||
SLP=(0.,0.)
|
||||
LPMIN=MAX0(MU,NU)
|
||||
DO 30 LP=LPMIN,LMAX(JAT,JE)
|
||||
IF(ISPHER.EQ.1) THEN
|
||||
HLM1=HLM(NU,LP)
|
||||
IF(RJK.GT.0.0001) HLM3=HLN(0,LP)
|
||||
ENDIF
|
||||
SLP=SLP+FLOAT(2*LP+1)*TL(LP,1,JAT,JE)*HLM1*PLMM(LP,MU)*HLM3
|
||||
30 CONTINUE
|
||||
IF(ISPHER.EQ.1) THEN
|
||||
HLM2=HLM(MU+NU,L)
|
||||
ENDIF
|
||||
SNU=SNU+SLP*HLM2
|
||||
20 CONTINUE
|
||||
SMU=SMU+SNU*C*ALMU*A*B
|
||||
10 CONTINUE
|
||||
FSPH=SMU/(VKE*HLM4)
|
||||
C
|
||||
RETURN
|
||||
C
|
||||
END
|
|
@ -0,0 +1,126 @@
|
|||
C
|
||||
C=======================================================================
|
||||
C
|
||||
SUBROUTINE GAUNT_ST(LMAX_T)
|
||||
C
|
||||
C This subroutine calculates the Gaunt coefficient G(L2,L3|L1)
|
||||
C using a downward recursion scheme due to Schulten and Gordon
|
||||
C for the Wigner's 3j symbols. The result is stored as GNT(L3),
|
||||
C making use of the selection rule M3 = M1 - M2.
|
||||
C
|
||||
C Ref. : K. Schulten and R. G. Gordon, J. Math. Phys. 16, 1961 (1975)
|
||||
C
|
||||
C This is the double precision version where the values are stored
|
||||
C
|
||||
C Last modified : 14 May 2009
|
||||
C
|
||||
C
|
||||
USE DIM_MOD
|
||||
USE LOGAMAD_MOD
|
||||
USE GAUNT_C_MOD
|
||||
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
|
||||
C
|
||||
INTEGER LMAX_T
|
||||
C
|
||||
REAL*8 F(0:N_GAUNT),G(0:N_GAUNT),A(0:N_GAUNT),A1(0:N_GAUNT)
|
||||
REAL*8 B(0:N_GAUNT)
|
||||
C
|
||||
DATA PI4/12.566370614359D0/
|
||||
C
|
||||
DO L1=0,LMAX_T
|
||||
IL1=L1*L1+L1+1
|
||||
DO M1=-L1,L1
|
||||
IND1=IL1+M1
|
||||
LM1=L1+M1
|
||||
KM1=L1-M1
|
||||
DO L2=0,LMAX_T
|
||||
IL2=L2*L2+L2+1
|
||||
C
|
||||
IF(MOD(M1,2).EQ.0) THEN
|
||||
COEF=DSQRT(DFLOAT((L1+L1+1)*(L2+L2+1))/PI4)
|
||||
ELSE
|
||||
COEF=-DSQRT(DFLOAT((L1+L1+1)*(L2+L2+1))/PI4)
|
||||
ENDIF
|
||||
C
|
||||
L12=L1+L2
|
||||
K12=L1-L2
|
||||
L12_1=L12+L12+1
|
||||
L12_2=L12*L12
|
||||
L12_21=L12*L12+L12+L12+1
|
||||
K12_2=K12*K12
|
||||
C
|
||||
F(L12+1)=0.D0
|
||||
G(L12+1)=0.D0
|
||||
A(L12+1)=0.D0
|
||||
A1(L12+1)=0.D0
|
||||
A1(L12)=2.D0*DSQRT(DFLOAT(L1*L2*L12_1*L12_2))
|
||||
D1=GLD(L2+L2+1,1)-GLD(L12_1+1,1)
|
||||
D5=0.5D0*(GLD(L1+L1+1,1)+GLD(L2+L2+1,1)-GLD(L12_1+1,1))
|
||||
D6=GLD(L12+1,1)-GLD(L1+1,1)-GLD(L2+1,1)
|
||||
C
|
||||
IF(MOD(K12,2).EQ.0) THEN
|
||||
G(L12)=DEXP(D5+D6)
|
||||
ELSE
|
||||
G(L12)=-DEXP(D5+D6)
|
||||
ENDIF
|
||||
C
|
||||
DO M2=-L2,L2
|
||||
IND2=IL2+M2
|
||||
C
|
||||
M3=M1-M2
|
||||
LM2=L2+M2
|
||||
KM2=L2-M2
|
||||
C
|
||||
DO J=1,N_GAUNT
|
||||
GNT(J,IND2,IND1)=0.D0
|
||||
ENDDO
|
||||
C
|
||||
IF((ABS(M1).GT.L1).OR.(ABS(M2).GT.L2)) GOTO 10
|
||||
C
|
||||
D2=GLD(L1+L1+1,1)-GLD(LM2+1,1)
|
||||
D3=GLD(L12+M3+1,1)-GLD(KM2+1,1)
|
||||
D4=GLD(L12-M3+1,1)-GLD(LM1+1,1)-GLD(KM1+1,1)
|
||||
C
|
||||
IF(MOD(KM1-KM2,2).EQ.0) THEN
|
||||
F(L12)=DSQRT(DEXP(D1+D2+D3+D4))
|
||||
ELSE
|
||||
F(L12)=-DSQRT(DEXP(D1+D2+D3+D4))
|
||||
ENDIF
|
||||
C
|
||||
A(L12)=2.D0*DSQRT(DFLOAT(L1*L2*L12_1*(L12_2-M3*M3)))
|
||||
B(L12)=-DFLOAT(L12_1*((L2*L2-L1*L1-K12)*M3+L12*(L12+1)
|
||||
1 *(M2+M1)))
|
||||
C
|
||||
IF(ABS(M3).LE.L12) THEN
|
||||
GNT(L12,IND2,IND1)=COEF*F(L12)*G(L12)*
|
||||
1 DSQRT(DFLOAT(L12_1))
|
||||
ENDIF
|
||||
C
|
||||
JMIN=MAX0(ABS(K12),ABS(M3))
|
||||
C
|
||||
DO J=L12-1,JMIN,-1
|
||||
J1=J+1
|
||||
J2=J+2
|
||||
JJ=J*J
|
||||
A1(J)=DSQRT(DFLOAT(JJ*(JJ-K12_2)*(L12_21-JJ)))
|
||||
A(J)=DSQRT(DFLOAT((JJ-K12_2)*(L12_21-JJ)*(JJ-M3*M3)))
|
||||
B(J)=-DFLOAT((J+J1)*(L2*(L2+1)*M3-L1*(L1+1)*M3+J*J1*
|
||||
1 (M2+M1)))
|
||||
F(J)=-(DFLOAT(J1)*A(J2)*F(J2)+B(J1)*F(J1))/(DFLOAT(J2)*
|
||||
1 A(J1))
|
||||
G(J)=-(DFLOAT(J1)*A1(J2)*G(J2))/(DFLOAT(J2)*A1(J1))
|
||||
C
|
||||
IF(ABS(M3).LE.J) THEN
|
||||
GNT(J,IND2,IND1)=COEF*F(J)*G(J)*DSQRT(DFLOAT(J+J1))
|
||||
ENDIF
|
||||
ENDDO
|
||||
C
|
||||
ENDDO
|
||||
ENDDO
|
||||
ENDDO
|
||||
ENDDO
|
||||
C
|
||||
10 RETURN
|
||||
C
|
||||
END
|
||||
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,21 @@
|
|||
SUBROUTINE RUN(NATP_M_, NATCLU_M_, NAT_EQ_M_, N_CL_L_M_,
|
||||
& NE_M_, NL_M_, LI_M_, NEMET_M_, NO_ST_M_, NDIF_M_, NSO_M_,
|
||||
& NTEMP_M_, NODES_EX_M_, NSPIN_M_, NTH_M_, NPH_M_, NDIM_M_,
|
||||
& N_TILT_M_, N_ORD_M_, NPATH_M_, NGR_M_)
|
||||
|
||||
USE DIM_MOD
|
||||
IMPLICIT INTEGER (A-Z)
|
||||
CF2PY INTEGER, INTENT(IN,COPY) :: NATP_M_, NATCLU_M_, NAT_EQ_M_, N_CL_L_M_
|
||||
CF2PY INTEGER, INTENT(IN,COPY) :: NE_M_, NL_M_, LI_M_, NEMET_M_, NO_ST_M_, NDIF_M_, NSO_M_
|
||||
CF2PY INTEGER, INTENT(IN,COPY) :: NTEMP_M_, NODES_EX_M_, NSPIN_M_, NTH_M_, NPH_M_, NDIM_M_
|
||||
CF2PY INTEGER, INTENT(IN,COPY) :: N_TILT_M_, N_ORD_M_, NPATH_M_, NGR_M_
|
||||
|
||||
CALL ALLOCATION(NATP_M_, NATCLU_M_, NAT_EQ_M_, N_CL_L_M_,
|
||||
& NE_M_, NL_M_, LI_M_, NEMET_M_, NO_ST_M_, NDIF_M_, NSO_M_,
|
||||
& NTEMP_M_, NODES_EX_M_, NSPIN_M_, NTH_M_, NPH_M_, NDIM_M_,
|
||||
& N_TILT_M_, N_ORD_M_, NPATH_M_, NGR_M_)
|
||||
|
||||
CALL MAIN_PHD_NS_CE()
|
||||
CALL CLOSE_ALL_FILES()
|
||||
|
||||
END SUBROUTINE RUN
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,280 @@
|
|||
C
|
||||
C
|
||||
C======================================================================
|
||||
C
|
||||
SUBROUTINE MPIS(N,NLM,ITYP,IGS,JE,QI,TAU)
|
||||
C
|
||||
C
|
||||
C This subroutine construct the correlation matrices and uses
|
||||
C LU decomposition method to do the matrix inversion.
|
||||
C The inverse matrix which is the contribution of a small atom group
|
||||
C is kept for further use.
|
||||
C
|
||||
C H. -F. Zhao : 2007
|
||||
C
|
||||
C Last modified (DS) : 13 May 2009
|
||||
C
|
||||
USE DIM_MOD
|
||||
USE COOR_MOD
|
||||
USE INIT_L_MOD
|
||||
USE GAUNT_C_MOD
|
||||
USE TRANS_MOD
|
||||
USE CORREXP_MOD
|
||||
C
|
||||
INTEGER NLM(NGR_M),ITYP(NGR_M),IGS(NGR_M)
|
||||
COMPLEX*16 TAU(LINMAX,LINFMAX,NATCLU_M)
|
||||
C
|
||||
REAL QI
|
||||
C
|
||||
COMPLEX*16 ZEROC,ONEC,IC
|
||||
C
|
||||
COMPLEX*16 ATTL(0:NT_M,NATM)
|
||||
COMPLEX*16 EXPJN,ATTJN
|
||||
COMPLEX*16 YLM(0:NLTWO,-NLTWO:NLTWO)
|
||||
COMPLEX*16 HL1(0:NLTWO)
|
||||
COMPLEX*16 SUM_L,SUM_L2
|
||||
COMPLEX*16 SUM_L_A,SUM_L2_A,SUM_L_B,SUM_L2_B
|
||||
C
|
||||
REAL*8 FOURPI
|
||||
REAL*8 XJN,YJN,ZJN,RJN,KRJN,ZDJN
|
||||
REAL*8 IM_VK,RE_VK
|
||||
C
|
||||
INTEGER IPIV(NLMM),ONE_L,IN1
|
||||
C
|
||||
COMPLEX*16 FOURPI_IC,IC_L,IC_REF,TEMP,TEMP1,TEMP2,CN1
|
||||
COMPLEX*16 AINV(NLMM,NLMM),IN(NLMM,LINFMAX)
|
||||
C
|
||||
DATA FOURPI /12.566370614359D0/
|
||||
C
|
||||
ZEROC=(0.D0,0.D0)
|
||||
ONEC=(1.D0,0.D0)
|
||||
IC=(0.D0,1.D0)
|
||||
IBESS=3
|
||||
FOURPI_IC=-IC*FOURPI
|
||||
C
|
||||
LM0=LMAX(1,JE)
|
||||
LM0=MIN(LM0,LF2)
|
||||
NRHS=(LM0+1)*(LM0+1)
|
||||
INDJ=0
|
||||
C
|
||||
NM=0
|
||||
DO I=1,N-1
|
||||
J=NLM(I)+1
|
||||
NM=NM+J*J
|
||||
ENDDO
|
||||
L=NLM(N)
|
||||
LNMAX=L
|
||||
L=(L+1)*(L+1)
|
||||
NM1=NM+1
|
||||
NML=NM+L
|
||||
NTYP=ITYP(N)
|
||||
C
|
||||
DO L=0,LNMAX
|
||||
ATTL(L,N)=DCMPLX(TL(L,1,NTYP,JE))
|
||||
ENDDO
|
||||
IM_VK=-DIMAG(DCMPLX(VK(JE)))
|
||||
RE_VK=DBLE(VK(JE))
|
||||
C
|
||||
C set up matrix blocks C((N-1)*1) and D(1*(N-1))
|
||||
C
|
||||
I=IGS(N)
|
||||
XN=SYM_AT(1,I)
|
||||
YN=SYM_AT(2,I)
|
||||
ZN=SYM_AT(3,I)
|
||||
C
|
||||
DO J=1,N-1
|
||||
JATL=IGS(J)
|
||||
LJMAX=NLM(J)
|
||||
JTYP=ITYP(J)
|
||||
J1=J-1
|
||||
C
|
||||
XJN=DBLE(SYM_AT(1,JATL)-XN)
|
||||
YJN=DBLE(SYM_AT(2,JATL)-YN)
|
||||
ZJN=DBLE(SYM_AT(3,JATL)-ZN)
|
||||
RJN=DSQRT(XJN*XJN+YJN*YJN+ZJN*ZJN)
|
||||
KRJN=RE_VK*RJN
|
||||
ATTJN=FOURPI_IC*DEXP(IM_VK*RJN)
|
||||
EXPJN=(XJN+IC*YJN)/RJN
|
||||
ZDJN=ZJN/RJN
|
||||
CALL SPH_HAR2(2*NL_M,ZDJN,EXPJN,YLM,LNMAX+LJMAX)
|
||||
CALL BESPHE2(LNMAX+LJMAX+1,IBESS,KRJN,HL1)
|
||||
DO L=0,LJMAX
|
||||
ATTL(L,J)=ATTJN*DCMPLX(TL(L,1,JTYP,JE))
|
||||
ENDDO
|
||||
C
|
||||
II=NM
|
||||
IN1=-1
|
||||
CN1=IC
|
||||
JJ=0
|
||||
C
|
||||
DO LN=0,LNMAX
|
||||
ILN=LN*LN+LN+1
|
||||
IN1=-IN1
|
||||
CN1=-CN1*IC
|
||||
C
|
||||
DO MLN=-LN,LN
|
||||
INDN=ILN+MLN
|
||||
II=II+1
|
||||
JJ0=J1*INDJ
|
||||
ONE_L=-IN1
|
||||
IC_REF=-CN1*IC
|
||||
C
|
||||
DO LJ=0,LJMAX
|
||||
ILJ=LJ*LJ+LJ+1
|
||||
L_MIN=ABS(LJ-LN)
|
||||
L_MAX=LJ+LN
|
||||
ONE_L=-ONE_L
|
||||
IC_REF=IC_REF*IC
|
||||
C
|
||||
C Case MLJ equal to zero
|
||||
C
|
||||
JJ1=JJ0+ILJ
|
||||
IF(LJ.GE.LN) THEN
|
||||
IC_L=-IC_REF
|
||||
ELSE
|
||||
IC_L=-ONEC/IC_REF
|
||||
ENDIF
|
||||
C
|
||||
SUM_L=ZEROC
|
||||
SUM_L2=ZEROC
|
||||
C
|
||||
DO L=L_MIN,L_MAX,2
|
||||
IC_L=-IC_L
|
||||
IF(ABS(MLN).LE.L) THEN
|
||||
TEMP=IC_L*HL1(L)*GNT(L,ILJ,INDN)
|
||||
SUM_L=SUM_L+YLM(L,MLN)*TEMP
|
||||
SUM_L2=SUM_L2+DCONJG(YLM(L,MLN))*TEMP
|
||||
ENDIF
|
||||
ENDDO
|
||||
C
|
||||
IF(ONE_L.EQ.-1) SUM_L2=-SUM_L2
|
||||
A(JJ1,II)=ATTL(LJ,J)*SUM_L
|
||||
A(II,JJ1)=ATTJN*ATTL(LN,N)*SUM_L2
|
||||
C
|
||||
C
|
||||
C Case MLJ not equal to zero
|
||||
C
|
||||
DO MLJ=1,LJ
|
||||
INDJ=ILJ+MLJ
|
||||
INDJN=ILJ-MLJ
|
||||
JJ1=JJ0+INDJ
|
||||
JJ1N=JJ0+INDJN
|
||||
MA=MLN-MLJ
|
||||
MB=MLN+MLJ
|
||||
IF(LJ.GE.LN) THEN
|
||||
IC_L=-IC_REF
|
||||
ELSE
|
||||
IC_L=-ONEC/IC_REF
|
||||
ENDIF
|
||||
C
|
||||
SUM_L_A=ZEROC
|
||||
SUM_L2_A=ZEROC
|
||||
SUM_L_B=ZEROC
|
||||
SUM_L2_B=ZEROC
|
||||
C
|
||||
DO L=L_MIN,L_MAX,2
|
||||
IC_L=-IC_L
|
||||
IF(ABS(MA).LE.L) THEN
|
||||
TEMP1=IC_L*HL1(L)*GNT(L,INDJ,INDN)
|
||||
SUM_L_A=SUM_L_A+YLM(L,MA)*TEMP1
|
||||
SUM_L2_A=SUM_L2_A+DCONJG(YLM(L,MA))*TEMP1
|
||||
ENDIF
|
||||
IF(ABS(MB).LE.L) THEN
|
||||
TEMP2=IC_L*HL1(L)*GNT(L,INDJN,INDN)
|
||||
SUM_L_B=SUM_L_B+YLM(L,MB)*TEMP2
|
||||
SUM_L2_B=SUM_L2_B+DCONJG(YLM(L,MB))*TEMP2
|
||||
ENDIF
|
||||
ENDDO
|
||||
C
|
||||
IF(ONE_L.EQ.-1) THEN
|
||||
SUM_L2_A=-SUM_L2_A
|
||||
SUM_L2_B=-SUM_L2_B
|
||||
ENDIF
|
||||
A(JJ1,II)=ATTL(LJ,J)*SUM_L_A
|
||||
A(II,JJ1)=ATTJN*ATTL(LN,N)*SUM_L2_A
|
||||
A(JJ1N,II)=ATTL(LJ,J)*SUM_L_B
|
||||
A(II,JJ1N)=ATTJN*ATTL(LN,N)*SUM_L2_B
|
||||
ENDDO
|
||||
C
|
||||
C
|
||||
ENDDO
|
||||
JJ=JJ0+INDJ
|
||||
C
|
||||
ENDDO
|
||||
ENDDO
|
||||
C
|
||||
JJ=JJ-INDN
|
||||
C
|
||||
ENDDO
|
||||
C
|
||||
C add B to A
|
||||
C
|
||||
DO I=NM1,NML
|
||||
DO J=NM1,NML
|
||||
IF(J.EQ.I) THEN
|
||||
A(J,I)=ONEC
|
||||
ELSE
|
||||
A(J,I)=ZEROC
|
||||
ENDIF
|
||||
ENDDO
|
||||
ENDDO
|
||||
C
|
||||
C construct AINV
|
||||
C
|
||||
DO I=1,NML
|
||||
DO J=1,NML
|
||||
AINV(J,I)=A(J,I)
|
||||
ENDDO
|
||||
ENDDO
|
||||
C
|
||||
C
|
||||
C matrix inversion(ax=b)
|
||||
C
|
||||
CALL ZGETRF(NML,NML,AINV,NLMM,IPIV,INFO1)
|
||||
IF(INFO1.NE.0) THEN
|
||||
WRITE(6,*) ' ---> INFO1 =',INFO1
|
||||
ELSE
|
||||
C
|
||||
DO I=1,NRHS
|
||||
DO J=1,NML
|
||||
IF(J.EQ.I) THEN
|
||||
IN(J,I)=(1.D0,0.D0)
|
||||
ELSE
|
||||
IN(J,I)=(0.D0,0.D0)
|
||||
ENDIF
|
||||
ENDDO
|
||||
ENDDO
|
||||
C
|
||||
CALL ZGETRS('N',NML,NRHS,AINV,NLMM,IPIV,IN,NLMM,INFO)
|
||||
IF(INFO.NE.0) THEN
|
||||
WRITE(6,*) ' ---> INFO =',INFO
|
||||
ENDIF
|
||||
ENDIF
|
||||
C
|
||||
C sum of tau
|
||||
C
|
||||
KLIN=0
|
||||
DO K=1,N
|
||||
KATL=IGS(K)
|
||||
LMK=NLM(K)
|
||||
INDKM=(LMK+1)*(LMK+1)
|
||||
C
|
||||
DO INDJ=1,NRHS
|
||||
C
|
||||
DO INDK=1,INDKM
|
||||
KLIN=KLIN+1
|
||||
C
|
||||
TAU(INDK,INDJ,KATL)=TAU(INDK,INDJ,KATL)
|
||||
1 +DBLE(QI)*IN(KLIN,INDJ)
|
||||
C
|
||||
ENDDO
|
||||
KLIN=KLIN-INDKM
|
||||
C
|
||||
ENDDO
|
||||
KLIN=KLIN+INDKM
|
||||
C
|
||||
ENDDO
|
||||
C
|
||||
RETURN
|
||||
C
|
||||
END
|
|
@ -0,0 +1,165 @@
|
|||
C
|
||||
C
|
||||
C======================================================================
|
||||
C
|
||||
SUBROUTINE MS_COR(JE,TAU)
|
||||
C
|
||||
C
|
||||
C This subroutine calculates the scattering path operator by
|
||||
C the correlation expansion method.
|
||||
C
|
||||
C The scattering path operator matrix of each small atom group
|
||||
C is obtained by using LU decomposition method.
|
||||
C
|
||||
C The running time of matrix inversion subroutine used in this program
|
||||
C scales with N^3, the memory occupied scales with N^2. We advise user to
|
||||
C use full MS method to get the scattering path operator, i.e. directly
|
||||
C with matrix inversion method if NGR is larger than 3. If NGR is less
|
||||
C than 4 (i.e <=3) this subroutine will gain time.
|
||||
C
|
||||
C This subroutine never gain memory comparing to the subrourine INV_MAT_MS
|
||||
C as I use three large matrices stored in common, each matrix is larger or
|
||||
C as large as the matrix used in INV_MAT_MS.
|
||||
C
|
||||
C As I don't find a good way to solve the group problem, where all the contribution
|
||||
C of group IGR<=NGR are collected and each small contribution has to be stored
|
||||
C for the further larger-atom-group contribution, it's better that users change the
|
||||
C parameter NGR_M which is set in included file 'spec.inc' to be NGR or NGR+1
|
||||
C where NGR is the cut-off.user insterested. this subrouitne works for NGR is less
|
||||
C than 6(<=5), if users want to calculate larger NGR, they should modify the code here
|
||||
C to make them workable, the code is marked by 'C' in each lines (about 300 lines
|
||||
C below here), users just release them until to the desired cut-off, the maximum is
|
||||
C 9, however, users can enlarge it if they want to. Warning ! NGR_M set in
|
||||
C included file should be larger than NGR and the figure listed below, don't forget
|
||||
C to compile the code after modification.
|
||||
C
|
||||
C Users can modify the code to make it less memory-occupied, however, no matter they
|
||||
C do, the memories that used are more than full MS method used, so the only advantage
|
||||
C that this code has is to gain time when NGR<=3, with command 'common' used here,
|
||||
C the code will run faster.
|
||||
C
|
||||
C H.-F. Zhao : 2007
|
||||
C
|
||||
C (Photoelectron case)
|
||||
C
|
||||
C Last modified : 31 Jan 2008
|
||||
C
|
||||
C
|
||||
C
|
||||
USE DIM_MOD
|
||||
USE COOR_MOD
|
||||
USE INIT_L_MOD
|
||||
USE TRANS_MOD
|
||||
USE APPROX_MOD
|
||||
USE CORREXP_MOD
|
||||
USE Q_ARRAY_MOD
|
||||
C
|
||||
COMPLEX*16 TAU1(LINMAX,LINFMAX,NATCLU_M),ONEC,ZEROC
|
||||
C
|
||||
INTEGER NLM(NGR_M),ITYP(NGR_M),IGS(NGR_M)
|
||||
C
|
||||
COMPLEX TAU(LINMAX,LINFMAX,NATCLU_M),TLJ
|
||||
C
|
||||
C
|
||||
ONEC=(1.D0,0.D0)
|
||||
ZEROC=(0.D0,0.D0)
|
||||
C
|
||||
LM0=LMAX(1,JE)
|
||||
LM0=MIN(LM0,LF2)
|
||||
NRHS=(LM0+1)*(LM0+1)
|
||||
C
|
||||
NGR_MAX=NGR_M
|
||||
NGR=NDIF
|
||||
C
|
||||
IF(NGR_M.GT.NATCLU) THEN
|
||||
WRITE(6,*) ' ---> NGR_M should be smaller than NATCLU'
|
||||
WRITE(6,*) ' ---> it is reduced to NATCLU=',NATCLU
|
||||
NGR_MAX=NATCLU
|
||||
ENDIF
|
||||
C
|
||||
IF(NGR.LT.1) THEN
|
||||
WRITE(6,*) ' ---> NGR < 1, no expansion is done'
|
||||
STOP
|
||||
ELSE
|
||||
IF(NGR.GT.NGR_MAX) THEN
|
||||
WRITE(6,*) ' ---> NGR is too large, reduce to NGR_M=',
|
||||
& NGR_MAX
|
||||
NGR=NGR_MAX
|
||||
ENDIF
|
||||
ENDIF
|
||||
C
|
||||
C Case NGR = 1
|
||||
C
|
||||
IF(NGR.EQ.1) THEN
|
||||
DO LJ=0,LM0
|
||||
ILJ=LJ*LJ+LJ+1
|
||||
TLJ=TL(LJ,1,1,JE)
|
||||
DO MJ=-LJ,LJ
|
||||
INDJ=ILJ+MJ
|
||||
TAU(INDJ,INDJ,1)=TLJ
|
||||
ENDDO
|
||||
ENDDO
|
||||
C
|
||||
GOTO 100
|
||||
ENDIF
|
||||
C
|
||||
C NGR >=2 case
|
||||
C
|
||||
C
|
||||
DO INDJ=1,NRHS
|
||||
TAU1(INDJ,INDJ,1)=DBLE(Q(1))*ONEC
|
||||
ENDDO
|
||||
C
|
||||
C Constructs the group matrix and inverses it
|
||||
C
|
||||
IGR=1
|
||||
LMJ=LMAX(1,JE)
|
||||
NLM(IGR)=LMJ
|
||||
INDJM=(LMJ+1)*(LMJ+1)
|
||||
ITYP(IGR)=1
|
||||
IGS(IGR)=1
|
||||
C
|
||||
DO I=1,INDJM
|
||||
DO J=1,INDJM
|
||||
IF (J.EQ.I) THEN
|
||||
A(J,I)=ONEC
|
||||
ELSE
|
||||
A(J,I)=ZEROC
|
||||
ENDIF
|
||||
ENDDO
|
||||
ENDDO
|
||||
C
|
||||
IGR=IGR+1
|
||||
CALL COREXP_SAVM(JE,IGR,NGR,NLM,ITYP,IGS,TAU1)
|
||||
IGR=IGR-1
|
||||
C
|
||||
C TAU=TAU*tj
|
||||
C
|
||||
DO KTYP=1,N_PROT
|
||||
NBTYPK=NATYP(KTYP)
|
||||
LMK=LMAX(KTYP,JE)
|
||||
INDKM=(LMK+1)*(LMK+1)
|
||||
DO KNUM=1,NBTYPK
|
||||
KATL=NCORR(KNUM,KTYP)
|
||||
C
|
||||
DO LJ=0,LM0
|
||||
ILJ=LJ*LJ+LJ+1
|
||||
TLJ=TL(LJ,1,1,JE)
|
||||
DO MJ=-LJ,LJ
|
||||
INDJ=ILJ+MJ
|
||||
C
|
||||
DO INDK=1,INDKM
|
||||
TAU(INDK,INDJ,KATL)=CMPLX(TAU1(INDK,INDJ,KATL))*TLJ
|
||||
ENDDO
|
||||
C
|
||||
ENDDO
|
||||
ENDDO
|
||||
C
|
||||
ENDDO
|
||||
ENDDO
|
||||
C
|
||||
100 CONTINUE
|
||||
C
|
||||
RETURN
|
||||
C
|
||||
END
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,106 @@
|
|||
C
|
||||
C=======================================================================
|
||||
C
|
||||
SUBROUTINE PLOTFD(A,LMX,ITL,NL,NAT,NE)
|
||||
C
|
||||
C This routine prepares the output for a plot of the scattering factor
|
||||
C
|
||||
USE DIM_MOD
|
||||
C
|
||||
USE APPROX_MOD
|
||||
USE FDIF_MOD
|
||||
USE INIT_L_MOD , L => LI, I2 => INITL, I3 => NNL, I4 => LF1, I5 =>
|
||||
& LF2, I10 => ISTEP_LF
|
||||
USE INIT_J_MOD
|
||||
USE OUTFILES_MOD
|
||||
USE OUTUNITS_MOD
|
||||
USE PARCAL_MOD , N3 => NPHI, N4 => NE, N5 => NTHETA, N6 => NEPS
|
||||
USE TYPCAL_MOD , I7 => IFTHET, I8 => IMOD, I9 => IPOL, I12 => I_CP
|
||||
&, I13 => I_EXT, I14 => I_TEST
|
||||
USE VALIN_MOD , U1 => THLUM, U2 => PHILUM, U3 => ELUM, N7 => NONVO
|
||||
&L
|
||||
USE VALFIN_MOD
|
||||
C
|
||||
C
|
||||
C
|
||||
DIMENSION LMX(NATM,NE_M)
|
||||
C
|
||||
COMPLEX FSPH,VKE
|
||||
C
|
||||
C
|
||||
C
|
||||
DATA PI,CONV/3.141593,0.512314/
|
||||
C
|
||||
OPEN(UNIT=IUO3, FILE=OUTFILE3, STATUS='UNKNOWN')
|
||||
IF(ISPHER.EQ.0) THEN
|
||||
L=0
|
||||
LMAX=0
|
||||
ELSE
|
||||
LMAX=L
|
||||
ENDIF
|
||||
PHITOT=360.
|
||||
THTOT=360.*ITHETA*(1-IPHI)+180.*ITHETA*IPHI
|
||||
NPHI=(NFTHET+1)*IPHI+(1-IPHI)
|
||||
NTHT=(NFTHET+1)*ITHETA*(1-IPHI)+(NFTHET/2+1)*ITHETA*IPHI+
|
||||
* (1-ITHETA)
|
||||
NE=NFTHET*IE + (1-IE)
|
||||
WRITE(IUO3,1) ISPHER,NL,NAT,L,NTHT,NPHI,NE,E0,EFIN
|
||||
DO 10 JT=1,NTHT
|
||||
DTHETA=THETA1+FLOAT(JT-1)*THTOT/FLOAT(MAX0(NTHT-1,1))
|
||||
RTHETA=DTHETA*PI/180.
|
||||
TEST=SIN(RTHETA)
|
||||
IF(TEST.GE.0.) THEN
|
||||
POZ=PI
|
||||
EPS=1.
|
||||
ELSE
|
||||
POZ=0.
|
||||
EPS=-1.
|
||||
ENDIF
|
||||
BETA=RTHETA*EPS
|
||||
IF(ABS(TEST).LT.0.0001) THEN
|
||||
NPHIM=1
|
||||
ELSE
|
||||
NPHIM=NPHI
|
||||
ENDIF
|
||||
DO 20 JP=1,NPHIM
|
||||
DPHI=PHI1+FLOAT(JP-1)*PHITOT/FLOAT(MAX0(NPHI-1,1))
|
||||
RPHI=DPHI*PI/180.
|
||||
GAMMA=POZ-RPHI
|
||||
DO 30 JE=1,NE
|
||||
IF(NE.EQ.1) THEN
|
||||
ECIN=E0
|
||||
ELSE
|
||||
ECIN=E0+FLOAT(JE-1)*(EFIN-E0)/FLOAT(NE-1)
|
||||
ENDIF
|
||||
IF(ITL.EQ.0) VKE=SQRT(ECIN-ABS(VINT))*CONV*A*(1.,0.)
|
||||
DO 40 JAT=1,NAT
|
||||
IF(L.GT.LMX(JAT,JE)) GOTO 90
|
||||
DO 50 M=-LMAX,LMAX
|
||||
CALL FACDIF1(VKE,R1,R2,THETA0,PHI0,BETA,GAMMA,L,M,FSPH,J
|
||||
&AT,JE,*60)
|
||||
GOTO 70
|
||||
60 WRITE(IUO1,80)
|
||||
STOP
|
||||
70 REFTH=REAL(FSPH)
|
||||
XIMFTH=AIMAG(FSPH)
|
||||
WRITE(IUO3,5) JE,JAT,L,M,REFTH,XIMFTH,DTHETA,DPHI,ECIN
|
||||
50 CONTINUE
|
||||
GOTO 40
|
||||
90 WRITE(IUO1,100) JAT
|
||||
STOP
|
||||
40 CONTINUE
|
||||
30 CONTINUE
|
||||
20 CONTINUE
|
||||
10 CONTINUE
|
||||
CLOSE(IUO3)
|
||||
1 FORMAT(5X,I1,2X,I2,2X,I4,2X,I2,2X,I3,2X,I3,2X,I3,2X,F8.2,2X,F8.2)
|
||||
5 FORMAT(1X,I3,1X,I4,1X,I2,1X,I3,1X,F6.3,1X,F6.3,1X,F6.2,1X,F6.2,1X,
|
||||
&F8.2)
|
||||
80 FORMAT(15X,'<<<<< WRONG VALUE OF THETA0 : THE DENOMINATOR ','IS Z
|
||||
&ERO >>>>>')
|
||||
100 FORMAT(15X,'<<<<< THE VALUE OF L EST IS TOO LARGE FOR ATOM',' : '
|
||||
&,I2,' >>>>>')
|
||||
C
|
||||
RETURN
|
||||
C
|
||||
END
|
|
@ -0,0 +1,769 @@
|
|||
C
|
||||
C=======================================================================
|
||||
C
|
||||
SUBROUTINE TREAT_PHD(ISOM,NFICHLEC,JFICH,NP)
|
||||
C
|
||||
C This routine sums up the calculations corresponding to different
|
||||
C absorbers or different planes when this has to be done
|
||||
C (parameter ISOM in the input data file).
|
||||
C
|
||||
C Last modified : 24 Jan 2013
|
||||
C
|
||||
USE DIM_MOD
|
||||
USE OUTUNITS_MOD
|
||||
USE TYPEXP_MOD , DUMMY => SPECTRO
|
||||
USE VALIN_MOD
|
||||
USE VALFIN_MOD
|
||||
C
|
||||
PARAMETER(N_HEAD=5000,N_FILES=1000)
|
||||
C
|
||||
CHARACTER*3 SPECTRO
|
||||
C
|
||||
CHARACTER*13 OUTDATA
|
||||
CHARACTER*72 HEAD(N_HEAD,N_FILES)
|
||||
C
|
||||
REAL TAB(NDIM_M,4)
|
||||
REAL ECIN(NE_M),DTHETA(NTH_M),DPHI(NPH_M)
|
||||
C
|
||||
C
|
||||
DATA JVOL,JTOT/0,-1/
|
||||
C
|
||||
REWIND IUO2
|
||||
C
|
||||
C Reading and storing the headers:
|
||||
C
|
||||
NHEAD=0
|
||||
DO JLINE=1,N_HEAD
|
||||
READ(IUO2,888) HEAD(JLINE,JFICH)
|
||||
NHEAD=NHEAD+1
|
||||
IF(HEAD(JLINE,JFICH)(1:6).EQ.' ') GOTO 333
|
||||
ENDDO
|
||||
C
|
||||
333 CONTINUE
|
||||
C
|
||||
READ(IUO2,15) SPECTRO,OUTDATA
|
||||
READ(IUO2,9) ISPIN,IDICHR,I_SO,ISFLIP,ICHKDIR,IPHI,ITHETA,IE,IPH_1
|
||||
&,I_EXT
|
||||
C
|
||||
IF(I_EXT.EQ.2) THEN
|
||||
IPH_1=0
|
||||
ENDIF
|
||||
C
|
||||
IF(ISOM.EQ.0) THEN
|
||||
C
|
||||
C........ ISOM = 0 : case of independent input files .................
|
||||
C
|
||||
READ(IUO2,1) NPLAN,NEMET,NTHETA,NPHI,NE
|
||||
C
|
||||
IF(IPH_1.EQ.1) THEN
|
||||
N_FIXED=NPHI
|
||||
FIX0=PHI0
|
||||
FIX1=PHI1
|
||||
N_SCAN=NTHETA
|
||||
ELSE
|
||||
N_FIXED=NTHETA
|
||||
FIX0=THETA0
|
||||
FIX1=THETA1
|
||||
IF(STEREO.EQ.'YES') THEN
|
||||
NPHI=INT((PHI1-PHI0)*FLOAT(NTHETA-1)/(THETA1-THETA0)+0.0001)
|
||||
&+1
|
||||
IF(NTHETA*NPHI.GT.NPH_M) GOTO 37
|
||||
ENDIF
|
||||
N_SCAN=NPHI
|
||||
ENDIF
|
||||
C
|
||||
IF(I_EXT.EQ.-1) THEN
|
||||
N_SCAN=2*N_SCAN
|
||||
ENDIF
|
||||
C
|
||||
IF((I_EXT.EQ.0).OR.(I_EXT.EQ.1)) THEN
|
||||
NDP=NEMET*NTHETA*NPHI*NE
|
||||
ELSEIF(I_EXT.EQ.-1) THEN
|
||||
NDP=NEMET*NTHETA*NPHI*NE*2
|
||||
ELSEIF(I_EXT.EQ.2) THEN
|
||||
NDP=NEMET*NTHETA*NE
|
||||
N_FIXED=NTHETA
|
||||
N_SCAN=NPHI
|
||||
IF((N_FIXED.GT.NTH_M).OR.(N_FIXED.GT.NPH_M)) GOTO 35
|
||||
ENDIF
|
||||
C
|
||||
NTT=NPLAN*NDP
|
||||
IF(NTT.GT.NDIM_M) GOTO 5
|
||||
C
|
||||
DO JPLAN=1,NPLAN
|
||||
DO JEMET=1,NEMET
|
||||
DO JE=1,NE
|
||||
C
|
||||
DO J_FIXED=1,N_FIXED
|
||||
IF(N_FIXED.GT.1) THEN
|
||||
XINCRF=FLOAT(J_FIXED-1)*(FIX1-FIX0)/FLOAT(N_FIXED-1)
|
||||
ELSEIF(N_FIXED.EQ.1) THEN
|
||||
XINCRF=0.
|
||||
ENDIF
|
||||
IF(IPH_1.EQ.1) THEN
|
||||
JPHI=J_FIXED
|
||||
ELSE
|
||||
THETA=THETA0+XINCRF
|
||||
JTHETA=J_FIXED
|
||||
IF((ABS(THETA).GT.90.).AND.(I_EXT.NE.2)) GOTO 11
|
||||
ENDIF
|
||||
IF(STEREO.EQ.' NO') THEN
|
||||
N_SCAN_R=N_SCAN
|
||||
ELSE
|
||||
RTHETA=THETA*0.017453
|
||||
FIX_STEP=(FIX1-FIX0)/FLOAT(N_FIXED-1)
|
||||
N_SCAN_R=INT((PHI1-PHI0)*SIN(RTHETA)/FIX_STEP+0.0001)+1
|
||||
ENDIF
|
||||
C
|
||||
DO J_SCAN=1,N_SCAN_R
|
||||
IF(IPH_1.EQ.1) THEN
|
||||
JTHETA=J_SCAN
|
||||
ELSE
|
||||
JPHI=J_SCAN
|
||||
ENDIF
|
||||
C
|
||||
JLIN=(JPLAN-1)*NDP + (JEMET-1)*NE*N_FIXED*N_SCAN + (JE-1)*N
|
||||
&_FIXED*N_SCAN +(JTHETA-1)*NPHI + JPHI
|
||||
C
|
||||
IF(I_EXT.LE.0) THEN
|
||||
IF(STEREO.EQ.' NO') THEN
|
||||
JPHI2=JPHI
|
||||
ELSE
|
||||
JPHI2=(JTHETA-1)*NPHI+JPHI
|
||||
ENDIF
|
||||
ELSE
|
||||
JPHI2=JTHETA
|
||||
ENDIF
|
||||
C
|
||||
READ(IUO2,2) JPL
|
||||
IF(JPLAN.EQ.JPL) THEN
|
||||
BACKSPACE IUO2
|
||||
IF(IDICHR.EQ.0) THEN
|
||||
READ(IUO2,2) JPL,JEM,DTHETA(JTHETA),DPHI(JPHI2),ECIN(JE
|
||||
&),TAB(JLIN,1),TAB(JLIN,2)
|
||||
IF(I_EXT.EQ.-1) THEN
|
||||
JLIN2=NTT+JLIN
|
||||
READ(IUO2,25) TAB(JLIN2,1),TAB(JLIN2,2)
|
||||
ENDIF
|
||||
ELSE
|
||||
READ(IUO2,22) JPL,JEM,DTHETA(JTHETA),DPHI(JPHI2),ECIN(J
|
||||
&E),TAB(JLIN,1),TAB(JLIN,2),TAB(JLIN,3),TAB(JLIN,4)
|
||||
IF(I_EXT.EQ.-1) THEN
|
||||
JLIN2=NTT+JLIN
|
||||
READ(IUO2,22) JPL,JEM,DTHETA(JTHETA),DPHI(JPHI2),ECIN
|
||||
&(JE),TAB(JLIN2,1),TAB(JLIN2,2),TAB(JLIN2,3),TAB(JLIN2,4)
|
||||
ENDIF
|
||||
ENDIF
|
||||
ELSE
|
||||
BACKSPACE IUO2
|
||||
DO JL=JLIN,JPLAN*NDP
|
||||
TAB(JL,1)=0.0
|
||||
TAB(JL,2)=0.0
|
||||
TAB(JL,3)=0.0
|
||||
TAB(JL,4)=0.0
|
||||
ENDDO
|
||||
GOTO 10
|
||||
ENDIF
|
||||
ENDDO
|
||||
ENDDO
|
||||
11 CONTINUE
|
||||
ENDDO
|
||||
ENDDO
|
||||
10 CONTINUE
|
||||
ENDDO
|
||||
C
|
||||
REWIND IUO2
|
||||
C
|
||||
C Skipping the NHEAD lines of headers before rewriting:
|
||||
C
|
||||
DO JLINE=1,NHEAD
|
||||
READ(IUO2,888) HEAD(JLINE,JFICH)
|
||||
ENDDO
|
||||
C
|
||||
WRITE(IUO2,15) SPECTRO,OUTDATA
|
||||
WRITE(IUO2,9) ISPIN,IDICHR,I_SO,ISFLIP,ICHKDIR,IPHI,ITHETA,IE
|
||||
WRITE(IUO2,8) NPHI,NTHETA,NE,NPLAN,ISOM
|
||||
C
|
||||
DO JE=1,NE
|
||||
DO JTHETA=1,NTHETA
|
||||
IF(STEREO.EQ.' NO') THEN
|
||||
NPHI_R=NPHI
|
||||
ELSE
|
||||
RTHETA=DTHETA(JTHETA)*0.017453
|
||||
FIX_STEP=(THETA1-THETA0)/FLOAT(NTHETA-1)
|
||||
NPHI_R=INT((PHI1-PHI0)*SIN(RTHETA)/FIX_STEP+0.0001)+1
|
||||
NPHI=INT((PHI1-PHI0)/FIX_STEP+0.0001)+1
|
||||
ENDIF
|
||||
DO JPHI=1,NPHI_R
|
||||
TOTDIF_1=0.
|
||||
TOTDIR_1=0.
|
||||
VOLDIF_1=0.
|
||||
VOLDIR_1=0.
|
||||
TOTDIF_2=0.
|
||||
TOTDIR_2=0.
|
||||
VOLDIF_2=0.
|
||||
VOLDIR_2=0.
|
||||
IF(I_EXT.EQ.-1) THEN
|
||||
TOTDIF2_1=0.
|
||||
TOTDIR2_1=0.
|
||||
VOLDIF2_1=0.
|
||||
VOLDIR2_1=0.
|
||||
TOTDIF2_2=0.
|
||||
TOTDIR2_2=0.
|
||||
VOLDIF2_2=0.
|
||||
VOLDIR2_2=0.
|
||||
ENDIF
|
||||
C
|
||||
DO JPLAN=1,NPLAN
|
||||
C
|
||||
SF_1=0.
|
||||
SR_1=0.
|
||||
SF_2=0.
|
||||
SR_2=0.
|
||||
IF(I_EXT.EQ.-1) THEN
|
||||
SF2_1=0.
|
||||
SR2_1=0.
|
||||
SF2_2=0.
|
||||
SR2_2=0.
|
||||
ENDIF
|
||||
C
|
||||
DO JEMET=1,NEMET
|
||||
JLIN=(JPLAN-1)*NDP + (JEMET-1)*NE*NTHETA*NPHI + (JE-1)*NTHE
|
||||
&TA*NPHI +(JTHETA-1)*NPHI + JPHI
|
||||
SF_1=SF_1+TAB(JLIN,2)
|
||||
SR_1=SR_1+TAB(JLIN,1)
|
||||
IF(I_EXT.EQ.-1) THEN
|
||||
JLIN2=NTT+JLIN
|
||||
SF2_1=SF2_1+TAB(JLIN2,2)
|
||||
SR2_1=SR2_1+TAB(JLIN2,1)
|
||||
ENDIF
|
||||
IF(IDICHR.GE.1) THEN
|
||||
SF_2=SF_2+TAB(JLIN,4)
|
||||
SR_2=SR_2+TAB(JLIN,3)
|
||||
IF(I_EXT.EQ.-1) THEN
|
||||
JLIN2=NTT+JLIN
|
||||
SF2_2=SF2_2+TAB(JLIN2,4)
|
||||
SR2_2=SR2_2+TAB(JLIN2,3)
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDDO
|
||||
IF(I_EXT.LE.0) THEN
|
||||
IF(STEREO.EQ.' NO') THEN
|
||||
JPHI2=JPHI
|
||||
ELSE
|
||||
JPHI2=(JTHETA-1)*NPHI+JPHI
|
||||
ENDIF
|
||||
ELSE
|
||||
JPHI2=JTHETA
|
||||
ENDIF
|
||||
IF(IDICHR.EQ.0) THEN
|
||||
WRITE(IUO2,3) JPLAN,DTHETA(JTHETA),DPHI(JPHI2),ECIN(JE),SR
|
||||
&_1,SF_1
|
||||
IF(I_EXT.EQ.-1) THEN
|
||||
WRITE(IUO2,3) JPLAN,DTHETA(JTHETA),DPHI(JPHI2),ECIN(JE),
|
||||
&SR2_1,SF2_1
|
||||
ENDIF
|
||||
ELSE
|
||||
WRITE(IUO2,23) JPLAN,DTHETA(JTHETA),DPHI(JPHI2),ECIN(JE),S
|
||||
&R_1,SF_1,SR_2,SF_2
|
||||
IF(I_EXT.EQ.-1) THEN
|
||||
WRITE(IUO2,23) JPLAN,DTHETA(JTHETA),DPHI(JPHI2),ECIN(JE)
|
||||
&,SR2_1,SF2_1,SR2_2,SF2_2
|
||||
ENDIF
|
||||
ENDIF
|
||||
IF(JPLAN.GT.NONVOL(JFICH)) THEN
|
||||
VOLDIF_1=VOLDIF_1+SF_1
|
||||
VOLDIR_1=VOLDIR_1+SR_1
|
||||
IF(I_EXT.EQ.-1) THEN
|
||||
VOLDIF2_1=VOLDIF2_1+SF2_1
|
||||
VOLDIR2_1=VOLDIR2_1+SR2_1
|
||||
ENDIF
|
||||
IF(IDICHR.GE.1) THEN
|
||||
VOLDIF_2=VOLDIF_2+SF_2
|
||||
VOLDIR_2=VOLDIR_1+SR_2
|
||||
IF(I_EXT.EQ.-1) THEN
|
||||
VOLDIF2_2=VOLDIF2_2+SF2_2
|
||||
VOLDIR2_2=VOLDIR2_1+SR2_2
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDIF
|
||||
TOTDIF_1=TOTDIF_1+SF_1
|
||||
TOTDIR_1=TOTDIR_1+SR_1
|
||||
IF(I_EXT.EQ.-1) THEN
|
||||
TOTDIF2_1=TOTDIF2_1+SF2_1
|
||||
TOTDIR2_1=TOTDIR2_1+SR2_1
|
||||
ENDIF
|
||||
IF(IDICHR.GE.1) THEN
|
||||
TOTDIF_2=TOTDIF_2+SF_2
|
||||
TOTDIR_2=TOTDIR_2+SR_2
|
||||
IF(I_EXT.EQ.-1) THEN
|
||||
TOTDIF2_2=TOTDIF2_2+SF2_2
|
||||
TOTDIR2_2=TOTDIR2_2+SR2_2
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDDO
|
||||
IF(IDICHR.EQ.0) THEN
|
||||
WRITE(IUO2,3) JVOL,DTHETA(JTHETA),DPHI(JPHI2),ECIN(JE),VOLD
|
||||
&IR_1,VOLDIF_1
|
||||
IF(I_EXT.EQ.-1) THEN
|
||||
WRITE(IUO2,3) JVOL,DTHETA(JTHETA),DPHI(JPHI2),ECIN(JE),VO
|
||||
&LDIR2_1,VOLDIF2_1
|
||||
ENDIF
|
||||
WRITE(IUO2,3) JTOT,DTHETA(JTHETA),DPHI(JPHI2),ECIN(JE),TOTD
|
||||
&IR_1,TOTDIF_1
|
||||
IF(I_EXT.EQ.-1) THEN
|
||||
WRITE(IUO2,3) JTOT,DTHETA(JTHETA),DPHI(JPHI2),ECIN(JE),TO
|
||||
&TDIR2_1,TOTDIF2_1
|
||||
ENDIF
|
||||
ELSE
|
||||
WRITE(IUO2,23) JVOL,DTHETA(JTHETA),DPHI(JPHI2),ECIN(JE),VOL
|
||||
&DIR_1,VOLDIF_1,VOLDIR_2,VOLDIF_2
|
||||
IF(I_EXT.EQ.-1) THEN
|
||||
WRITE(IUO2,23) JVOL,DTHETA(JTHETA),DPHI(JPHI2),ECIN(JE),V
|
||||
&OLDIR2_1,VOLDIF2_1,VOLDIR2_2,VOLDIF2_2
|
||||
ENDIF
|
||||
WRITE(IUO2,23) JTOT,DTHETA(JTHETA),DPHI(JPHI2),ECIN(JE),TOT
|
||||
&DIR_1,TOTDIF_1,TOTDIR_2,TOTDIF_2
|
||||
IF(I_EXT.EQ.-1) THEN
|
||||
WRITE(IUO2,23) JTOT,DTHETA(JTHETA),DPHI(JPHI2),ECIN(JE),T
|
||||
&OTDIR2_1,TOTDIF2_1,TOTDIR2_2,TOTDIF2_2
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDDO
|
||||
ENDDO
|
||||
ENDDO
|
||||
C
|
||||
ELSE
|
||||
C
|
||||
C........ ISOM not= 0 : multiple input files to be summed up ..........
|
||||
C
|
||||
READ(IUO2,7) NTHETA,NPHI,NE
|
||||
C
|
||||
IF(IPH_1.EQ.1) THEN
|
||||
N_FIXED=NPHI
|
||||
FIX0=PHI0
|
||||
FIX1=PHI1
|
||||
N_SCAN=NTHETA
|
||||
ELSE
|
||||
N_FIXED=NTHETA
|
||||
FIX0=THETA0
|
||||
FIX1=THETA1
|
||||
IF(STEREO.EQ.'YES') THEN
|
||||
NPHI=INT((PHI1-PHI0)*FLOAT(NTHETA-1)/(THETA1-THETA0)+0.0001)
|
||||
&+1
|
||||
IF(NTHETA*NPHI.GT.NPH_M) GOTO 37
|
||||
ENDIF
|
||||
N_SCAN=NPHI
|
||||
ENDIF
|
||||
C
|
||||
IF(I_EXT.EQ.-1) THEN
|
||||
N_SCAN=2*N_SCAN
|
||||
ENDIF
|
||||
C
|
||||
IF((I_EXT.EQ.0).OR.(I_EXT.EQ.1)) THEN
|
||||
NDP=NTHETA*NPHI*NE
|
||||
ELSEIF(I_EXT.EQ.-1) THEN
|
||||
NDP=NTHETA*NPHI*NE*2
|
||||
ELSEIF(I_EXT.EQ.2) THEN
|
||||
NDP=NTHETA*NE
|
||||
N_FIXED=NTHETA
|
||||
N_SCAN=NPHI
|
||||
IF((N_FIXED.GT.NTH_M).OR.(N_FIXED.GT.NPH_M)) GOTO 35
|
||||
ENDIF
|
||||
C
|
||||
NTT=NFICHLEC*NDP
|
||||
IF(NTT.GT.NDIM_M) GOTO 5
|
||||
C
|
||||
IF(ISOM.EQ.1) THEN
|
||||
NPLAN=NP
|
||||
NF=NP
|
||||
ELSEIF(ISOM.EQ.2) THEN
|
||||
NEMET=NFICHLEC
|
||||
NF=NFICHLEC
|
||||
NPLAN=1
|
||||
ENDIF
|
||||
C
|
||||
DO JF=1,NF
|
||||
C
|
||||
C Reading the headers for each file:
|
||||
C
|
||||
IF(JF.GT.1) THEN
|
||||
DO JLINE=1,NHEAD
|
||||
READ(IUO2,888) HEAD(JLINE,JF)
|
||||
ENDDO
|
||||
ENDIF
|
||||
C
|
||||
DO JE=1,NE
|
||||
C
|
||||
DO J_FIXED=1,N_FIXED
|
||||
IF(N_FIXED.GT.1) THEN
|
||||
XINCRF=FLOAT(J_FIXED-1)*(FIX1-FIX0)/FLOAT(N_FIXED-1)
|
||||
ELSEIF(N_FIXED.EQ.1) THEN
|
||||
XINCRF=0.
|
||||
ENDIF
|
||||
IF(IPH_1.EQ.1) THEN
|
||||
JPHI=J_FIXED
|
||||
ELSE
|
||||
THETA=THETA0+XINCRF
|
||||
JTHETA=J_FIXED
|
||||
IF((ABS(THETA).GT.90.).AND.(I_EXT.NE.2)) GOTO 12
|
||||
ENDIF
|
||||
IF(STEREO.EQ.' NO') THEN
|
||||
N_SCAN_R=N_SCAN
|
||||
ELSE
|
||||
RTHETA=THETA*0.017453
|
||||
FIX_STEP=(FIX1-FIX0)/FLOAT(N_FIXED-1)
|
||||
N_SCAN_R=INT((PHI1-PHI0)*SIN(RTHETA)/FIX_STEP+0.0001)+1
|
||||
ENDIF
|
||||
C
|
||||
DO J_SCAN=1,N_SCAN_R
|
||||
IF(IPH_1.EQ.1) THEN
|
||||
JTHETA=J_SCAN
|
||||
ELSE
|
||||
JPHI=J_SCAN
|
||||
ENDIF
|
||||
C
|
||||
JLIN=(JF-1)*NDP + (JE-1)*N_FIXED*N_SCAN +(JTHETA-1)*NPHI +
|
||||
&JPHI
|
||||
IF(I_EXT.LE.0) THEN
|
||||
IF(STEREO.EQ.' NO') THEN
|
||||
JPHI2=JPHI
|
||||
ELSE
|
||||
JPHI2=(JTHETA-1)*NPHI+JPHI
|
||||
ENDIF
|
||||
ELSE
|
||||
JPHI2=JTHETA
|
||||
ENDIF
|
||||
C
|
||||
IF(ISOM.EQ.1) THEN
|
||||
READ(IUO2,2) JPL
|
||||
IF(JF.EQ.JPL) THEN
|
||||
BACKSPACE IUO2
|
||||
IF(IDICHR.EQ.0) THEN
|
||||
READ(IUO2,2) JPL,JEM,DTHETA(JTHETA),DPHI(JPHI2),ECIN(
|
||||
&JE),TAB(JLIN,1),TAB(JLIN,2)
|
||||
IF(I_EXT.EQ.-1) THEN
|
||||
JLIN2=NTT+JLIN
|
||||
READ(IUO2,25) TAB(JLIN2,1),TAB(JLIN2,2)
|
||||
ENDIF
|
||||
ELSE
|
||||
READ(IUO2,22) JPL,JEM,DTHETA(JTHETA),DPHI(JPHI2),ECIN
|
||||
&(JE),TAB(JLIN,1),TAB(JLIN,2),TAB(JLIN,3),TAB(JLIN,4)
|
||||
IF(I_EXT.EQ.-1) THEN
|
||||
JLIN2=NTT+JLIN
|
||||
READ(IUO2,22) JPL,JEM,DTHETA(JTHETA),DPHI(JPHI2),EC
|
||||
&IN(JE),TAB(JLIN2,1),TAB(JLIN2,2),TAB(JLIN2,3),TAB(JLIN2,4)
|
||||
ENDIF
|
||||
ENDIF
|
||||
ELSE
|
||||
BACKSPACE IUO2
|
||||
DO JLINE=1,NHEAD
|
||||
BACKSPACE IUO2
|
||||
ENDDO
|
||||
DO JL=JLIN,JF*NDP
|
||||
TAB(JL,1)=0.0
|
||||
TAB(JL,2)=0.0
|
||||
TAB(JL,3)=0.0
|
||||
TAB(JL,4)=0.0
|
||||
ENDDO
|
||||
GOTO 13
|
||||
ENDIF
|
||||
ELSEIF(ISOM.EQ.2) THEN
|
||||
IF(IDICHR.EQ.0) THEN
|
||||
READ(IUO2,2) JPL,JEM,DTHETA(JTHETA),DPHI(JPHI2),ECIN(JE
|
||||
&),TAB(JLIN,1),TAB(JLIN,2)
|
||||
IF(I_EXT.EQ.-1) THEN
|
||||
JLIN2=NTT+JLIN
|
||||
READ(IUO2,25) TAB(JLIN2,1),TAB(JLIN2,2)
|
||||
ENDIF
|
||||
ELSE
|
||||
READ(IUO2,22) JPL,JEM,DTHETA(JTHETA),DPHI(JPHI2),ECIN(J
|
||||
&E),TAB(JLIN,1),TAB(JLIN,2),TAB(JLIN,3),TAB(JLIN,4)
|
||||
IF(I_EXT.EQ.-1) THEN
|
||||
JLIN2=NTT+JLIN
|
||||
READ(IUO2,22) JPL,JEM,DTHETA(JTHETA),DPHI(JPHI2),ECIN
|
||||
&(JE),TAB(JLIN2,1),TAB(JLIN2,2),TAB(JLIN2,3),TAB(JLIN2,4)
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDDO
|
||||
12 CONTINUE
|
||||
ENDDO
|
||||
ENDDO
|
||||
13 CONTINUE
|
||||
ENDDO
|
||||
C
|
||||
REWIND IUO2
|
||||
C
|
||||
C Writing the headers:
|
||||
C
|
||||
DO JLINE=1,2
|
||||
WRITE(IUO2,888) HEAD(JLINE,1)
|
||||
ENDDO
|
||||
DO JF=1,NFICHLEC
|
||||
DO JLINE=3,6
|
||||
WRITE(IUO2,888) HEAD(JLINE,JF)
|
||||
ENDDO
|
||||
WRITE(IUO2,888) HEAD(2,JF)
|
||||
ENDDO
|
||||
DO JLINE=7,NHEAD
|
||||
WRITE(IUO2,888) HEAD(JLINE,1)
|
||||
ENDDO
|
||||
C
|
||||
WRITE(IUO2,15) SPECTRO,OUTDATA
|
||||
WRITE(IUO2,9) ISPIN,IDICHR,I_SO,ISFLIP,ICHKDIR,IPHI,ITHETA,IE
|
||||
WRITE(IUO2,8) NPHI,NTHETA,NE,NPLAN,ISOM
|
||||
C
|
||||
IF(ISOM.EQ.1) THEN
|
||||
C
|
||||
DO JE=1,NE
|
||||
C
|
||||
DO JTHETA=1,NTHETA
|
||||
IF(STEREO.EQ.' NO') THEN
|
||||
NPHI_R=NPHI
|
||||
ELSE
|
||||
RTHETA=DTHETA(JTHETA)*0.017453
|
||||
FIX_STEP=(THETA1-THETA0)/FLOAT(NTHETA-1)
|
||||
NPHI_R=INT((PHI1-PHI0)*SIN(RTHETA)/FIX_STEP+0.0001)+1
|
||||
NPHI=INT((PHI1-PHI0)/FIX_STEP+0.0001)+1
|
||||
ENDIF
|
||||
DO JPHI=1,NPHI_R
|
||||
C
|
||||
TOTDIF_1=0.
|
||||
TOTDIR_1=0.
|
||||
VOLDIF_1=0.
|
||||
VOLDIR_1=0.
|
||||
TOTDIF_2=0.
|
||||
TOTDIR_2=0.
|
||||
VOLDIF_2=0.
|
||||
VOLDIR_2=0.
|
||||
IF(I_EXT.EQ.-1) THEN
|
||||
TOTDIF2_1=0.
|
||||
TOTDIR2_1=0.
|
||||
VOLDIF2_1=0.
|
||||
VOLDIR2_1=0.
|
||||
TOTDIF2_2=0.
|
||||
TOTDIR2_2=0.
|
||||
VOLDIF2_2=0.
|
||||
VOLDIR2_2=0.
|
||||
ENDIF
|
||||
C
|
||||
DO JPLAN=1,NPLAN
|
||||
JF=JPLAN
|
||||
C
|
||||
JLIN=(JF-1)*NDP + (JE-1)*NTHETA*NPHI +(JTHETA-1)*NPHI + JP
|
||||
&HI
|
||||
C
|
||||
SR_1=TAB(JLIN,1)
|
||||
SF_1=TAB(JLIN,2)
|
||||
IF(I_EXT.EQ.-1) THEN
|
||||
JLIN2=NTT+JLIN
|
||||
SF2_1=TAB(JLIN2,2)
|
||||
SR2_1=TAB(JLIN2,1)
|
||||
ENDIF
|
||||
IF(I_EXT.LE.0) THEN
|
||||
IF(STEREO.EQ.' NO') THEN
|
||||
JPHI2=JPHI
|
||||
ELSE
|
||||
JPHI2=(JTHETA-1)*NPHI+JPHI
|
||||
ENDIF
|
||||
ELSE
|
||||
JPHI2=JTHETA
|
||||
ENDIF
|
||||
IF(IDICHR.EQ.0) THEN
|
||||
WRITE(IUO2,3) JPLAN,DTHETA(JTHETA),DPHI(JPHI2),ECIN(JE),
|
||||
&SR_1,SF_1
|
||||
IF(I_EXT.EQ.-1) THEN
|
||||
WRITE(IUO2,3) JPLAN,DTHETA(JTHETA),DPHI(JPHI2),ECIN(JE
|
||||
&),SR2_1,SF2_1
|
||||
ENDIF
|
||||
ELSE
|
||||
SR_2=TAB(JLIN,3)
|
||||
SF_2=TAB(JLIN,4)
|
||||
IF(I_EXT.EQ.-1) THEN
|
||||
JLIN2=NTT+JLIN
|
||||
SF2_2=TAB(JLIN2,4)
|
||||
SR2_2=TAB(JLIN2,3)
|
||||
ENDIF
|
||||
WRITE(IUO2,23) JPLAN,DTHETA(JTHETA),DPHI(JPHI2),ECIN(JE)
|
||||
&,SR_1,SF_1,SR_2,SF_2
|
||||
IF(I_EXT.EQ.-1) THEN
|
||||
WRITE(IUO2,23) JPLAN,DTHETA(JTHETA),DPHI(JPHI2),ECIN(J
|
||||
&E),SR2_1,SF2_1,SR2_2,SF2_2
|
||||
ENDIF
|
||||
ENDIF
|
||||
IF(NONVOL(JPLAN).EQ.0) THEN
|
||||
VOLDIF_1=VOLDIF_1+SF_1
|
||||
VOLDIR_1=VOLDIR_1+SR_1
|
||||
IF(I_EXT.EQ.-1) THEN
|
||||
VOLDIF2_1=VOLDIF2_1+SF2_1
|
||||
VOLDIR2_1=VOLDIR2_1+SR2_1
|
||||
ENDIF
|
||||
IF(IDICHR.GE.1) THEN
|
||||
VOLDIF_2=VOLDIF_2+SF_2
|
||||
VOLDIR_2=VOLDIR_2+SR_2
|
||||
IF(I_EXT.EQ.-1) THEN
|
||||
VOLDIF2_2=VOLDIF2_2+SF2_2
|
||||
VOLDIR2_2=VOLDIR2_1+SR2_2
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDIF
|
||||
TOTDIF_1=TOTDIF_1+SF_1
|
||||
TOTDIR_1=TOTDIR_1+SR_1
|
||||
IF(I_EXT.EQ.-1) THEN
|
||||
TOTDIF2_1=TOTDIF2_1+SF2_1
|
||||
TOTDIR2_1=TOTDIR2_1+SR2_1
|
||||
ENDIF
|
||||
IF(IDICHR.GE.1) THEN
|
||||
TOTDIF_2=TOTDIF_2+SF_2
|
||||
TOTDIR_2=TOTDIR_2+SR_2
|
||||
IF(I_EXT.EQ.-1) THEN
|
||||
TOTDIF2_2=TOTDIF2_2+SF2_2
|
||||
TOTDIR2_2=TOTDIR2_2+SR2_2
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDDO
|
||||
C
|
||||
IF(IDICHR.EQ.0) THEN
|
||||
WRITE(IUO2,3) JVOL,DTHETA(JTHETA),DPHI(JPHI2),ECIN(JE),VO
|
||||
&LDIR_1,VOLDIF_1
|
||||
IF(I_EXT.EQ.-1) THEN
|
||||
WRITE(IUO2,3) JVOL,DTHETA(JTHETA),DPHI(JPHI2),ECIN(JE),
|
||||
&VOLDIR2_1,VOLDIF2_1
|
||||
ENDIF
|
||||
WRITE(IUO2,3) JTOT,DTHETA(JTHETA),DPHI(JPHI2),ECIN(JE),TO
|
||||
&TDIR_1,TOTDIF_1
|
||||
IF(I_EXT.EQ.-1) THEN
|
||||
WRITE(IUO2,3) JTOT,DTHETA(JTHETA),DPHI(JPHI2),ECIN(JE),
|
||||
&TOTDIR2_1,TOTDIF2_1
|
||||
ENDIF
|
||||
ELSE
|
||||
WRITE(IUO2,23) JVOL,DTHETA(JTHETA),DPHI(JPHI2),ECIN(JE),V
|
||||
&OLDIR_1,VOLDIF_1,VOLDIR_2,VOLDIF_2
|
||||
IF(I_EXT.EQ.-1) THEN
|
||||
WRITE(IUO2,23) JVOL,DTHETA(JTHETA),DPHI(JPHI2),ECIN(JE)
|
||||
&,VOLDIR2_1,VOLDIF2_1,VOLDIR2_2,VOLDIF2_2
|
||||
ENDIF
|
||||
WRITE(IUO2,23) JTOT,DTHETA(JTHETA),DPHI(JPHI2),ECIN(JE),T
|
||||
&OTDIR_1,TOTDIF_1,TOTDIR_2,TOTDIF_2
|
||||
IF(I_EXT.EQ.-1) THEN
|
||||
WRITE(IUO2,23) JTOT,DTHETA(JTHETA),DPHI(JPHI2),ECIN(JE)
|
||||
&,TOTDIR2_1,TOTDIF2_1,TOTDIR2_2,TOTDIF2_2
|
||||
ENDIF
|
||||
ENDIF
|
||||
C
|
||||
ENDDO
|
||||
ENDDO
|
||||
ENDDO
|
||||
ELSEIF(ISOM.EQ.2) THEN
|
||||
DO JE=1,NE
|
||||
C
|
||||
DO JTHETA=1,NTHETA
|
||||
IF(STEREO.EQ.' NO') THEN
|
||||
NPHI_R=NPHI
|
||||
ELSE
|
||||
RTHETA=DTHETA(JTHETA)*0.017453
|
||||
FIX_STEP=(THETA1-THETA0)/FLOAT(NTHETA-1)
|
||||
NPHI_R=INT((PHI1-PHI0)*SIN(RTHETA)/FIX_STEP+0.0001)+1
|
||||
NPHI=INT((PHI1-PHI0)/FIX_STEP+0.0001)+1
|
||||
ENDIF
|
||||
DO JPHI=1,NPHI_R
|
||||
C
|
||||
SF_1=0.
|
||||
SR_1=0.
|
||||
SF_2=0.
|
||||
SR_2=0.
|
||||
IF(I_EXT.EQ.-1) THEN
|
||||
SF2_1=0.
|
||||
SR2_1=0.
|
||||
SF2_2=0.
|
||||
SR2_2=0.
|
||||
ENDIF
|
||||
C
|
||||
DO JEMET=1,NEMET
|
||||
JF=JEMET
|
||||
C
|
||||
JLIN=(JF-1)*NDP + (JE-1)*NTHETA*NPHI +(JTHETA-1)*NPHI + J
|
||||
&PHI
|
||||
C
|
||||
SF_1=SF_1+TAB(JLIN,2)
|
||||
SR_1=SR_1+TAB(JLIN,1)
|
||||
IF(I_EXT.EQ.-1) THEN
|
||||
JLIN2=NTT+JLIN
|
||||
SF2_1=SF2_1+TAB(JLIN2,2)
|
||||
SR2_1=SR2_1+TAB(JLIN2,1)
|
||||
ENDIF
|
||||
IF(IDICHR.GE.1) THEN
|
||||
SF_2=SF_2+TAB(JLIN,4)
|
||||
SR_2=SR_2+TAB(JLIN,3)
|
||||
IF(I_EXT.EQ.-1) THEN
|
||||
JLIN2=NTT+JLIN
|
||||
SF2_2=SF2_2+TAB(JLIN2,4)
|
||||
SR2_2=SR2_2+TAB(JLIN2,3)
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDDO
|
||||
IF(I_EXT.LE.0) THEN
|
||||
IF(STEREO.EQ.' NO') THEN
|
||||
JPHI2=JPHI
|
||||
ELSE
|
||||
JPHI2=(JTHETA-1)*NPHI+JPHI
|
||||
ENDIF
|
||||
ELSE
|
||||
JPHI2=JTHETA
|
||||
ENDIF
|
||||
IF(IDICHR.EQ.0) THEN
|
||||
WRITE(IUO2,3) JPL,DTHETA(JTHETA),DPHI(JPHI2),ECIN(JE),SR
|
||||
&_1,SF_1
|
||||
IF(I_EXT.EQ.-1) THEN
|
||||
WRITE(IUO2,3) JPLAN,DTHETA(JTHETA),DPHI(JPHI2),ECIN(JE
|
||||
&),SR2_1,SF2_1
|
||||
ENDIF
|
||||
ELSE
|
||||
WRITE(IUO2,23) JPL,DTHETA(JTHETA),DPHI(JPHI2),ECIN(JE),S
|
||||
&R_1,SF_1,SR_2,SF_2
|
||||
IF(I_EXT.EQ.-1) THEN
|
||||
WRITE(IUO2,23) JPLAN,DTHETA(JTHETA),DPHI(JPHI2),ECIN(J
|
||||
&E),SR2_1,SF2_1,SR2_2,SF2_2
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDDO
|
||||
ENDDO
|
||||
ENDDO
|
||||
ENDIF
|
||||
ENDIF
|
||||
C
|
||||
GOTO 6
|
||||
C
|
||||
5 WRITE(IUO1,4)
|
||||
STOP
|
||||
35 WRITE(IUO1,36) N_FIXED
|
||||
STOP
|
||||
37 WRITE(IUO1,38) NTHETA*NPHI
|
||||
STOP
|
||||
C
|
||||
1 FORMAT(2X,I3,2X,I2,2X,I4,2X,I4,2X,I4)
|
||||
2 FORMAT(2X,I3,2X,I2,2X,F6.2,2X,F6.2,2X,F8.2,2X,E12.6,2X,E12.6)
|
||||
3 FORMAT(2X,I3,2X,F6.2,2X,F6.2,2X,F8.2,2X,E12.6,2X,E12.6)
|
||||
4 FORMAT(//,8X,'<<<<<<<<<< DIMENSION OF THE ARRAYS TOO SMALL ','IN
|
||||
&THE TREAT_PHD SUBROUTINE - INCREASE NDIM_M ','>>>>>>>>>>')
|
||||
7 FORMAT(I4,2X,I4,2X,I4)
|
||||
8 FORMAT(I4,2X,I4,2X,I4,2X,I3,2X,I1)
|
||||
9 FORMAT(9(2X,I1),2X,I2)
|
||||
15 FORMAT(2X,A3,11X,A13)
|
||||
22 FORMAT(2X,I3,2X,I2,2X,F6.2,2X,F6.2,2X,F8.2,2X,E12.6,2X,E12.6,2X,E1
|
||||
&2.6,2X,E12.6)
|
||||
23 FORMAT(2X,I3,2X,F6.2,2X,F6.2,2X,F8.2,2X,E12.6,2X,E12.6,2X,E12.6,2X
|
||||
&,E12.6)
|
||||
25 FORMAT(37X,E12.6,2X,E12.6)
|
||||
36 FORMAT(//,4X,'<<<<<<<<<< DIMENSION OF NTH_M OR NPH_M TOO SMALL ',
|
||||
&'IN THE INCLUDE FILE >>>>>>>>>>',/,4X,'<<<<<<<<<<
|
||||
&SHOULD BE AT LEAST ',I6,' >>>>>>>>>>')
|
||||
38 FORMAT(//,8X,'<<<<<<<<<< DIMENSION OF NPH_M TOO SMALL ','IN THE I
|
||||
&NCLUDE FILE >>>>>>>>>>',/,8X,'<<<<<<<<<< SHOULD BE AT
|
||||
&LEAST ',I6,' >>>>>>>>>>')
|
||||
888 FORMAT(A72)
|
||||
C
|
||||
6 RETURN
|
||||
C
|
||||
END
|
|
@ -0,0 +1,335 @@
|
|||
C
|
||||
C=======================================================================
|
||||
C
|
||||
SUBROUTINE WEIGHT_SUM(ISOM,I_EXT,I_EXT_A,JEL)
|
||||
C
|
||||
C This subroutine performs a weighted sum of the results
|
||||
C corresponding to different directions of the detector.
|
||||
C The directions and weights are read from an external input file
|
||||
C
|
||||
C JEL is the electron undetected (i.e. for which the outgoing
|
||||
C directions are integrated over the unit sphere). It is always
|
||||
C 1 for one electron spectroscopies (PHD). For APECS, It can be
|
||||
C 1 (photoelectron) or 2 (Auger electron) or even 0 (no electron
|
||||
C detected)
|
||||
C
|
||||
C Last modified : 31 Jan 2007
|
||||
C
|
||||
USE DIM_MOD
|
||||
USE INFILES_MOD
|
||||
USE INUNITS_MOD
|
||||
USE OUTUNITS_MOD
|
||||
C
|
||||
C
|
||||
PARAMETER(N_MAX=5810,NPM=20)
|
||||
C
|
||||
REAL*4 W(N_MAX),W_A(N_MAX),ECIN(NE_M)
|
||||
REAL*4 DTHETA(N_MAX),DPHI(N_MAX),DTHETAA(N_MAX),DPHIA(N_MAX)
|
||||
REAL*4 SR_1,SF_1,SR_2,SF_2
|
||||
REAL*4 SUMR_1(NPM,NE_M,N_MAX),SUMR_2(NPM,NE_M,N_MAX)
|
||||
REAL*4 SUMF_1(NPM,NE_M,N_MAX),SUMF_2(NPM,NE_M,N_MAX)
|
||||
C
|
||||
CHARACTER*3 SPECTRO,SPECTRO2
|
||||
CHARACTER*5 LIKE
|
||||
CHARACTER*13 OUTDATA
|
||||
C
|
||||
C
|
||||
C
|
||||
C
|
||||
DATA JVOL,JTOT/0,-1/
|
||||
DATA LIKE /'-like'/
|
||||
C
|
||||
REWIND IUO2
|
||||
C
|
||||
READ(IUO2,15) SPECTRO,OUTDATA
|
||||
IF(SPECTRO.NE.'APC') THEN
|
||||
READ(IUO2,9) ISPIN,IDICHR,I_SO,ISFLIP,ICHKDIR,IPHI,ITHETA,IE
|
||||
READ(IUO2,8) NPHI,NTHETA,NE,NPLAN,ISOM
|
||||
SPECTRO2='XAS'
|
||||
ELSE
|
||||
READ(IUO2,9) ISPIN,IDICHR,I_SO,ISFLIP,ICHKDIR,IPHI,ITHETA,IE
|
||||
READ(IUO2,9) ISPIN_A,IDICHR_A,I_SO_A,ISFLIP_A,ICHKDIR_A,IPHI_A,I
|
||||
&THETA_A,IE_A
|
||||
READ(IUO2,8) NPHI,NTHETA,NE,NPLAN,ISOM
|
||||
READ(IUO2,8) NPHI_A,NTHETA_A
|
||||
IF(JEL.EQ.1) THEN
|
||||
SPECTRO2='AED'
|
||||
ELSEIF(JEL.EQ.2) THEN
|
||||
SPECTRO2='PHD'
|
||||
ELSEIF(JEL.EQ.0) THEN
|
||||
SPECTRO2='XAS'
|
||||
ENDIF
|
||||
ENDIF
|
||||
C
|
||||
IF(NPLAN.GT.NPM) THEN
|
||||
WRITE(IUO1,4) NPLAN+2
|
||||
STOP
|
||||
ENDIF
|
||||
C
|
||||
C Reading the number of angular points
|
||||
C
|
||||
IF(SPECTRO.NE.'APC') THEN
|
||||
OPEN(UNIT=IUI6, FILE=INFILE6, STATUS='OLD')
|
||||
READ(IUI6,1) N_POINTS
|
||||
READ(IUI6,5) I_DIM,N_DUM1,N_DUM2
|
||||
N_POINTS_A=1
|
||||
ELSE
|
||||
IF(JEL.EQ.1) THEN
|
||||
OPEN(UNIT=IUI6, FILE=INFILE6, STATUS='OLD')
|
||||
READ(IUI6,1) N_POINTS
|
||||
READ(IUI6,5) I_DIM,N_DUM1,N_DUM2
|
||||
IF(I_EXT_A.EQ.0) THEN
|
||||
N_POINTS_A=NTHETA_A*NPHI_A
|
||||
ELSE
|
||||
OPEN(UNIT=IUI9, FILE=INFILE9, STATUS='OLD')
|
||||
READ(IUI9,1) N_POINTS_A
|
||||
READ(IUI9,5) I_DIM,N_DUM1,N_DUM2
|
||||
ENDIF
|
||||
NTHETA0=NTHETA_A
|
||||
NPHI0=NPHI_A
|
||||
ELSEIF(JEL.EQ.2) THEN
|
||||
OPEN(UNIT=IUI9, FILE=INFILE9, STATUS='OLD')
|
||||
READ(IUI9,1) N_POINTS_A
|
||||
READ(IUI9,5) I_DIM,N_DUM1,N_DUM2
|
||||
IF(I_EXT.EQ.0) THEN
|
||||
N_POINTS=NTHETA*NPHI
|
||||
ELSE
|
||||
OPEN(UNIT=IUI6, FILE=INFILE6, STATUS='OLD')
|
||||
READ(IUI6,1) N_POINTS
|
||||
READ(IUI6,5) I_DIM,N_DUM1,N_DUM2
|
||||
ENDIF
|
||||
NTHETA0=NTHETA
|
||||
NPHI0=NPHI
|
||||
ELSEIF(JEL.EQ.0) THEN
|
||||
OPEN(UNIT=IUI6, FILE=INFILE6, STATUS='OLD')
|
||||
OPEN(UNIT=IUI9, FILE=INFILE9, STATUS='OLD')
|
||||
READ(IUI6,1) N_POINTS
|
||||
READ(IUI9,1) N_POINTS_A
|
||||
READ(IUI6,5) I_DIM,N_DUM1,N_DUM2
|
||||
READ(IUI9,5) I_DIM,N_DUM1,N_DUM2
|
||||
ENDIF
|
||||
ENDIF
|
||||
C
|
||||
IF(SPECTRO.NE.'APC') THEN
|
||||
NANGLE=1
|
||||
ELSE
|
||||
IF(JEL.EQ.1) THEN
|
||||
NANGLE=N_POINTS_A
|
||||
ELSEIF(JEL.EQ.2) THEN
|
||||
NANGLE=N_POINTS
|
||||
ELSEIF(JEL.EQ.0) THEN
|
||||
NANGLE=1
|
||||
ENDIF
|
||||
ENDIF
|
||||
C
|
||||
C Initialization of the arrays
|
||||
C
|
||||
DO JE=1,NE
|
||||
DO JANGLE=1,NANGLE
|
||||
DO JPLAN=1,NPLAN+2
|
||||
SUMR_1(JPLAN,JE,JANGLE)=0.
|
||||
SUMF_1(JPLAN,JE,JANGLE)=0.
|
||||
IF(IDICHR.GT.0) THEN
|
||||
SUMR_2(JPLAN,JE,JANGLE)=0.
|
||||
SUMF_2(JPLAN,JE,JANGLE)=0.
|
||||
ENDIF
|
||||
ENDDO
|
||||
ENDDO
|
||||
ENDDO
|
||||
C
|
||||
C Reading of the data to be angle integrated
|
||||
C
|
||||
DO JE=1,NE
|
||||
C
|
||||
DO JANGLE=1,N_POINTS
|
||||
IF(I_EXT.NE.0) READ(IUI6,2) TH,PH,W(JANGLE)
|
||||
DO JANGLE_A=1,N_POINTS_A
|
||||
IF((I_EXT_A.NE.0).AND.(JANGLE.EQ.1)) THEN
|
||||
READ(IUI9,2) THA,PHA,W_A(JANGLE_A)
|
||||
ENDIF
|
||||
C
|
||||
DO JPLAN=1,NPLAN+2
|
||||
C
|
||||
IF(IDICHR.EQ.0) THEN
|
||||
IF(SPECTRO.NE.'APC') THEN
|
||||
READ(IUO2,3) JDUM,DTHETA(JANGLE),DPHI(JANGLE),ECIN(JE)
|
||||
&,SR_1,SF_1
|
||||
ELSE
|
||||
READ(IUO2,13) JDUM,DTHETA(JANGLE),DPHI(JANGLE),ECIN(JE
|
||||
&),DTHETAA(JANGLE_A),DPHIA(JANGLE_A),SR_1,SF_1
|
||||
ENDIF
|
||||
ELSE
|
||||
IF(SPECTRO.NE.'APC') THEN
|
||||
READ(IUO2,23) JDUM,DTHETA(JANGLE),DPHI(JANGLE),ECIN(JE
|
||||
&),SR_1,SF_1,SR_2,SF_2
|
||||
ELSE
|
||||
READ(IUO2,24) JDUM,DTHETA(JANGLE),DPHI(JANGLE),ECIN(JE
|
||||
&),DTHETAA(JANGLE_A),DPHIA(JANGLE_A),SR_1,SF_1,SR_2,SF_2
|
||||
ENDIF
|
||||
ENDIF
|
||||
C
|
||||
IF(JEL.EQ.1) THEN
|
||||
SUMR_1(JPLAN,JE,JANGLE_A)=SUMR_1(JPLAN,JE,JANGLE_A)+SR_1
|
||||
&*W(JANGLE)
|
||||
SUMF_1(JPLAN,JE,JANGLE_A)=SUMF_1(JPLAN,JE,JANGLE_A)+SF_1
|
||||
&*W(JANGLE)
|
||||
ELSEIF(JEL.EQ.2) THEN
|
||||
SUMR_1(JPLAN,JE,JANGLE)=SUMR_1(JPLAN,JE,JANGLE)+SR_1*W_A
|
||||
&(JANGLE_A)
|
||||
SUMF_1(JPLAN,JE,JANGLE)=SUMF_1(JPLAN,JE,JANGLE)+SF_1*W_A
|
||||
&(JANGLE_A)
|
||||
ELSEIF(JEL.EQ.0) THEN
|
||||
SUMR_1(JPLAN,JE,1)=SUMR_1(JPLAN,JE,1)+SR_1*W(JANGLE)*W_A
|
||||
&(JANGLE_A)
|
||||
SUMF_1(JPLAN,JE,1)=SUMF_1(JPLAN,JE,1)+SF_1*W(JANGLE)*W_A
|
||||
&(JANGLE_A)
|
||||
ENDIF
|
||||
IF(IDICHR.GT.0) THEN
|
||||
IF(JEL.EQ.1) THEN
|
||||
SUMR_2(JPLAN,JE,JANGLE_A)=SUMR_2(JPLAN,JE,JANGLE_A)+SR
|
||||
&_2*W(JANGLE)
|
||||
SUMF_2(JPLAN,JE,JANGLE_A)=SUMF_2(JPLAN,JE,JANGLE_A)+SF
|
||||
&_2*W(JANGLE)
|
||||
ELSEIF(JEL.EQ.2) THEN
|
||||
SUMR_2(JPLAN,JE,JANGLE)=SUMR_2(JPLAN,JE,JANGLE)+SR_2*W
|
||||
&_A(JANGLE_A)
|
||||
SUMF_2(JPLAN,JE,JANGLE)=SUMF_2(JPLAN,JE,JANGLE)+SF_2*W
|
||||
&_A(JANGLE_A)
|
||||
ELSEIF(JEL.EQ.0) THEN
|
||||
SUMR_2(JPLAN,JE,1)=SUMR_2(JPLAN,JE,1)+SR_2*W(JANGLE)*W
|
||||
&_A(JANGLE_A)
|
||||
SUMF_2(JPLAN,JE,1)=SUMF_2(JPLAN,JE,1)+SF_2*W(JANGLE)*W
|
||||
&_A(JANGLE_A)
|
||||
ENDIF
|
||||
ENDIF
|
||||
C
|
||||
ENDDO
|
||||
C
|
||||
ENDDO
|
||||
IF(I_EXT_A.NE.0) THEN
|
||||
REWIND IUI9
|
||||
READ(IUI9,1) NDUM
|
||||
READ(IUI9,1) NDUM
|
||||
ENDIF
|
||||
ENDDO
|
||||
C
|
||||
IF(I_EXT.NE.0) THEN
|
||||
REWIND IUI6
|
||||
READ(IUI6,1) NDUM
|
||||
READ(IUI6,1) NDUM
|
||||
ENDIF
|
||||
ENDDO
|
||||
C
|
||||
CLOSE(IUI6)
|
||||
CLOSE(IUI9)
|
||||
REWIND IUO2
|
||||
C
|
||||
WRITE(IUO2,16) SPECTRO2,LIKE,SPECTRO,OUTDATA
|
||||
IF((SPECTRO.NE.'APC').OR.(JEL.EQ.0)) THEN
|
||||
WRITE(IUO2,19) ISPIN,IDICHR,I_SO,ISFLIP
|
||||
WRITE(IUO2,18) NE,NPLAN,ISOM
|
||||
ELSEIF(JEL.EQ.1) THEN
|
||||
WRITE(IUO2,20) ISPIN_A,IDICHR_A,I_SO_A,ISFLIP_A,ICHKDIR_A,IPHI_A
|
||||
&,ITHETA_A,IE_A
|
||||
WRITE(IUO2,21) NPHI0,NTHETA0,NE,NPLAN,ISOM
|
||||
ELSEIF(JEL.EQ.2) THEN
|
||||
WRITE(IUO2,20) ISPIN,IDICHR,I_SO,ISFLIP,ICHKDIR,IPHI,ITHETA,IE
|
||||
WRITE(IUO2,21) NPHI0,NTHETA0,NE,NPLAN,ISOM
|
||||
ENDIF
|
||||
C
|
||||
DO JE=1,NE
|
||||
DO JANGLE=1,NANGLE
|
||||
IF(SPECTRO.EQ.'APC') THEN
|
||||
IF(JEL.EQ.1) THEN
|
||||
THETA=DTHETAA(JANGLE)
|
||||
PHI=DPHIA(JANGLE)
|
||||
ELSEIF(JEL.EQ.2) THEN
|
||||
THETA=DTHETA(JANGLE)
|
||||
PHI=DPHI(JANGLE)
|
||||
ENDIF
|
||||
ENDIF
|
||||
C
|
||||
DO JPLAN=1,NPLAN
|
||||
IF(IDICHR.EQ.0) THEN
|
||||
IF((SPECTRO.NE.'APC').OR.(JEL.EQ.0)) THEN
|
||||
WRITE(IUO2,33) JPLAN,ECIN(JE),SUMR_1(JPLAN,JE,JANGLE),SU
|
||||
&MF_1(JPLAN,JE,JANGLE)
|
||||
ELSE
|
||||
WRITE(IUO2,34) JPLAN,THETA,PHI,ECIN(JE),SUMR_1(JPLAN,JE,
|
||||
&JANGLE),SUMF_1(JPLAN,JE,JANGLE)
|
||||
ENDIF
|
||||
ELSE
|
||||
IF((SPECTRO.NE.'APC').OR.(JEL.EQ.0)) THEN
|
||||
WRITE(IUO2,43) JPLAN,ECIN(JE),SUMR_1(JPLAN,JE,JANGLE),SU
|
||||
&MF_1(JPLAN,JE,JANGLE),SUMR_2(JPLAN,JE,JANGLE),SUMF_2(JPLAN,JE,JANG
|
||||
&LE)
|
||||
ELSE
|
||||
WRITE(IUO2,44) JPLAN,THETA,PHI,ECIN(JE),SUMR_1(JPLAN,JE,
|
||||
&JANGLE),SUMF_1(JPLAN,JE,JANGLE),SUMR_2(JPLAN,JE,JANGLE),SUMF_2(JPL
|
||||
&AN,JE,JANGLE)
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDDO
|
||||
C
|
||||
IF(IDICHR.EQ.0) THEN
|
||||
IF((SPECTRO.NE.'APC').OR.(JEL.EQ.0)) THEN
|
||||
WRITE(IUO2,33) JVOL,ECIN(JE),SUMR_1(NPLAN+1,JE,JANGLE),SUM
|
||||
&F_1(NPLAN+1,JE,JANGLE)
|
||||
WRITE(IUO2,33) JTOT,ECIN(JE),SUMR_1(NPLAN+2,JE,JANGLE),SUM
|
||||
&F_1(NPLAN+2,JE,JANGLE)
|
||||
ELSE
|
||||
WRITE(IUO2,34) JVOL,THETA,PHI,ECIN(JE),SUMR_1(NPLAN+1,JE,J
|
||||
&ANGLE),SUMF_1(NPLAN+1,JE,JANGLE)
|
||||
WRITE(IUO2,34) JTOT,THETA,PHI,ECIN(JE),SUMR_1(NPLAN+2,JE,J
|
||||
&ANGLE),SUMF_1(NPLAN+2,JE,JANGLE)
|
||||
ENDIF
|
||||
ELSE
|
||||
IF((SPECTRO.NE.'APC').OR.(JEL.EQ.0)) THEN
|
||||
WRITE(IUO2,43) JVOL,ECIN(JE),SUMR_1(NPLAN+1,JE,JANGLE),SUM
|
||||
&F_1(NPLAN+1,JE,JANGLE),SUMR_2(NPLAN+1,JE,JANGLE),SUMF_2(NPLAN+1,JE
|
||||
&,JANGLE)
|
||||
WRITE(IUO2,43) JTOT,ECIN(JE),SUMR_1(NPLAN+2,JE,JANGLE),SUM
|
||||
&F_1(NPLAN+2,JE,JANGLE),SUMR_2(NPLAN+2,JE,JANGLE),SUMF_2(NPLAN+2,JE
|
||||
&,JANGLE)
|
||||
ELSE
|
||||
WRITE(IUO2,44) JVOL,THETA,PHI,ECIN(JE),SUMR_1(NPLAN+1,JE,J
|
||||
&ANGLE),SUMF_1(NPLAN+1,JE,JANGLE),SUMR_2(NPLAN+1,JE,JANGLE),SUMF_2(
|
||||
&NPLAN+1,JE,JANGLE)
|
||||
WRITE(IUO2,44) JTOT,THETA,PHI,ECIN(JE),SUMR_1(NPLAN+2,JE,J
|
||||
&ANGLE),SUMF_1(NPLAN+2,JE,JANGLE),SUMR_2(NPLAN+2,JE,JANGLE),SUMF_2(
|
||||
&NPLAN+2,JE,JANGLE)
|
||||
ENDIF
|
||||
ENDIF
|
||||
C
|
||||
ENDDO
|
||||
ENDDO
|
||||
C
|
||||
1 FORMAT(13X,I4)
|
||||
2 FORMAT(15X,F8.3,3X,F8.3,3X,E12.6)
|
||||
3 FORMAT(2X,I3,2X,F6.2,2X,F6.2,2X,F8.2,2X,E12.6,2X,E12.6)
|
||||
4 FORMAT(//,8X,'<<<<<<<<<< DIMENSION OF THE ARRAYS TOO SMALL ','IN
|
||||
&THE WEIGHT_SUM SUBROUTINE - INCREASE NPM TO ',I3,'>>>>>>>>>>')
|
||||
5 FORMAT(6X,I1,1X,I3,3X,I3)
|
||||
8 FORMAT(I4,2X,I4,2X,I4,2X,I3,2X,I1)
|
||||
9 FORMAT(9(2X,I1),2X,I2)
|
||||
13 FORMAT(2X,I3,2X,F6.2,2X,F6.2,2X,F8.2,2X,F6.2,2X,F6.2,2X,E12.6,2X,E
|
||||
&12.6)
|
||||
15 FORMAT(2X,A3,11X,A13)
|
||||
16 FORMAT(2X,A3,A5,1X,A3,2X,A13)
|
||||
18 FORMAT(I4,2X,I3,2X,I1)
|
||||
19 FORMAT(4(2X,I1))
|
||||
20 FORMAT(8(2X,I1))
|
||||
21 FORMAT(I4,2X,I4,2X,I4,2X,I3,2X,I1)
|
||||
23 FORMAT(2X,I3,2X,F6.2,2X,F6.2,2X,F8.2,2X,E12.6,2X,E12.6,2X,E12.6,2X
|
||||
&,E12.6)
|
||||
24 FORMAT(2X,I3,2X,F6.2,2X,F6.2,2X,F8.2,2X,F6.2,2X,F6.2,2X,E12.6,2X,E
|
||||
&12.6,2X,E12.6,2X,E12.6)
|
||||
33 FORMAT(2X,I3,2X,F8.2,2X,E12.6,2X,E12.6)
|
||||
34 FORMAT(2X,I3,2X,F6.2,2X,F6.2,2X,F8.2,2X,E12.6,2X,E12.6)
|
||||
43 FORMAT(2X,I3,2X,F8.2,2X,E12.6,2X,E12.6,2X,E12.6,2X,E12.6)
|
||||
44 FORMAT(2X,I3,2X,F6.2,2X,F6.2,2X,F8.2,2X,E12.6,2X,E12.6,2X,E12.6,2X
|
||||
&,E12.6)
|
||||
C
|
||||
RETURN
|
||||
C
|
||||
END
|
Loading…
Reference in New Issue