summaryrefslogtreecommitdiff
path: root/Dragon/src/APXSX2.f
diff options
context:
space:
mode:
authorstainer_t <thomas.stainer@oecd-nea.org>2025-09-08 13:48:49 +0200
committerstainer_t <thomas.stainer@oecd-nea.org>2025-09-08 13:48:49 +0200
commit7dfcc480ba1e19bd3232349fc733caef94034292 (patch)
tree03ee104eb8846d5cc1a981d267687a729185d3f3 /Dragon/src/APXSX2.f
Initial commit from Polytechnique Montreal
Diffstat (limited to 'Dragon/src/APXSX2.f')
-rw-r--r--Dragon/src/APXSX2.f529
1 files changed, 529 insertions, 0 deletions
diff --git a/Dragon/src/APXSX2.f b/Dragon/src/APXSX2.f
new file mode 100644
index 0000000..cbbbde5
--- /dev/null
+++ b/Dragon/src/APXSX2.f
@@ -0,0 +1,529 @@
+*DECK APXSX2
+ SUBROUTINE APXSX2(IPAPX,IPTEMP,NGRP,NL,NMAC,NISO,NMIL,IMIL,ITRANC,
+ 1 RECNAM,NOMMAC,TYPISO,NOMREA,IPERM,CONCES,B2)
+*
+*-----------------------------------------------------------------------
+*
+*Purpose:
+* Recover the cross sections of an elementary calculation and single
+* mixture in the edit structure and copy them in the Apex file.
+*
+*Copyright:
+* Copyright (C) 2025 Ecole Polytechnique de Montreal
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU Lesser General Public
+* License as published by the Free Software Foundation; either
+* version 2.1 of the License, or (at your option) any later version
+*
+*Author(s): A. Hebert
+*
+*Parameters: input
+* IPAPX pointer to the Apex file.
+* IPTEMP pointer to the edit structure.
+* NGRP number of energy groups in the Apex file.
+* NL number of Legendre orders.
+* NMAC number of macroscopic sets in the Apex file.
+* NISO number of particularized isotopes in the Apex file.
+* NMIL number of mixtures in the Apex file.
+* ITRANC
+* IMIL mixture index.
+* RECNAM character identification of calculation.
+* NOMMAC names of the macroscopic sets.
+* TYPISO types of the particularized isotopes.
+* NOMREA name of the Apex reaction.
+* IPERM pointer to the particularized isotopes in the edit structure.
+* CONCES number densities of particularized isotopes.
+* B2 buckling.
+*
+*-----------------------------------------------------------------------
+*
+ USE GANLIB
+ USE hdf5_wrap
+*----
+* SUBROUTINE ARGUMENTS
+*----
+ TYPE(C_PTR) IPAPX,IPTEMP,IPERM(NISO)
+ CHARACTER*80 RECNAM
+ CHARACTER*4 TYPISO(NISO)
+ CHARACTER*8 NOMMAC(NMAC)
+ CHARACTER*12 NOMREA
+ INTEGER NGRP,NL,NMAC,NISO,IMIL,ITRANC
+ REAL B2,CONCES(NISO)
+*----
+* LOCAL VARIABLES
+*----
+ TYPE(C_PTR) JPEDIT,KPEDIT
+ INTEGER RANK,TYPE,NBYTE,DIMSR(5)
+ CHARACTER RECNAM2*80,CM*2,TEXT12*12
+*----
+* ALLOCATABLE ARRAYS
+*----
+ INTEGER, ALLOCATABLE, DIMENSION(:) :: JSO,ITYPR,IPOS,NJJ,IJJ
+ REAL, ALLOCATABLE, DIMENSION(:) :: WORK1D,WO1D
+ REAL, ALLOCATABLE, DIMENSION(:,:) :: WORK2D,WP2D,WF2D,WO2D
+ REAL, ALLOCATABLE, DIMENSION(:,:,:) :: WORK3D,WP3D,WF3D,WO3D
+ REAL, ALLOCATABLE, DIMENSION(:,:,:,:) :: WP4D,WF4D,WO4D
+*----
+* FIND NISOP, NISOF AND NISOO
+*----
+ NISOF=0
+ NISOP=0
+ NISOO=0
+ IF(NISO.EQ.0) GO TO 10
+ ALLOCATE(JSO(NISO))
+ DO ISO=1,NISO
+ IF(TYPISO(ISO).EQ.'FISS') THEN
+ NISOF=NISOF+1
+ JSO(ISO)=NISOF
+ ELSE IF(TYPISO(ISO).EQ.'F.P.') THEN
+ NISOP=NISOP+1
+ JSO(ISO)=NISOP
+ ELSE IF(TYPISO(ISO).EQ.'OTHE') THEN
+ NISOO=NISOO+1
+ JSO(ISO)=NISOO
+ ENDIF
+ ENDDO
+ IF(NISOF.GT.0) THEN
+ CALL hdf5_create_group(IPAPX,TRIM(RECNAM)//"mic/fiss/")
+ ENDIF
+ IF(NISOP.GT.0) THEN
+ CALL hdf5_create_group(IPAPX,TRIM(RECNAM)//"mic/f.p. /")
+ ENDIF
+ IF(NISOO.GT.0) THEN
+ CALL hdf5_create_group(IPAPX,TRIM(RECNAM)//"mic/othe/")
+ ENDIF
+*----
+* RECOVER DIFF AND SCAT OF PARTICULARIZED ISOTOPES
+*----
+ IF((NOMREA.EQ.'DIFF').OR.(NOMREA.EQ.'SCAT')) THEN
+ ALLOCATE(WF3D(NGRP,NL,NISOF),WP3D(NGRP,NL,NISOP),
+ 1 WO3D(NGRP,NL,NISOO),WF4D(NGRP,NGRP,NL,NISOF),
+ 2 WP4D(NGRP,NGRP,NL,NISOP),WO4D(NGRP,NGRP,NL,NISOO))
+ WF3D(:NGRP,:NL,:NISOF)=0.0
+ WP3D(:NGRP,:NL,:NISOP)=0.0
+ WO3D(:NGRP,:NL,:NISOO)=0.0
+ WF4D(:NGRP,:NGRP,:NL,:NISOF)=0.0
+ WP4D(:NGRP,:NGRP,:NL,:NISOP)=0.0
+ WO4D(:NGRP,:NGRP,:NL,:NISOO)=0.0
+ DO ISO=1,NISO
+ IF(.NOT.C_ASSOCIATED(IPERM(ISO))) CYCLE
+ DO IL=1,NL
+ WRITE(CM,'(I2.2)') IL-1
+ CALL LCMLEN(IPERM(ISO),'SCAT'//CM,ILONG,ITYLCM)
+ IF(ILONG.EQ.0) CYCLE
+ FACT=2.0*REAL(IL)-1.0
+ ALLOCATE(WORK2D(NGRP,NL),WORK3D(NGRP,NGRP,NL),ITYPR(NL))
+ CALL XDRLGS(IPERM(ISO),-1,0,0,NL-1,1,NGRP,WORK2D,WORK3D,
+ 1 ITYPR)
+ IF(TYPISO(ISO).EQ.'FISS') THEN
+ WF3D(:,:,JSO(ISO))=WORK2D(:,:)
+ WF4D(:,:,:,JSO(ISO))=WORK3D(:,:,:)*FACT
+ ELSE IF(TYPISO(ISO).EQ.'F.P.') THEN
+ WP3D(:,:,JSO(ISO))=WORK2D(:,:)
+ WP4D(:,:,:,JSO(ISO))=WORK3D(:,:,:)*FACT
+ ELSE IF(TYPISO(ISO).EQ.'OTHE') THEN
+ WO3D(:,:,JSO(ISO))=WORK2D(:,:)
+ WO4D(:,:,:,JSO(ISO))=WORK3D(:,:,:)*FACT
+ ENDIF
+ DEALLOCATE(ITYPR,WORK3D,WORK2D)
+ ENDDO
+ ENDDO
+ ! remove (n,2n) from 'DIFF'
+ DO ISO=1,NISO
+ IF(.NOT.C_ASSOCIATED(IPERM(ISO))) CYCLE
+ CALL LCMLEN(IPERM(ISO),'N2N',ILONG,ITYLCM)
+ IF(ILONG.GT.0) THEN
+ ALLOCATE(WORK1D(NGRP))
+ CALL LCMGET(IPERM(ISO),'N2N',WORK1D)
+ IF(TYPISO(ISO).EQ.'FISS') THEN
+ WF3D(:,1,JSO(ISO))=WF3D(:,1,JSO(ISO))-WORK1D(:)
+ ELSE IF(TYPISO(ISO).EQ.'F.P.') THEN
+ WP3D(:,1,JSO(ISO))=WF3D(:,1,JSO(ISO))-WORK1D(:)
+ ELSE IF(TYPISO(ISO).EQ.'OTHE') THEN
+ WO3D(:,1,JSO(ISO))=WF3D(:,1,JSO(ISO))-WORK1D(:)
+ ENDIF
+ DEALLOCATE(WORK1D)
+ ENDIF
+ ENDDO
+ ! remove (n,3n) from 'DIFF'
+ DO ISO=1,NISO
+ IF(.NOT.C_ASSOCIATED(IPERM(ISO))) CYCLE
+ CALL LCMLEN(IPERM(ISO),'N3N',ILONG,ITYLCM)
+ IF(ILONG.GT.0) THEN
+ ALLOCATE(WORK1D(NGRP))
+ CALL LCMGET(IPERM(ISO),'N3N',WORK1D)
+ IF(TYPISO(ISO).EQ.'FISS') THEN
+ WF3D(:,1,JSO(ISO))=WF3D(:,1,JSO(ISO))-2.0*WORK1D(:)
+ ELSE IF(TYPISO(ISO).EQ.'F.P.') THEN
+ WP3D(:,1,JSO(ISO))=WF3D(:,1,JSO(ISO))-2.0*WORK1D(:)
+ ELSE IF(TYPISO(ISO).EQ.'OTHE') THEN
+ WO3D(:,1,JSO(ISO))=WF3D(:,1,JSO(ISO))-2.0*WORK1D(:)
+ ENDIF
+ DEALLOCATE(WORK1D)
+ ENDIF
+ ENDDO
+ IF(NOMREA.EQ.'DIFF') THEN
+ IF(NISOF.GT.0) THEN
+ WRITE(RECNAM2,'(A,9Hmic/fiss/,A)') TRIM(RECNAM),'DIFF'
+ CALL hdf5_write_data(IPAPX,RECNAM2,WF3D)
+ ENDIF
+ IF(NISOP.GT.0) THEN
+ WRITE(RECNAM2,'(A,10Hmic/f.p. /,A)') TRIM(RECNAM),'DIFF'
+ CALL hdf5_write_data(IPAPX,RECNAM2,WP3D)
+ ENDIF
+ IF(NISOO.GT.0) THEN
+ WRITE(RECNAM2,'(A,9Hmic/othe/,A)') TRIM(RECNAM),'DIFF'
+ CALL hdf5_write_data(IPAPX,RECNAM2,WO3D)
+ ENDIF
+ ELSE IF(NOMREA.EQ.'SCAT') THEN
+ IF(NISOF.GT.0) THEN
+ WRITE(RECNAM2,'(A,9Hmic/fiss/,A)') TRIM(RECNAM),'SCAT'
+ CALL hdf5_write_data(IPAPX,RECNAM2,WF4D)
+ ENDIF
+ IF(NISOP.GT.0) THEN
+ WRITE(RECNAM2,'(A,10Hmic/f.p. /,A)') TRIM(RECNAM),'SCAT'
+ CALL hdf5_write_data(IPAPX,RECNAM2,WP4D)
+ ENDIF
+ IF(NISOO.GT.0) THEN
+ WRITE(RECNAM2,'(A,9Hmic/othe/,A)') TRIM(RECNAM),'SCAT'
+ CALL hdf5_write_data(IPAPX,RECNAM2,WO4D)
+ ENDIF
+ ENDIF
+ DEALLOCATE(WO4D,WP4D,WF4D,WO3D,WP3D,WF3D)
+ GO TO 10
+ ENDIF
+*----
+* RECOVER OTHER REACTIONS OF PARTICULARIZED ISOTOPES
+*----
+ ALLOCATE(WF2D(NGRP,NISOF),WP2D(NGRP,NISOP),WO2D(NGRP,NISOO))
+ WF2D(:NGRP,:NISOF)=0.0
+ WP2D(:NGRP,:NISOP)=0.0
+ WO2D(:NGRP,:NISOO)=0.0
+ IF(NOMREA.EQ.'ABSO') THEN
+ DO ISO=1,NISO
+ IF(.NOT.C_ASSOCIATED(IPERM(ISO))) CYCLE
+ CALL LCMLEN(IPERM(ISO),'NTOT0',ILONG,ITYLCM)
+ IF(ILONG.EQ.0) CYCLE
+ ALLOCATE(WORK1D(NGRP))
+ CALL LCMGET(IPERM(ISO),'NTOT0',WORK1D)
+ IF(TYPISO(ISO).EQ.'FISS') THEN
+ WF2D(:,JSO(ISO))=WORK1D(:)
+ ELSE IF(TYPISO(ISO).EQ.'F.P.') THEN
+ WP2D(:,JSO(ISO))=WORK1D(:)
+ ELSE IF(TYPISO(ISO).EQ.'OTHE') THEN
+ WO2D(:,JSO(ISO))=WORK1D(:)
+ ENDIF
+ DEALLOCATE(WORK1D)
+ ENDDO
+ ! remove 'DIFF' from 'TOTA'
+ DO ISO=1,NISO
+ IF(.NOT.C_ASSOCIATED(IPERM(ISO))) CYCLE
+ IF(TYPISO(ISO).EQ.'FISS') THEN
+ WRITE(RECNAM2,'(A,9Hmic/fiss/,A)') TRIM(RECNAM),'DIFF'
+ CALL hdf5_info(IPAPX,RECNAM2,RANK,TYPE,NBYTE,DIMSR)
+ IF(TYPE.EQ.99) CALL XABORT('APXSX2: MISSING DIFF INFO(1).')
+ CALL hdf5_read_data(IPAPX,RECNAM2,WF3D)
+ WF2D(:,JSO(ISO))=WF2D(:,JSO(ISO))-WF3D(:,1,JSO(ISO))
+ DEALLOCATE(WF3D)
+ ELSE IF(TYPISO(ISO).EQ.'F.P.') THEN
+ WRITE(RECNAM2,'(A,10Hmic/f.p. /,A)') TRIM(RECNAM),'DIFF'
+ CALL hdf5_info(IPAPX,RECNAM2,RANK,TYPE,NBYTE,DIMSR)
+ IF(TYPE.EQ.99) CALL XABORT('APXSX2: MISSING DIFF INFO(2).')
+ CALL hdf5_read_data(IPAPX,RECNAM2,WP3D)
+ WP2D(:,JSO(ISO))=WP2D(:,JSO(ISO))-WP3D(:,1,JSO(ISO))
+ DEALLOCATE(WP3D)
+ ELSE IF(TYPISO(ISO).EQ.'OTHE') THEN
+ WRITE(RECNAM2,'(A,9Hmic/othe/,A)') TRIM(RECNAM),'DIFF'
+ CALL hdf5_info(IPAPX,RECNAM2,RANK,TYPE,NBYTE,DIMSR)
+ IF(TYPE.EQ.99) CALL XABORT('APXSX2: MISSING DIFF INFO(3).')
+ CALL hdf5_read_data(IPAPX,RECNAM2,WO3D)
+ WO2D(:,JSO(ISO))=WO2D(:,JSO(ISO))-WO3D(:,1,JSO(ISO))
+ DEALLOCATE(WO3D)
+ ENDIF
+ ENDDO
+ ELSE
+ IF(NOMREA.EQ.'TOTA') THEN
+ TEXT12='NTOT0'
+ ELSE IF(NOMREA.EQ.'TOT1') THEN
+ TEXT12='NTOT1'
+ ELSE IF(NOMREA.EQ.'NUFI') THEN
+ TEXT12='NUSIGF'
+ ELSE IF(NOMREA.EQ.'FISS') THEN
+ TEXT12='NFTOT'
+ ELSE IF(NOMREA.EQ.'ENER') THEN
+ TEXT12='H-FACTOR'
+ ELSE IF((NOMREA.EQ.'CORR').AND.(ITRANC.EQ.1).AND.(NL.GE.2)) THEN
+ TEXT12='SIGS01'
+ ELSE IF((NOMREA.EQ.'CORR').AND.(ITRANC.EQ.2)) THEN
+ TEXT12='TRANC'
+ ELSE
+ TEXT12=NOMREA
+ ENDIF
+ DO ISO=1,NISO
+ IF(.NOT.C_ASSOCIATED(IPERM(ISO))) CYCLE
+ CALL LCMLEN(IPERM(ISO),TEXT12,ILONG,ITYLCM)
+ IF(ILONG.EQ.0) CYCLE
+ ALLOCATE(WORK1D(NGRP))
+ CALL LCMGET(IPERM(ISO),TEXT12,WORK1D)
+ IF(TYPISO(ISO).EQ.'FISS') THEN
+ WF2D(:,JSO(ISO))=WORK1D(:)
+ ELSE IF(TYPISO(ISO).EQ.'F.P.') THEN
+ WP2D(:,JSO(ISO))=WORK1D(:)
+ ELSE IF(TYPISO(ISO).EQ.'OTHE') THEN
+ WO2D(:,JSO(ISO))=WORK1D(:)
+ ENDIF
+ DEALLOCATE(WORK1D)
+ ENDDO
+ IF(NOMREA.EQ.'ENER') THEN
+ WF2D(:,:)=WF2D(:,:)*1.0E-6
+ WP2D(:,:)=WP2D(:,:)*1.0E-6
+ WO2D(:,:)=WO2D(:,:)*1.0E-6
+ ELSE IF(NOMREA.EQ.'LEAK') THEN
+ WF2D(:,:)=WF2D(:,:)*B2
+ WP2D(:,:)=WP2D(:,:)*B2
+ WO2D(:,:)=WO2D(:,:)*B2
+ ENDIF
+ ENDIF
+ IF(NISOF.GT.0) THEN
+ WRITE(RECNAM2,'(A,9Hmic/fiss/,A)') TRIM(RECNAM),TRIM(NOMREA)
+ CALL hdf5_write_data(IPAPX,RECNAM2,WF2D)
+ ENDIF
+ IF(NISOP.GT.0) THEN
+ WRITE(RECNAM2,'(A,10Hmic/f.p. /,A)') TRIM(RECNAM),TRIM(NOMREA)
+ CALL hdf5_write_data(IPAPX,RECNAM2,WP2D)
+ ENDIF
+ IF(NISOO.GT.0) THEN
+ WRITE(RECNAM2,'(A,9Hmic/othe/,A)') TRIM(RECNAM),TRIM(NOMREA)
+ CALL hdf5_write_data(IPAPX,RECNAM2,WO2D)
+ ENDIF
+ DEALLOCATE(WO2D,WP2D,WF2D)
+*----
+* RECOVER DIFF AND SCAT OF MACROSCOPIC SETS
+*----
+ 10 CALL LCMSIX(IPTEMP,'MACROLIB',1)
+ JPEDIT=LCMGID(IPTEMP,'GROUP')
+ IF(NMAC.GT.0) THEN
+ CALL hdf5_create_group(IPAPX,TRIM(RECNAM)//"mac/TOTAL/")
+ ENDIF
+ DO IMAC=1,NMAC
+ IF(NOMMAC(IMAC).EQ.'TOTAL') THEN
+ IF((NOMREA.EQ.'DIFF').OR.(NOMREA.EQ.'SCAT')) THEN
+ ALLOCATE(WO2D(NGRP,NL),WO3D(NGRP,NGRP,NL))
+ WO2D(:NGRP,:NL)=0.0
+ WO3D(:NGRP,:NGRP,:NL)=0.0
+ DO IGR=1,NGRP
+ KPEDIT=LCMGIL(JPEDIT,IGR)
+ ALLOCATE(IJJ(NMIL),NJJ(NMIL),IPOS(NMIL),WORK1D(NGRP*NMIL))
+ DO IL=1,NL
+ WRITE(CM,'(I2.2)') IL-1
+ CALL LCMLEN(KPEDIT,'SCAT'//CM,ILONG,ITYLCM)
+ IF(ILONG.EQ.0) CYCLE
+ CALL LCMGET(KPEDIT,'IJJS'//CM,IJJ)
+ CALL LCMGET(KPEDIT,'NJJS'//CM,NJJ)
+ CALL LCMGET(KPEDIT,'IPOS'//CM,IPOS)
+ CALL LCMGET(KPEDIT,'SCAT'//CM,WORK1D)
+ IPO=IPOS(IMIL)
+ J2=IJJ(IMIL)
+ J1=IJJ(IMIL)-NJJ(IMIL)+1
+ DO JGR=J2,J1,-1
+ WO2D(JGR,IL)=WO2D(JGR,IL)+WORK1D(IPO)
+ WO3D(IGR,JGR,IL)=WORK1D(IPO)*REAL(2*IL-1)
+ IPO=IPO+1
+ ENDDO
+ ENDDO ! IL
+ DEALLOCATE(WORK1D,IPOS,NJJ,IJJ)
+ ! remove (n,2n) from 'DIFF'
+ CALL LCMLEN(KPEDIT,'N2N',ILONG,ITYLCM)
+ IF(ILONG.GT.0) THEN
+ ALLOCATE(WORK1D(NMIL))
+ CALL LCMGET(KPEDIT,'N2N',WORK1D)
+ WO2D(IGR,1)=WO2D(IGR,1)-WORK1D(IMIL)
+ DEALLOCATE(WORK1D)
+ ENDIF
+ ! remove (n,2n) from 'DIFF'
+ CALL LCMLEN(KPEDIT,'N2N',ILONG,ITYLCM)
+ IF(ILONG.GT.0) THEN
+ ALLOCATE(WORK1D(NMIL))
+ CALL LCMGET(KPEDIT,'N2N',WORK1D)
+ WO2D(IGR,1)=WO2D(IGR,1)-2.0*WORK1D(IMIL)
+ DEALLOCATE(WORK1D)
+ ENDIF
+ ENDDO ! IGR
+ IF(NOMREA.EQ.'DIFF') THEN
+ WRITE(RECNAM2,'(A,10Hmac/TOTAL/,A)') TRIM(RECNAM),'DIFF'
+ CALL hdf5_write_data(IPAPX,RECNAM2,WO2D)
+ ELSE IF(NOMREA.EQ.'SCAT') THEN
+ WRITE(RECNAM2,'(A,10Hmac/TOTAL/,A)') TRIM(RECNAM),'SCAT'
+ CALL hdf5_write_data(IPAPX,RECNAM2,WO3D)
+ ENDIF
+ DEALLOCATE(WO3D,WO2D)
+*----
+* RECOVER OTHER REACTIONS OF MACROSCOPIC SETS
+*----
+ ELSE IF(NOMREA.EQ.'ABSO') THEN
+ ALLOCATE(WO1D(NGRP))
+ WO1D(:NGRP)=0.0
+ DO IGR=1,NGRP
+ KPEDIT=LCMGIL(JPEDIT,IGR)
+ CALL LCMLEN(KPEDIT,'NTOT0',ILONG,ITYLCM)
+ IF(ILONG.EQ.0) CYCLE
+ ALLOCATE(WORK1D(NMIL))
+ CALL LCMGET(KPEDIT,'NTOT0',WORK1D)
+ WO1D(IGR)=WORK1D(IMIL)
+ DEALLOCATE(WORK1D)
+ ENDDO
+ ! remove 'DIFF' from 'TOTA'
+ WRITE(RECNAM2,'(A,10Hmac/TOTAL/,A)') TRIM(RECNAM),'DIFF'
+ CALL hdf5_info(IPAPX,RECNAM2,RANK,TYPE,NBYTE,DIMSR)
+ IF(TYPE.EQ.99) CALL XABORT('APXSX2: MISSING DIFF INFO(4).')
+ CALL hdf5_read_data(IPAPX,RECNAM2,WO2D)
+ WO1D(:)=WO1D(:)-WO2D(:,1)
+ DEALLOCATE(WO2D)
+ WRITE(RECNAM2,'(A,10Hmac/TOTAL/,A)') TRIM(RECNAM),'ABSO'
+ CALL hdf5_write_data(IPAPX,RECNAM2,WO1D)
+ DEALLOCATE(WO1D)
+ ELSE
+ IF(NOMREA.EQ.'TOTA') THEN
+ TEXT12='NTOT0'
+ ELSE IF(NOMREA.EQ.'TOT1') THEN
+ TEXT12='NTOT1'
+ ELSE IF(NOMREA.EQ.'NUFI') THEN
+ TEXT12='NUSIGF'
+ ELSE IF(NOMREA.EQ.'FISS') THEN
+ TEXT12='NFTOT'
+ ELSE IF(NOMREA.EQ.'ENER') THEN
+ TEXT12='H-FACTOR'
+ ELSE IF(NOMREA.EQ.'LEAK') THEN
+ TEXT12='DIFF'
+ ELSE
+ TEXT12=NOMREA
+ ENDIF
+ ALLOCATE(WO1D(NGRP))
+ WO1D(:NGRP)=0.0
+ DO IGR=1,NGRP
+ KPEDIT=LCMGIL(JPEDIT,IGR)
+ CALL LCMLEN(KPEDIT,TEXT12,ILONG,ITYLCM)
+ IF(ILONG.EQ.0) CYCLE
+ ALLOCATE(WORK1D(NMIL))
+ CALL LCMGET(KPEDIT,TEXT12,WORK1D)
+ WO1D(IGR)=WORK1D(IMIL)
+ DEALLOCATE(WORK1D)
+ ENDDO
+ IF(NOMREA.EQ.'ENER') THEN
+ WO1D(:)=WO1D(:)*1.0E-6
+ ELSE IF(NOMREA.EQ.'LEAK') THEN
+ WO1D(:)=WO1D(:)*B2
+ ENDIF
+ WRITE(RECNAM2,'(A,10Hmac/TOTAL/,A)') TRIM(RECNAM),
+ 1 TRIM(NOMREA)
+ CALL hdf5_write_data(IPAPX,RECNAM2,WO1D)
+ DEALLOCATE(WO1D)
+ ENDIF
+ ELSE IF(NOMMAC(IMAC).EQ.'RESIDUAL') THEN
+ ! substract particularized contributions
+ CALL hdf5_create_group(IPAPX,TRIM(RECNAM)//"mac/RESIDUAL/")
+ IF(NOMREA.EQ.'DIFF') THEN
+ WRITE(RECNAM2,'(A,10Hmac/TOTAL/,A)') TRIM(RECNAM),'DIFF'
+ CALL hdf5_read_data(IPAPX,RECNAM2,WORK2D)
+ IF(NISOF.GT.0) THEN
+ WRITE(RECNAM2,'(A,9Hmic/fiss/,A)') TRIM(RECNAM),'DIFF'
+ CALL hdf5_read_data(IPAPX,RECNAM2,WF3D)
+ ENDIF
+ IF(NISOP.GT.0) THEN
+ WRITE(RECNAM2,'(A,10Hmic/f.p. /,A)') TRIM(RECNAM),'DIFF'
+ CALL hdf5_read_data(IPAPX,RECNAM2,WP3D)
+ ENDIF
+ IF(NISOO.GT.0) THEN
+ WRITE(RECNAM2,'(A,9Hmic/othe/,A)') TRIM(RECNAM),'DIFF'
+ CALL hdf5_read_data(IPAPX,RECNAM2,WO3D)
+ ENDIF
+ DO ISO=1,NISO
+ CONC=CONCES(ISO)
+ IF(TYPISO(ISO).EQ.'FISS') THEN
+ WORK2D(:,:)=WORK2D(:,:)-CONC*WF3D(:,:,JSO(ISO))
+ ELSE IF(TYPISO(ISO).EQ.'F.P.') THEN
+ WORK2D(:,:)=WORK2D(:,:)-CONC*WP3D(:,:,JSO(ISO))
+ ELSE IF(TYPISO(ISO).EQ.'OTHE') THEN
+ WORK2D(:,:)=WORK2D(:,:)-CONC*WO3D(:,:,JSO(ISO))
+ ENDIF
+ ENDDO
+ IF(NISOF.GT.0) DEALLOCATE(WF3D)
+ IF(NISOP.GT.0) DEALLOCATE(WP3D)
+ IF(NISOO.GT.0) DEALLOCATE(WO3D)
+ WRITE(RECNAM2,'(A,13Hmac/RESIDUAL/,A)') TRIM(RECNAM),'DIFF'
+ CALL hdf5_write_data(IPAPX,RECNAM2,WORK2D)
+ DEALLOCATE(WORK2D)
+ ELSE IF(NOMREA.EQ.'SCAT') THEN
+ WRITE(RECNAM2,'(A,10Hmac/TOTAL/,A)') TRIM(RECNAM),'SCAT'
+ CALL hdf5_read_data(IPAPX,RECNAM2,WORK3D)
+ IF(NISOF.GT.0) THEN
+ WRITE(RECNAM2,'(A,9Hmic/fiss/,A)') TRIM(RECNAM),'SCAT'
+ CALL hdf5_read_data(IPAPX,RECNAM2,WF4D)
+ ENDIF
+ IF(NISOP.GT.0) THEN
+ WRITE(RECNAM2,'(A,10Hmic/f.p. /,A)') TRIM(RECNAM),'SCAT'
+ CALL hdf5_read_data(IPAPX,RECNAM2,WP4D)
+ ENDIF
+ IF(NISOO.GT.0) THEN
+ WRITE(RECNAM2,'(A,9Hmic/othe/,A)') TRIM(RECNAM),'SCAT'
+ CALL hdf5_read_data(IPAPX,RECNAM2,WO4D)
+ ENDIF
+ DO ISO=1,NISO
+ CONC=CONCES(ISO)
+ IF(TYPISO(ISO).EQ.'FISS') THEN
+ WORK3D(:,:,:)=WORK3D(:,:,:)-CONC*WF4D(:,:,:,JSO(ISO))
+ ELSE IF(TYPISO(ISO).EQ.'F.P.') THEN
+ WORK3D(:,:,:)=WORK3D(:,:,:)-CONC*WP4D(:,:,:,JSO(ISO))
+ ELSE IF(TYPISO(ISO).EQ.'OTHE') THEN
+ WORK3D(:,:,:)=WORK3D(:,:,:)-CONC*WO4D(:,:,:,JSO(ISO))
+ ENDIF
+ ENDDO
+ IF(NISOF.GT.0) DEALLOCATE(WF4D)
+ IF(NISOP.GT.0) DEALLOCATE(WP4D)
+ IF(NISOO.GT.0) DEALLOCATE(WO4D)
+ WRITE(RECNAM2,'(A,13Hmac/RESIDUAL/,A)') TRIM(RECNAM),'SCAT'
+ CALL hdf5_write_data(IPAPX,RECNAM2,WORK3D)
+ DEALLOCATE(WORK3D)
+ ELSE
+ WRITE(RECNAM2,'(A,10Hmac/TOTAL/,A)') TRIM(RECNAM),
+ 1 TRIM(NOMREA)
+ CALL hdf5_read_data(IPAPX,RECNAM2,WORK1D)
+ IF(NISOF.GT.0) THEN
+ WRITE(RECNAM2,'(A,9Hmic/fiss/,A)') TRIM(RECNAM),
+ 1 TRIM(NOMREA)
+ CALL hdf5_read_data(IPAPX,RECNAM2,WF2D)
+ ENDIF
+ IF(NISOP.GT.0) THEN
+ WRITE(RECNAM2,'(A,10Hmic/f.p. /,A)') TRIM(RECNAM),
+ 1 TRIM(NOMREA)
+ CALL hdf5_read_data(IPAPX,RECNAM2,WP2D)
+ ENDIF
+ IF(NISOO.GT.0) THEN
+ WRITE(RECNAM2,'(A,9Hmic/othe/,A)') TRIM(RECNAM),
+ 1 TRIM(NOMREA)
+ CALL hdf5_read_data(IPAPX,RECNAM2,WO2D)
+ ENDIF
+ DO ISO=1,NISO
+ CONC=CONCES(ISO)
+ IF(TYPISO(ISO).EQ.'FISS') THEN
+ WORK1D(:)=WORK1D(:)-CONC*WF2D(:,JSO(ISO))
+ ELSE IF(TYPISO(ISO).EQ.'F.P.') THEN
+ WORK1D(:)=WORK1D(:)-CONC*WP2D(:,JSO(ISO))
+ ELSE IF(TYPISO(ISO).EQ.'OTHE') THEN
+ WORK1D(:)=WORK1D(:)-CONC*WO2D(:,JSO(ISO))
+ ENDIF
+ ENDDO
+ IF(NISOF.GT.0) DEALLOCATE(WF2D)
+ IF(NISOP.GT.0) DEALLOCATE(WP2D)
+ IF(NISOO.GT.0) DEALLOCATE(WO2D)
+ WRITE(RECNAM2,'(A,13Hmac/RESIDUAL/,A)') TRIM(RECNAM),
+ 1 TRIM(NOMREA)
+ CALL hdf5_write_data(IPAPX,RECNAM2,WORK1D)
+ DEALLOCATE(WORK1D)
+ ENDIF
+ ENDIF
+ ENDDO
+ CALL LCMSIX(IPTEMP,' ',2)
+ IF(NISO.GT.0) DEALLOCATE(JSO)
+ RETURN
+ END