summaryrefslogtreecommitdiff
path: root/Donjon/src/SCRMEM.f
diff options
context:
space:
mode:
Diffstat (limited to 'Donjon/src/SCRMEM.f')
-rw-r--r--Donjon/src/SCRMEM.f95
1 files changed, 95 insertions, 0 deletions
diff --git a/Donjon/src/SCRMEM.f b/Donjon/src/SCRMEM.f
new file mode 100644
index 0000000..5f5f38f
--- /dev/null
+++ b/Donjon/src/SCRMEM.f
@@ -0,0 +1,95 @@
+*DECK SCRMEM
+ SUBROUTINE SCRMEM(IPSAP,IPMEM,NCAL,NMIL,NMIX,TERP,MIXC)
+*
+*-----------------------------------------------------------------------
+*
+*Purpose:
+* Copy a Saphyb into memory taking care to keep only required
+* calculations and mixtures.
+*
+*Copyright:
+* Copyright (C) 2013 Ecole Polytechnique de Montreal
+*
+*Author(s):
+* A. Hebert
+*
+*Parameters: input
+* IPSAP address of the Saphyb object.
+* IPMEM address of the simplified Saphyb in memory created by SCRMEM.
+* NCAL number of elementary calculations in the Saphyb.
+* NMIL number of material mixtures in the Saphyb
+* NMIX maximum number of material mixtures in the microlib.
+* TERP interpolation factors.
+* MIXC mixture index in the Saphyb corresponding to each microlib
+* mixture.
+*
+*-----------------------------------------------------------------------
+*
+ USE GANLIB
+ IMPLICIT NONE
+*----
+* SUBROUTINE ARGUMENTS
+*----
+ TYPE(C_PTR) IPSAP,IPMEM
+ INTEGER NCAL,NMIL,NMIX,MIXC(NMIX)
+ REAL TERP(NCAL,NMIX)
+*----
+* LOCAL VARIABLES
+*----
+ INTEGER DIMSAP(50)
+ INTEGER IBM, IBMOLD, ICAL, ILONG, ITYLCM
+ CHARACTER SIGN*12,TEXT12*12
+ TYPE(C_PTR) JPSAP,KPSAP,JPMEM1,JPMEM2,KPMEM1,KPMEM2
+*
+ CALL LCMOP(IPMEM,'*tempSaphyb*',0,1,0)
+ CALL LCMGTC(IPSAP,'SIGNATURE',12,SIGN)
+ CALL LCMPTC(IPMEM,'SIGNATURE',12,SIGN)
+ CALL LCMGET(IPSAP,'DIMSAP',DIMSAP)
+ CALL LCMPUT(IPMEM,'DIMSAP',50,1,DIMSAP)
+ JPSAP=LCMGID(IPSAP,'constphysiq')
+ JPMEM1=LCMDID(IPMEM,'constphysiq')
+ CALL LCMEQU(JPSAP,JPMEM1)
+ JPSAP=LCMGID(IPSAP,'contenu')
+ JPMEM1=LCMDID(IPMEM,'contenu')
+ CALL LCMEQU(JPSAP,JPMEM1)
+ JPSAP=LCMGID(IPSAP,'adresses')
+ JPMEM1=LCMDID(IPMEM,'adresses')
+ CALL LCMEQU(JPSAP,JPMEM1)
+ JPSAP=LCMGID(IPSAP,'geom')
+ JPMEM1=LCMDID(IPMEM,'geom')
+ CALL LCMEQU(JPSAP,JPMEM1)
+ JPMEM1=LCMLID(IPMEM,'calc',NCAL)
+ DO 30 ICAL=1,NCAL
+ DO IBM=1,NMIX
+ IF(TERP(ICAL,IBM).NE.0.0) GO TO 10
+ ENDDO
+ GO TO 30
+ 10 WRITE(TEXT12,'(4Hcalc,I8)') ICAL
+ JPSAP=LCMGID(IPSAP,TEXT12)
+ JPMEM2=LCMDIL(JPMEM1,ICAL)
+ KPSAP=LCMGID(JPSAP,'info')
+ KPMEM1=LCMDID(JPMEM2,'info')
+ CALL LCMEQU(KPSAP,KPMEM1)
+ KPSAP=LCMGID(JPSAP,'divers')
+ KPMEM1=LCMDID(JPMEM2,'divers')
+ CALL LCMEQU(KPSAP,KPMEM1)
+ CALL LCMLEN(JPSAP,'outflx',ILONG,ITYLCM)
+ IF(ILONG.NE.0) THEN
+ KPSAP=LCMGID(JPSAP,'outflx')
+ KPMEM1=LCMDID(JPMEM2,'outflx')
+ CALL LCMEQU(KPSAP,KPMEM1)
+ ENDIF
+ KPMEM1=LCMLID(JPMEM2,'mili',NMIL)
+ DO IBMOLD=1,NMIL
+ DO IBM=1,NMIX
+ IF((TERP(ICAL,IBM).NE.0.).AND.(MIXC(IBM).EQ.IBMOLD)) GO TO 20
+ ENDDO
+ CYCLE
+ 20 WRITE(TEXT12,'(4Hmili,I8)') IBMOLD
+ KPSAP=LCMGID(JPSAP,TEXT12)
+ KPMEM2=LCMDIL(KPMEM1,IBMOLD)
+ CALL LCMEQU(KPSAP,KPMEM2)
+ ENDDO
+ 30 CONTINUE
+ RETURN
+ END