43 INTEGER :: JTMP,IMIN,IMAX
44 INTEGER :: NPASF,NPASD
45 INTEGER :: IDALE,IDD,IFF,I
48 DOUBLE PRECISION :: FMIN,FMAX
49 DOUBLE PRECISION :: DTETA,DF,DTETA2
50 DOUBLE PRECISION :: SUMB,POIDS,SUMD,VAR,SUMICI
52 INTEGER,
ALLOCATABLE :: IDTWC(:)
54 DOUBLE PRECISION,
ALLOCATABLE :: SDIRTWC(:,:)
55 DOUBLE PRECISION,
ALLOCATABLE :: SDIR(:)
58 DOUBLE PRECISION,
ALLOCATABLE :: DIR_ART(:)
59 DOUBLE PRECISION,
ALLOCATABLE :: SDIR_ART(:)
79 df = (fmax-fmin)/float(npasf)
83 ALLOCATE(idtwc(2*
ndale+2),stat=ierr)
84 CALL check_allocate(ierr,
'TWCAL2:IDTWC')
86 CALL check_allocate(ierr,
'TWCAL2:SDIRTWC')
87 ALLOCATE(sdir(npasd+1),stat=ierr)
88 CALL check_allocate(ierr,
'TWCAL2:SDIR')
89 ALLOCATE(dir_art(npasd+1),stat=ierr)
90 CALL check_allocate(ierr,
'TWCAL2:DIR_ART')
91 ALLOCATE(sdir_art(npasd+1),stat=ierr)
92 CALL check_allocate(ierr,
'TWCAL2:SDIR_ART')
108 IF(iff.EQ.1 .OR. iff.EQ.npasf+1) poids=0.5d0*poids
109 IF(idd.EQ.1 .OR. idd.EQ.
ndir+1) poids=0.5d0*poids
110 var=
stwc1(fmin+float(iff-1)*df,s_tom%DIR(idd),s_tom,ispec)
111 sumd = sumd + poids*var*df
113 sdirtwc(ispec,idd) = sumd
120 &
WRITE(
lu,*)
'< TWCAL2: SDIRTWC COMPUTED FOR 1 TO ',
nspec 131 IF(s_tom%DIR(jtmp).LE.
tetmin+360.d0) imin = jtmp
135 IF(s_tom%DIR(jtmp).LE.
tetmin) imin = jtmp
142 DO jtmp =
ndir+1,1,-1
143 IF(s_tom%DIR(jtmp).GE.
tetmax+360.d0) imax = jtmp
146 DO jtmp =
ndir+1,1,-1
147 IF(s_tom%DIR(jtmp).GE.
tetmax) imax = jtmp
151 IF(
debug.GT.0)
WRITE(
lu,*)
'< TWCAL2: TETMIN,IMIN,S_TOM%DIR(IMIN)' 153 IF(
debug.GT.0)
WRITE(
lu,*)
'< TWCAL2: TETMAX,IMAX,S_TOM%DIR(IMAX)' 164 printmsg = printmsg + 1
168 IF(
debug.GT.0 .AND. printmsg.EQ.1)
THEN 170 WRITE(
lu,*)
'> TWCAL2: ',
171 &
'STARTS INTERPOLATION OF DIR. DISTRIBUTION TO ARTEMIS NODES' 181 &
x(
mesh%NBOR%I(iptfr)),
y(
mesh%NBOR%I(iptfr)),sdir,iptfr )
183 CALL stwc2( imin,imax,npasd+1,dir_art,sdir )
184 dteta2 = dir_art(2)-dir_art(1)
186 IF(
debug.GT.0 .AND. printmsg.EQ.1)
187 &
WRITE(
lu,*)
'< TWCAL2: INTERPOLATION TO ARTEMIS NODES ENDED' 195 IF(sdir(idd).LT.sdir(iddminart)) iddminart = idd
201 IF (idd.LT.iddminart) i=i+npasd
202 sdir_art(i)=sdir(idd)
204 sdir_art(npasd+1)=sdir_art(1)
211 IF(idd.EQ.1 .OR. idd.EQ.npasd+1) poids=0.5d0*poids
212 sumb = sumb + poids*sdir_art(idd)*dteta2*
degrad 217 hscal=4.d0*sqrt(sumb)
219 IF(
debug.GT.0 .AND. printmsg.EQ.1)
THEN 220 WRITE(
lu,*)
'> TWCAL2: STARTS SPECTRUM DISCRETISATION' 221 WRITE(
lu,*)
' DIRECTIONS' 228 sumb = sumb/float(2*
ndale)
238 sumici = sumici + sdir_art(idd)*dteta2*
degrad 242 IF (sumici.GE.sumb*float(i) .OR. idd.EQ.npasd+1)
THEN 255 bdale%ADR(idale)%P%R(iptfr)=
256 & float(idtwc(i+1)-1)*dteta2+dir_art(iddminart)
257 IF(
bdale%ADR(idale)%P%R(iptfr).GT.dir_art(npasd+1))
258 &
bdale%ADR(idale)%P%R(iptfr)=
259 &
bdale%ADR(idale)%P%R(iptfr)-dir_art(npasd+1)+dir_art(1)
261 IF(
bdale%ADR(idale)%P%R(iptfr).GT.180d0)
262 &
bdale%ADR(idale)%P%R(iptfr)=
263 &
bdale%ADR(idale)%P%R(iptfr)-360.d0
270 IF(
debug.GT.0 .AND. printmsg.EQ.1)
271 &
WRITE(
lu,*)
'< TWCAL2: SPECTRUM DISCRETISATION ENDED' 275 DEALLOCATE(idtwc,sdirtwc,sdir)
276 DEALLOCATE(dir_art,sdir_art)
287 &
WRITE(
lu,*)
'CLOSEST: REFERENCE BOUNDARY POINT:',
iptfr_ref
type(bief_obj), target lihbor
double precision function stwc1(F, DIR, SPEC, I)
double precision, dimension(:), pointer y
subroutine stwc2(IMIN, IMAX, N, DIR2, SDIR)
type(bief_obj), target bdale
type(bief_mesh), target mesh
double precision, dimension(:), pointer x
subroutine fasp_sp(XRELV, YRELV, ZRELV, NP, X, Y, Z, I)