Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
mnpv9.f 6.19 KiB
C
C
C --------------------------------------------------------------
C
      SUBROUTINE Prepare_Storage (A, Nnndat, Kkkidc, Numidc,
     *   Nidc, Kdat)
C
C *** Purpose -- Create the arrays Th, G, X, in lowest possible storage
C ***            location so that other needed arrays will not wipe out
C ***            the storage
C
      use over_common_m
      use oops_common_m
      use fixedi_m
      use ifwrit_m
      use exploc_common_m
      use samxxx_common_m
      use array_sizes_common_m
      use oopsch_common_m
      use namfil_common_m
      use AllocateFunctions_m
      IMPLICIT DOUBLE PRECISION (a-h,o-z)
      real(kind=8),allocatable,dimension(:)::A_Igx
      DIMENSION A(-Msize:Msize)
C
C
      IF (Ntgrlq.GT.0) THEN
C ***    Open SAM30.DAT for integral quantities, read dimensions
         CALL Oldopn (30, Sam30x, 1)
         READ (30) Nnndat
         CLOSE (UNIT=30)
      ELSE
         Nnndat = Kdat*Numcro
      END IF
C
C *** Reorganize array storage
      Nig   = Nvpall*Nnndat
      IF (Nig   .EQ.0) Nig = 1
      IF (Ksolve.EQ.2) Nig = 1
      Nix  = Kkkidc*Nnndat
      IF (Nix.EQ.0) Nix = 1
      N = Nnpar*Nnndat
      IF (N.EQ.0) N = 1
      Kgx = N
C
C Ensure all arrays are dimensions large enough
      IF (Ksolve.NE.2 .OR. Nfpall.GT.Nvpall) THEN
          CALL SetGStorage (A(Iiuif), Nig, Nix, Kgx,
     *      Kkkidc, Numidc, Kdat, Nidc)
      END IF

      ! theoretical data start at Iwsigx or Ivsigx
      IF (Iwsigx.LT.Ivsigx) THEN
         I   = Idimen (Iwsigx, -1, '1          Iwsigx, -1')  ! release memory  for Iwsigx         
      ELSE
         I   = Idimen (Ivsigx, -1, '1          Ivsigx, -1')  ! release memory  for Ivsigx       
      END IF
      Ith = Idimen (Nnndat,  1, 'Ith       Nnndat,  1')
     
C Allocate the temporary arrays needed
      call allocate_real_data(A_Ig, nig)
      call allocate_real_data(A_Ix, nix)
      call allocate_real_data(A_igx, Kgx)

C
C *** Copy Wsigxx into Th and Wd?sig into Gx
C         A(Iwsigx) -> A(Ith)
C        (  A(Iwdasi), A_Iwdbsi ) ->    A_Igx
      if (Ith.ne.Iwsigx) then
         N = Kdat*Numcro
         DO I=1,N
            A(Ith + I -1) =  A(Iwsigx + I -1)
         END DO
      end if
      CALL Reorg ( A_Igx,  A(Iwdasi), A_Iwdbsi , Kdat)
C
C
      IF (Ksolve.NE.2 .OR. Nfpall.GT.Nvpall) THEN
C ***    Put A_Igx into A_Ig
C  That is: reorder derivatives from A_Igx in correct order into A_Ig
         CALL Setg (A(Iiuif), A_Ig, A_Ix, A_Igx,
     *      Kkkidc, Numidc, Kdat, Nidc)
      END IF
C
C - - - - - - - - - - - - - - - - - - - - - - - - - - - - >
C
      IF (Ksolve.NE.2 .AND. Nvpdtp.NE.0) THEN
         Igtild = Idimen (Nvpdtp*Kdat, 1, 'Igtild    Nvpdtp*Kdat, 1')
         CALL Read_Data_Red_Par (A_Ig, A_Ix, A(Igtild), 
     *      Nnndat, Kkkidc, Numidc, Nidc)
      END IF

      deallocate(A_Igx)
C
      RETURN
      END
C
C
C --------------------------------------------------------------
C
      SUBROUTINE Get_Organized (A)
C
C *** Purpose -- Read arrays, etc, in preparation for Bayes
C
      use oops_common_m
      use fixedi_m
      use ifwrit_m
      use exploc_common_m
      use samxxx_common_m
      use EndfData_common_m  
      IMPLICIT NONE
      REAL(KIND=8):: A(-Msize:Msize)
      integer::i, ie, idimen
      external idimen

      Ksolve = Ks_Res
      IF (Kgenpd.EQ.1) Ksolve = 2     
C
C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <    
      IF (Ksolve.NE.2) THEN
         call covData%saveOrigUParam()       
      END IF
C
      RETURN
      END
C
C
C --------------------------------------------------------------
C
      SUBROUTINE Get_Idc (A, Iw,  Istat, Numidc, Ifree, Kkkidc,
     *   N1, N2, Nnndat, Kdat)
      use oops_common_m
      use fixedi_m
      use ifwrit_m
      use exploc_common_m
      use oopsch_common_m
      use namfil_common_m
      use array_sizes_common_m
      IMPLICIT DOUBLE PRECISION (a-h,o-z)
      DIMENSION A(-Msize:Msize)
      Iw = 1
      Istat = 1
      Ifree = 0
C
      IF (Kidcxx.EQ.1) THEN
C ***    Here prepare derivatives for implicit data covariance matrix
C ***       when part of idcm is generated directly by SAMMY from
C ***       normalization and background parameters
         Jidc1 = Kkkidc**2
         Iw = Idimen (Jidc1, 1, 'Iw        Jidc1, 1')
C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <
         Ie = Idimen (Kdat , 1, 'Ie        Kdat , 1')
         IF (N1.GT.0) THEN
            Jidc4 = 6
            Ip1 = Idimen (Jidc4, 1, 'Ip1       Jidc4, 1')
            Iw1 = Idimen (Jidc4, 1, 'Iw1       Jidc4, 1')
         ELSE
            Jidc4 = 1
            Ip1 = 1
            Iw1 = 1
         END IF
         IF (N2.GT.0) THEN
            Jidc5 = N2
            Ip2 = Idimen (Jidc5, 1, 'Ip2       Jidc5, 1')
            Ik2 = Idimen (Jidc5, 1, 'Ik2       Jidc5, 1')
            Ibn = Idimen (Jidc5, 1, 'Ibn       Jidc5, 1')
            Ibm = Idimen (Jidc5, 1, 'Ibm       Jidc5, 1')
         ELSE
            Jidc5 = 1
            Ip2 = 1
            Ik2 = 1
            Ibn = 1
            Ibm = 1
         END IF
         CALL Findxx (A(Ith), A(Iw), A_Ix, A(Ie), A(Ip1), A(Iw1),
     *      A(Ip2), A(Ik2), A(Ibn), A(Ibm), N1, N2, Numidc, Kkkidc,
     *      Kdat)
         I = Idimen (Ie, -1, '          Ie, -1')
C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - >
C
      ELSE IF (Kidcxx.EQ.2) THEN
C ***    Here when user-supplied Implicit Data Covariance Matrix plus
C ***       (maybe) PUPs
         Jidc1 = Kkkidc**2
         Iw    = Idimen (Jidc1, 1, 'Iw         Jidc1, 1')
         Istat = Idimen (Kdat , 1, 'Istat      Kdat , 1')
C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <
         Ie = Idimen (Ndat, 1, 'Ie        Ndat, 1')
         CALL Read_Cov_Idc (A(Iw), A_Ix, A(Istat), A(Ie), Numidc,
     *      Kkkidc, Ndat, Ifree, Numcro)
C ***    reads user-supplied IDC
         I = Idimen (Ie, -1, '          Ie, -1')
C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - >
         CLOSE (UNIT=30)
C
      ELSE IF (Numpup.GT.0) THEN
C ***    Here PUPs are used, but no other kind of IDCM
         Jidc1 = Numpup**2
         Iw = Idimen (Jidc1, 1, 'Iw        Jidc1, 1')
         CALL Zero_Array (A(Iw), Jidc1)
         Istat = Idimen (1, 1, 'Istat     1, 1')
C
      ELSE
         Istat = Idimen (1, 1, 'Istat     1, 1')
      END IF
C
      RETURN
      END