diff options
| author | stainer_t <thomas.stainer@oecd-nea.org> | 2025-09-08 13:48:49 +0200 |
|---|---|---|
| committer | stainer_t <thomas.stainer@oecd-nea.org> | 2025-09-08 13:48:49 +0200 |
| commit | 7dfcc480ba1e19bd3232349fc733caef94034292 (patch) | |
| tree | 03ee104eb8846d5cc1a981d267687a729185d3f3 /Dragon/src/SPHEMB.f | |
Initial commit from Polytechnique Montreal
Diffstat (limited to 'Dragon/src/SPHEMB.f')
| -rw-r--r-- | Dragon/src/SPHEMB.f | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/Dragon/src/SPHEMB.f b/Dragon/src/SPHEMB.f new file mode 100644 index 0000000..a635a7a --- /dev/null +++ b/Dragon/src/SPHEMB.f @@ -0,0 +1,137 @@ +*DECK SPHEMB + SUBROUTINE SPHEMB(IPLIB,IPCPO,NGRP,NMIX,MIXUPD,IMPX) +* +*----------------------------------------------------------------------- +* +*Purpose: +* Build embedded macrolib and recover depletion data from the +* multicompo. +* +*Copyright: +* Copyright (C) 2008 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, R. Chambon +* +*Parameters: input/output +* IPLIB address of the microlib LCM object. +* IPCPO address of the multicompo object. +* NGRP number of energy groups. +* NMIX maximum number of material mixtures in the microlib. +* MIXUPD tag for mixture which will be updated. +* IMPX print parameter (equal to zero for no print). +* +*----------------------------------------------------------------------- +* + USE GANLIB +*---- +* SUBROUTINE ARGUMENTS +*---- + TYPE(C_PTR) IPLIB,IPCPO + INTEGER NGRP,NMIX + INTEGER MIXUPD(NMIX) +*---- +* LOCAL VARIABLES +*---- + PARAMETER (NSTATE=40,IOUT=6) + CHARACTER HSMG*131 + INTEGER ISTATE(NSTATE),IST1(NSTATE),IST2(NSTATE) + REAL TMPDAY(3) + LOGICAL, ALLOCATABLE, DIMENSION(:) :: MASK,MASKL + INTEGER, POINTER, DIMENSION(:) :: ISONA,ISOMI + REAL, POINTER, DIMENSION(:) :: DENIS + TYPE(C_PTR) ISONA_PTR,ISOMI_PTR,DENIS_PTR +*---- +* RECOVER THE DEPLETION CHAIN +*---- + CALL LCMLEN(IPLIB,'DEPL-CHAIN',ILENG1,ITYLCM) + CALL LCMLEN(IPCPO,'DEPL-CHAIN',ILENG2,ITYLCM) + IF((ILENG1.NE.0).AND.(ILENG2.NE.0)) THEN + CALL LCMSIX(IPCPO,'DEPL-CHAIN',1) + CALL LCMGET(IPCPO,'STATE-VECTOR',IST1) + CALL LCMSIX(IPCPO,' ',2) + CALL LCMSIX(IPLIB,'DEPL-CHAIN',1) + CALL LCMGET(IPLIB,'STATE-VECTOR',IST2) + CALL LCMSIX(IPLIB,' ',2) + DO 100 I=1,NSTATE + IF(IST1(I).NE.IST2(I)) THEN + WRITE(HSMG,'(40HSPHEMB: INVALID STATE-VECTOR COMPONENT (,I2, + 1 36H) FOR DEPL-CHAIN DATA IN MULTICOMPO ,1H.)') I + CALL XABORT(HSMG) + ENDIF + 100 CONTINUE + ELSE IF((ILENG1.EQ.0).AND.(ILENG2.NE.0)) THEN + CALL LCMSIX(IPCPO,'DEPL-CHAIN',1) + CALL LCMSIX(IPLIB,'DEPL-CHAIN',1) + CALL LCMEQU(IPCPO,IPLIB) + CALL LCMSIX(IPLIB,' ',2) + CALL LCMSIX(IPCPO,' ',2) + ENDIF +*---- +* COMPUTE THE MACROSCOPIC X-SECTIONS +*---- + CALL LCMGET(IPLIB,'STATE-VECTOR',ISTATE) + MAXMIX=ISTATE(1) + IF(MAXMIX.NE.NMIX) CALL XABORT('SPHEMB: INVALID NMIX.') + NBISO=ISTATE(2) + ALLOCATE(MASK(MAXMIX),MASKL(NGRP)) + CALL LCMGPD(IPLIB,'ISOTOPESUSED',ISONA_PTR) + CALL LCMGPD(IPLIB,'ISOTOPESMIX',ISOMI_PTR) + CALL LCMGPD(IPLIB,'ISOTOPESDENS',DENIS_PTR) + CALL C_F_POINTER(ISONA_PTR,ISONA,(/ NBISO /)) + CALL C_F_POINTER(ISOMI_PTR,ISOMI,(/ NBISO /)) + CALL C_F_POINTER(DENIS_PTR,DENIS,(/ NBISO /)) + MASK(:MAXMIX)=.FALSE. + MASKL(:NGRP)=.TRUE. + DO 110 ISOT=1,NBISO + IBM=ISOMI(ISOT) + IF(IBM.GT.0) THEN + IF(MIXUPD(IBM).NE.0) MASK(IBM)=.TRUE. + ENDIF + 110 CONTINUE + ITSTMP=0 + TMPDAY(1)=0.0 + TMPDAY(2)=0.0 + TMPDAY(3)=0.0 + CALL LIBMIX(IPLIB,MAXMIX,NGRP,NBISO,ISONA,ISOMI,DENIS,MASK,MASKL, + 1 ITSTMP,TMPDAY) + DEALLOCATE(MASKL,MASK) +*---- +* RECOVER GENERAL INFORMATION FROM MICROLIB +*---- + B2=0.0 + CALL LCMLEN(IPLIB,'K-EFFECTIVE',ILENG,ITYLCM) + IF(ILENG.EQ.1) THEN + CALL LCMGET(IPLIB,'K-EFFECTIVE',FLOTT) + CALL LCMSIX(IPLIB,'MACROLIB',1) + CALL LCMPUT(IPLIB,'K-EFFECTIVE',1,2,FLOTT) + CALL LCMSIX(IPLIB,' ',2) + IF(IMPX.GT.1) THEN + WRITE(6,'(22H SPHCPO: K-EFFECTIVE =,1P,E13.6)') FLOTT + ENDIF + ENDIF + CALL LCMLEN(IPLIB,'K-INFINITY',ILENG,ITYLCM) + IF(ILENG.EQ.1) THEN + CALL LCMGET(IPLIB,'K-INFINITY',FLOTT) + CALL LCMSIX(IPLIB,'MACROLIB',1) + CALL LCMPUT(IPLIB,'K-INFINITY',1,2,FLOTT) + CALL LCMSIX(IPLIB,' ',2) + IF(IMPX.GT.1) THEN + WRITE(6,'(21H SPHCPO: K-INFINITY =,1P,E13.6)') FLOTT + ENDIF + ENDIF + CALL LCMLEN(IPLIB,'B2 B1HOM',ILENG,ITYLCM) + IF(ILENG.EQ.1) THEN + CALL LCMGET(IPLIB,'B2 B1HOM',B2) + CALL LCMSIX(IPLIB,'MACROLIB',1) + CALL LCMPUT(IPLIB,'B2 B1HOM',1,2,B2) + CALL LCMSIX(IPLIB,' ',2) + IF(IMPX.GT.1) THEN + WRITE(6,'(13H SPHCPO: B2 =,1P,E14.6)') B2 + ENDIF + ENDIF + RETURN + END |
