summaryrefslogtreecommitdiff
path: root/Dragon
diff options
context:
space:
mode:
authorAlain Hebert <alainhebert@Alains-MacBook-Pro.local>2025-10-15 12:05:46 +0200
committerAlain Hebert <alainhebert@Alains-MacBook-Pro.local>2025-10-15 12:05:46 +0200
commit4dfbb001df4d32309b1b0d3553e5eb7717b9914c (patch)
tree625e1e002aefcdd5a87a27b3be2e3421eb89c810 /Dragon
parent881666deacd270006a96823f83691343b786df3a (diff)
#7: Missing PARAM group in APEX datafile produced by module APX:
Diffstat (limited to 'Dragon')
-rw-r--r--Dragon/src/APXCAT.f38
-rw-r--r--Dragon/src/APXGEP.f35
2 files changed, 63 insertions, 10 deletions
diff --git a/Dragon/src/APXCAT.f b/Dragon/src/APXCAT.f
index 78ae390..ba1cf25 100644
--- a/Dragon/src/APXCAT.f
+++ b/Dragon/src/APXCAT.f
@@ -46,7 +46,8 @@
PARAMETER (MAXPAR=50)
INTEGER RANK,TYPE,NBYTE,DIMSR(5)
INTEGER MUPLET(2*MAXPAR),MUPRHS(2*MAXPAR)
- CHARACTER HSMG*131,RECNAM*80,RECNA2*80,TEXT4*4,TEXT12*12
+ CHARACTER HSMG*131,RECNAM*80,RECNA2*80,REC100*100,TEXT4*4,
+ 1 TEXT12*12
LOGICAL COMTRE,LGERR,LGNEW(MAXPAR)
*----
* ALLOCATABLE ARRAYS
@@ -54,7 +55,8 @@
INTEGER, ALLOCATABLE, DIMENSION(:) :: IORRHS,JDEBAR,JARBVA,VINTE,
1 IDEBAR,IARBVA,IORIGI
REAL, ALLOCATABLE, DIMENSION(:) :: VREAL
- CHARACTER(LEN=8), ALLOCATABLE, DIMENSION(:) :: PARFMT_RHS
+ CHARACTER(LEN=8), ALLOCATABLE, DIMENSION(:) :: PARFMT_RHS,
+ 1 PARFMT_LHS
CHARACTER(LEN=12), ALLOCATABLE, DIMENSION(:) :: VCHAR
CHARACTER(LEN=80), ALLOCATABLE, DIMENSION(:) :: PARNAM_RHS,
1 PARNAM_LHS
@@ -97,7 +99,7 @@
*----
IDEM=0
NCALS=NCAL
- DO 170 ICAL=1,NCALR
+ DO 180 ICAL=1,NCALR
*----
* COMPUTE THE MUPLET VECTOR FROM THE RHS APEX FILE
*----
@@ -196,7 +198,7 @@
1 'SAME PARAMETERS AS ELEMENTARY CALCULATION NB ',TEXT4
DEALLOCATE(JARBVA,JDEBAR,IORRHS)
IDEM=IDEM+1
- GOTO 170
+ GOTO 180
ELSE
CALL XABORT('APXCAT: ELEMENTARY CALCULATION HAS THE '//
1 'SAME PARAMETERS AS ELEMENTARY CALCULATION NB '//TEXT4)
@@ -252,7 +254,35 @@
WRITE(RECNAM,'(4Hcalc,I8)') NCALS
WRITE(RECNA2,'(4Hcalc,I8)') ICAL
call hdf5_copy(IPRHS,RECNA2,IPAPX,RECNAM) ! IPRHS -> IPAPX
+*----
+* CREATE PARAM GROUP
+*----
+ CALL hdf5_create_group(IPAPX,TRIM(RECNAM)//"/PARAM")
+ CALL hdf5_read_data(IPAPX,"/paramdescrip/PARFMT",PARFMT_LHS)
+ DO 170 IPAR=1,NPAR
+ IF(MUPLET(IPAR).EQ.0) THEN
+ WRITE(HSMG,'(33HAPXCAT: UNDEFINED MUPLET ELEMENT=,I6)') IPAR
+ CALL XABORT(HSMG)
+ ENDIF
+ IV=MUPLET(IPAR)
+ WRITE(RECNAM,'(17H/paramvalues/PVAL,I8)') IPAR
+ WRITE(REC100,'(4Hcalc,I8,7H/PARAM/,A)') NCALS,PARNAM_LHS(IPAR)
+ IF(PARFMT_LHS(IPAR).EQ.'FLOTTANT') THEN
+ CALL hdf5_read_data(IPAPX,RECNAM,VREAL)
+ CALL hdf5_write_data(IPAPX,TRIM(REC100),VREAL(IV))
+ DEALLOCATE(VREAL)
+ ELSE IF(PARFMT_LHS(IPAR).EQ.'ENTIER') THEN
+ CALL hdf5_read_data(IPAPX,RECNAM,VINTE)
+ CALL hdf5_write_data(IPAPX,TRIM(REC100),VINTE(IV))
+ DEALLOCATE(VINTE)
+ ELSE IF(PARFMT_LHS(IPAR).EQ.'CHAINE') THEN
+ CALL hdf5_read_data(IPAPX,RECNAM,VCHAR)
+ CALL hdf5_write_data(IPAPX,TRIM(REC100),VCHAR(IV))
+ DEALLOCATE(VCHAR)
+ ENDIF
170 CONTINUE
+ DEALLOCATE(PARFMT_LHS)
+ 180 CONTINUE
* END OF LOOP ON ELEMENTARY CALCULATIONS. ********************
RETURN
END
diff --git a/Dragon/src/APXGEP.f b/Dragon/src/APXGEP.f
index 3716c05..58fa62b 100644
--- a/Dragon/src/APXGEP.f
+++ b/Dragon/src/APXGEP.f
@@ -51,15 +51,16 @@
INTEGER RANK,TYPE,NBYTE,DIMSR(5)
PARAMETER (NSTATE=40,MAXPAR=50)
INTEGER IDATA(NSTATE)
- CHARACTER TEXT4*4,TEXT12*12,HSMG*131
+ CHARACTER TEXT4*4,TEXT12*12,HSMG*131,RECNAM*80,REC100*100
LOGICAL LGERR,COMTRE,LAST
*----
* ALLOCATABLE ARRAYS
*----
INTEGER, ALLOCATABLE, DIMENSION(:) :: IDEBAR,IARBVA,IORIGI,IVAL0,
- 1 DIMS_APX
- INTEGER, ALLOCATABLE, DIMENSION(:) :: JDEBAR,JARBVA
+ 1 DIMS_APX,JDEBAR,JARBVA,VINTE
+ REAL, ALLOCATABLE, DIMENSION(:) :: VREAL
CHARACTER(LEN=8), ALLOCATABLE, DIMENSION(:) :: PARFMT
+ CHARACTER(LEN=12), ALLOCATABLE, DIMENSION(:) :: VCHAR
CHARACTER(LEN=80), ALLOCATABLE, DIMENSION(:) :: PARNAM
*----
* RECOVER INFORMATION FROM THE 'DIMSAP' PARAMETER LIST.
@@ -107,11 +108,33 @@
WRITE(6,110) (MUPLET(I),I=1,NPAR)
WRITE(6,'(/)')
ENDIF
- DO 15 I=1,NPAR
- IF(MUPLET(I).EQ.0) THEN
- WRITE(HSMG,'(33HAPXGEP: UNDEFINED MUPLET ELEMENT=,I6)') I
+*----
+* CREATE PARAM GROUP
+*----
+ CALL hdf5_read_data(IPAPX,"/NCALS",NCALS)
+ WRITE(RECNAM,'(4Hcalc,I8)') NCALS
+ CALL hdf5_create_group(IPAPX,TRIM(RECNAM)//"/PARAM")
+ DO 15 IPAR=1,NPAR
+ IF(MUPLET(IPAR).EQ.0) THEN
+ WRITE(HSMG,'(33HAPXGEP: UNDEFINED MUPLET ELEMENT=,I6)') IPAR
CALL XABORT(HSMG)
ENDIF
+ IV=MUPLET(IPAR)
+ WRITE(RECNAM,'(17H/paramvalues/PVAL,I8)') IPAR
+ WRITE(REC100,'(4Hcalc,I8,7H/PARAM/,A)') NCALS,PARNAM(IPAR)
+ IF(PARFMT(IPAR).EQ.'FLOTTANT') THEN
+ CALL hdf5_read_data(IPAPX,RECNAM,VREAL)
+ CALL hdf5_write_data(IPAPX,TRIM(REC100),VREAL(IV))
+ DEALLOCATE(VREAL)
+ ELSE IF(PARFMT(IPAR).EQ.'ENTIER') THEN
+ CALL hdf5_read_data(IPAPX,RECNAM,VINTE)
+ CALL hdf5_write_data(IPAPX,TRIM(REC100),VINTE(IV))
+ DEALLOCATE(VINTE)
+ ELSE IF(PARFMT(IPAR).EQ.'CHAINE') THEN
+ CALL hdf5_read_data(IPAPX,RECNAM,VCHAR)
+ CALL hdf5_write_data(IPAPX,TRIM(REC100),VCHAR(IV))
+ DEALLOCATE(VCHAR)
+ ENDIF
15 CONTINUE
*----
* INTRODUCE VALUES INTO GLOBAL PARAMETER TREE.