1229 integer,
intent(in) :: nk
1230 integer,
intent(in) :: nth
1231 real,
intent(in) :: sig(nk)
1232 real,
intent(in) :: th(nth)
1235 character(len=*),
intent(in) :: act
1238 integer :: ns, iq, i1, i3, icol
1239 integer(kind=8) :: rpos
1240 integer,
allocatable :: irow_coo(:), &
1247 if (
allocated(qi_ircsr))
deallocate(qi_ircsr);
allocate(qi_ircsr(qi_nrsm+1))
1248 if (
allocated(qr_sumqr))
deallocate(qr_sumqr);
allocate(qr_sumqr(qi_nrsm))
1249 if (
allocated(qr_sumnp))
deallocate(qr_sumnp);
allocate(qr_sumnp(ns, ns))
1251 if (
allocated(qr_dk))
deallocate(qr_dk);
allocate(qr_dk(ns))
1252 if (
allocated(qr_om))
deallocate(qr_om);
allocate(qr_om(ns))
1256 qr_depth = max(0., min(qr_depth, qr_dmax))
1257 qi_disc = max(0, min(qi_disc, 1))
1258 qi_kev = max(0, min(qi_kev, 1))
1259 qi_interp = max(0, min(qi_interp, 1))
1260 if (qi_disc .eq. 1) qi_interp = 0
1265 write(qs_cfg,
"(A, '_d', I4.4, '.cfg')") trim(qs_ver), int(qr_depth)
1267 if (trim(act) ==
'WRITE')
then
1269 if (
allocated(qr_kx))
deallocate(qr_kx);
allocate(qr_kx(ns))
1270 if (
allocated(qr_ky))
deallocate(qr_ky);
allocate(qr_ky(ns))
1271 if (
allocated(qr_wn1))
deallocate(qr_wn1);
allocate(qr_wn1(
nk))
1274 call findquartetnumber(ns, qr_kx, qr_ky, qr_om, qr_oml, qi_nnz)
1276 if (
allocated(qi_nn))
deallocate(qi_nn);
allocate(qi_nn(qi_nnz))
1277 if (
allocated(qi_pp))
deallocate(qi_pp);
allocate(qi_pp(qi_nnz))
1278 if (
allocated(qi_qq))
deallocate(qi_qq);
allocate(qi_qq(qi_nnz))
1279 if (
allocated(qi_rr))
deallocate(qi_rr);
allocate(qi_rr(qi_nnz))
1281 if (
allocated(qr_k4x))
deallocate(qr_k4x);
allocate(qr_k4x(qi_nnz))
1282 if (
allocated(qr_k4y))
deallocate(qr_k4y);
allocate(qr_k4y(qi_nnz))
1283 if (
allocated(qr_om4))
deallocate(qr_om4);
allocate(qr_om4(qi_nnz))
1285 call findquartetconfig(ns, qr_kx, qr_ky, qr_om, qr_oml, qi_nnz, &
1286 qi_nn, qi_pp, qi_qq, qi_rr, &
1287 qr_k4x, qr_k4y, qr_om4)
1290 if (
allocated(qr_tkern))
deallocate(qr_tkern);
allocate(qr_tkern(qi_nnz))
1291 if (
allocated(qr_tkurt))
deallocate(qr_tkurt);
allocate(qr_tkurt(qi_nnz))
1292 if (
allocated(qr_dom))
deallocate(qr_dom);
allocate(qr_dom(qi_nnz))
1295 qr_tkern(iq) = tfunc(qr_kx(qi_nn(iq)), qr_ky(qi_nn(iq)),&
1296 qr_kx(qi_pp(iq)), qr_ky(qi_pp(iq)),&
1297 qr_kx(qi_qq(iq)), qr_ky(qi_qq(iq)),&
1298 qr_k4x(iq) , qr_k4y(iq) )
1301 qr_tkurt = qr_tkern * sqrt(qr_om(qi_nn) * qr_om(qi_pp) * qr_om(qi_qq) * qr_om4)
1303 qr_dom = qr_om(qi_nn) + qr_om(qi_pp) - qr_om(qi_qq) - qr_om4
1308 where(abs(qr_dom) < qr_eps) qr_dom = 0.0
1311 if (qi_interp .eq. 1)
then
1312 if (
allocated(qi_bind))
deallocate(qi_bind);
allocate(qi_bind(4, qi_nnz))
1313 if (
allocated(qr_bwgh))
deallocate(qr_bwgh);
allocate(qr_bwgh(4, qi_nnz))
1314 if (qi_bound .eq. 1 )
then
1315 if (
allocated(qr_bdry))
deallocate(qr_bdry);
allocate(qr_bdry(qi_nnz))
1317 call biinterpwt(
nk,
nth, qr_wn1,
th)
1320 deallocate(qr_kx, qr_ky)
1321 deallocate(qr_k4x, qr_k4y, qr_om4)
1322 if (qi_interp .eq. 1)
deallocate(qr_wn1)
1325 if (
allocated(qi_iccos))
deallocate(qi_iccos);
allocate(qi_iccos(qi_nnz))
1326 if (
allocated(irow_coo))
deallocate(irow_coo);
allocate(irow_coo(qi_nnz))
1327 if (
allocated(icootcsr))
deallocate(icootcsr);
allocate(icootcsr(qi_nnz))
1329 irow_coo = qi_nn + (qi_pp - 1) * ns
1330 qi_iccos = qi_qq + (qi_rr - 1) * ns
1334 call coocsrind(qi_nrsm, qi_nnz, irow_coo, qi_iccos, icootcsr, qi_ircsr)
1337 qi_nn = qi_nn(icootcsr)
1338 qi_pp = qi_pp(icootcsr)
1339 qi_qq = qi_qq(icootcsr)
1340 qi_rr = qi_rr(icootcsr)
1341 qr_tkern = qr_tkern(icootcsr)
1342 qr_tkurt = qr_tkurt(icootcsr)
1343 qr_dom = qr_dom(icootcsr)
1345 if (qi_interp .eq. 1)
then
1346 qi_bind = qi_bind(:, icootcsr)
1347 qr_bwgh = qr_bwgh(:, icootcsr)
1348 if (qi_bound .eq. 1) qr_bdry = qr_bdry(icootcsr)
1351 qi_iccos = qi_iccos(icootcsr)
1352 deallocate(irow_coo, icootcsr)
1359 icol = i3 + (i3 - 1) * ns
1360 qr_sumqr(icol) = 1.0
1366 qr_sumnp(i1, i1) = 0.5
1370 write(*, *)
'[W] Writing |', trim(qs_cfg),
'| ...'
1371 open(51,
file=trim(qs_cfg), form=
'unformatted', convert=
file_endian, &
1372 access=
'stream',
status=
'replace')
1376 write(51) qr_depth, qr_oml, qi_disc, &
1378 write(51) qr_om, qr_dk
1380 write(51) qi_nn, qi_pp, qi_qq, qi_rr
1381 write(51) qr_tkern, qr_tkurt, qr_dom
1382 write(51) qi_iccos, qi_ircsr
1383 write(51) qr_sumqr, qr_sumnp
1385 if (qi_interp .eq. 1)
write(51) qi_bind, qr_bwgh
1386 if ( (qi_interp .eq. 1) .and. (qi_bound .eq. 1) ) &
1391 write(*, *)
"[W] qr_depth: ", qr_depth
1392 write(*, *)
"[W] qr_oml : ", qr_oml
1393 write(*, *)
"[W] qi_disc : ", qi_disc
1394 write(*, *)
"[W] qi_kev : ", qi_kev
1395 write(*, *)
"[W] qr_om : ", qr_om
1396 write(*, *)
"[W] qr_dk : ", qr_dk
1397 write(*, *)
"[W] The total number of quartets is ", qi_nnz
1398 write(*, *)
'[W] qi_NN : ', qi_nn
1399 write(*, *)
'[W] qi_PP : ', qi_pp
1400 write(*, *)
'[W] qi_QQ : ', qi_qq
1401 write(*, *)
'[W] qi_RR : ', qi_rr
1402 write(*, *)
'[W] qr_TKern: ', qr_tkern
1403 write(*, *)
'[W] qr_TKurt: ', qr_tkurt
1404 write(*, *)
'[W] qr_dom : ', qr_dom
1405 write(*, *)
'[W] qi_icCos: ', qi_iccos
1406 write(*, *)
'[W] qi_irCsr: ', qi_ircsr
1407 write(*, *)
'[W] Σ_QR : ', qr_sumqr(1: qi_nrsm: ns+1)
1408 write(*, *)
'[W] Σ_P : ', (qr_sumnp(iq, iq), iq = 1, ns)
1411 else if (trim(act) ==
'READ')
then
1412 write(*, *)
'⊚ → [R] Reading |', trim(qs_cfg),
'| ...'
1413 open(51,
file=trim(qs_cfg), form=
'unformatted', convert=
file_endian, &
1414 access=
'stream',
status=
'old')
1416 rpos = 1_8 + qi_lrb * (2_8 +
nk +
nth)
1417 read(51, pos=rpos) qr_depth, qr_oml, qi_disc, &
1421 read(51) qr_om, qr_dk
1424 write(*, *)
"⊚ → [R] The total number of quartets is ", qi_nnz
1427 if (
allocated(qi_nn))
deallocate(qi_nn);
allocate(qi_nn(qi_nnz))
1428 if (
allocated(qi_pp))
deallocate(qi_pp);
allocate(qi_pp(qi_nnz))
1429 if (
allocated(qi_qq))
deallocate(qi_qq);
allocate(qi_qq(qi_nnz))
1430 if (
allocated(qi_rr))
deallocate(qi_rr);
allocate(qi_rr(qi_nnz))
1432 if (
allocated(qr_tkern))
deallocate(qr_tkern);
allocate(qr_tkern(qi_nnz))
1433 if (
allocated(qr_tkurt))
deallocate(qr_tkurt);
allocate(qr_tkurt(qi_nnz))
1434 if (
allocated(qr_dom))
deallocate(qr_dom);
allocate(qr_dom(qi_nnz))
1436 if (
allocated(qi_iccos))
deallocate(qi_iccos);
allocate(qi_iccos(qi_nnz))
1438 read(51) qi_nn, qi_pp, qi_qq, qi_rr
1439 read(51) qr_tkern, qr_tkurt, qr_dom
1440 read(51) qi_iccos, qi_ircsr
1441 read(51) qr_sumqr, qr_sumnp
1443 if (qi_interp .eq. 1)
then
1444 if (
allocated(qi_bind))
deallocate(qi_bind);
allocate(qi_bind(4, qi_nnz))
1445 if (
allocated(qr_bwgh))
deallocate(qr_bwgh);
allocate(qr_bwgh(4, qi_nnz))
1446 read(51) qi_bind, qr_bwgh
1448 if (qi_bound .eq. 1)
then
1449 if (
allocated(qr_bdry))
deallocate(qr_bdry);
allocate(qr_bdry(qi_nnz))
1458 write(*, *)
"[R] qr_depth: ", qr_depth
1459 write(*, *)
"[R] qr_oml : ", qr_oml
1460 write(*, *)
"[R] qi_disc : ", qi_disc
1461 write(*, *)
"[R] qi_kev : ", qi_kev
1462 write(*, *)
"[R] qr_om : ", qr_om
1463 write(*, *)
"[R] qr_dk : ", qr_dk
1464 write(*, *)
"[R] The total number of quartets is ", qi_nnz
1465 write(*, *)
'[R] qi_NN : ', qi_nn
1466 write(*, *)
'[R] qi_PP : ', qi_pp
1467 write(*, *)
'[R] qi_QQ : ', qi_qq
1468 write(*, *)
'[R] qi_RR : ', qi_rr
1469 write(*, *)
'[R] qr_TKern: ', qr_tkern
1470 write(*, *)
'[R] qr_TKurt: ', qr_tkurt
1471 write(*, *)
'[R] qr_dom : ', qr_dom
1472 write(*, *)
'[R] qi_icCos: ', qi_iccos
1473 write(*, *)
'[R] qi_irCsr: ', qi_ircsr
1474 write(*, *)
'[R] Σ_QR : ', qr_sumqr(1: qi_nrsm: ns+1)
1475 write(*, *)
'[R] Σ_P : ', (qr_sumnp(iq, iq), iq = 1, ns)