!   TITLE:  par_array.mac (MANAGEMENT)
!
!   OBJECTIVE:
!
!   For the current part, this sub-macro stores the parameters and their values
!   into arrays.
!
!
!   COMMAND SYNTAX:
!
!      PAR_ARRAY, pararnam
!
!
!   DESCRIPTION:
!
!   This sub-macro creates a character array containing all active parameters
!   in the database, and a scalar array containing their corresponding values.
!   The only input necessary is a user specified array character name. This
!   name is the name of the array that will store all parameters of a given
!   parameter file.  The input name must be 5 characters or less, and will
!   also be used for the parameter value array.
!
!               pararnam = parameter file array name.  This name must be 5
!                          characters or less.
!
!   Both arrays will start with the character name as specidied in 'pararnam'.
!   However, the parameter value array name will end with a 'v' (-----v).
!   Therefore, the value array is just the parameter name array with a 'v'
!   attached to the end.
!
!   Only numeric scalar parameters are stored in the array.  These
!   parameters are deleted once stored.
!
!   Character scalars, arrays and parameters prefixed with an
!   underscore, "_" are not stored and are not deleted.
!
!   This macro also updates the system arrays:
!
!       PARFMXI
!       PAR_FILE
!       PFMXIBUF
!       PARFBUFF
!
!
!
*get,prkey_,active,0,prkey
/nopr

pararnam=arg1
!
!
*get,zzzparmx,parm,,max
*get,zzzzsclp,parm,,basic
zzzzsclp=zzzzsclp-1
!
*dim,zzzzparm,char,zzzzsclp+_indxoff
*dim,zzzzparv,array,zzzzsclp+_indxoff
!
zzzparof=0
!
*do,zzzzzzz1,1,zzzparmx-2,1     ! Store all scalar parameters in character
    !                           ! array, and their corresponding values in
    *if,zzzparof,eq,0,then      ! a scalar array.
        zzzzzzz2=zzzzzzz1
    *else
        zzzzzzz2=zzzzzzz1-zzzparof
    *endif
    !
    *get,zzzzpar,parm,,loc,zzzzzzz1
    *get,zzpartyp,parm,%zzzzpar%,type
    !
    *if,zzzzzzz1,eq,zzzparmx-2,then
        *if,zzpartyp,ne,0,then
            *exit
        *else
            zzzzparm(zzzzzzz2,1)=zzzzpar
        *endif
    *else
        zzzzparm(zzzzzzz2,1)=zzzzpar
    *endif
    !
    *if,zzpartyp,eq,0,then
        zzzzparv(zzzzzzz2,1)=%zzzzpar%
    *else
        zzzparof=zzzparof+1
    *endif
    !
*enddo
!
zzzzparm(zzzzsclp+1,1)='%pararnam%mxi'  ! store array maximum index parameter
zzzzparv(zzzzsclp+1,1)=zzzzsclp+1       ! store array maximum index
%pararnam%mxi=zzzzsclp+1                ! initiate parameter array file max. index
!
!
*dim,%pararnam%,char,zzzzsclp+1         ! rename character storage array
*dim,%pararnam%v,array,zzzzsclp+1       ! rename scalar storage array
!
*do,zijkl,1,zzzzsclp+1,1
    %pararnam%(zijkl,1)=zzzzparm(zijkl,1)
    %pararnam%v(zijkl,1)=zzzzparv(zijkl,1)
*enddo
!
!
*do,zijkl,1,%pararnam%mxi-1,1           ! remove all parameters that are not
    *do,zijkm,1,assmpmxi,1              ! elements of array ASSM_PAR.
        par1=%pararnam%(zijkl,1)
        par2=assm_par(zijkm,1)
        *if,par1,eq,par2,then
            *exit
        *else
            *if,zijkm,eq,assmpmxi,then
                    *set,%par1%,
            *endif
        *endif
    *enddo
*enddo
!
!
*set,zzpartyp,
!
*dim,buff,char,%pararnam%mxi    ! create buffer arrays to eliminate all parameters
*dim,buffv,array,%pararnam%mxi  ! from character array that are elements of array
!                               ! ASSM_PAR.
!
parof=0                         ! parameter offset value
!
*do,zijkl,1,%pararnam%mxi,1
    parcheck=0                  ! parameter check variable
    *do,zijkm,1,assmpmxi,1
        par1=%pararnam%(zijkl,1)
        par2=assm_par(zijkm,1)
        *if,par1,eq,par2,then
            parof=parof+1
            parcheck=1
        *endif
        !
        *if,zijkm,eq,assmpmxi,then
            *if,parcheck,eq,0,then
                index=zijkl-parof
                buff(index,1)=%pararnam%(zijkl,1)
                buffv(index,1)=%pararnam%v(zijkl,1)
            *endif
        *endif
    *enddo
*enddo
!
*set,%pararnam%(1),
*set,%pararnam%v(1),
!
*dim,%pararnam%,char,%pararnam%mxi-parof
*dim,%pararnam%v,array,%pararnam%mxi-parof
!
!
*do,zijkl,1,%pararnam%mxi-parof,1       ! reset parameter & value arrays from
    %pararnam%(zijkl,1)=buff(zijkl,1)   ! buffer arrays
    %pararnam%v(zijkl,1)=buffv(zijkl,1)
*enddo
!
%pararnam%v(%pararnam%mxi-parof,1)=%pararnam%mxi-parof
!
!
!
!
*if,modl_num,eq,1,then
    par_file(modl_num,1)=pararnam
*else
    *do,mnz,1,modl_num-1,1
        parfbuff(mnz,1)=par_file(mnz,1)
    *enddo
    !
    parfbuff(modl_num,1)=pararnam
    !
    *set,par_file(1),
    *dim,par_file,char,modl_num
    !
    *do,mnz,1,modl_num,1
        par_file(mnz,1)=parfbuff(mnz,1)
    *enddo
    !
    *set,parfbuff(1),
    *dim,parfbuff,char,modl_num+1
*endif
!
!
!
!
!
*if,modl_num,eq,1,then
    parfmxi(modl_num,1)=%pararnam%mxi-parof
*else
    *do,mnz,1,modl_num-1,1
        pfmxibuf(mnz,1)=parfmxi(mnz,1)
    *enddo
    !
    pfmxibuf(modl_num,1)=%pararnam%mxi-parof
    !
    *set,parfmxi(1),
    *dim,parfmxi,array,modl_num
    !
    *do,mnz,1,modl_num,1
        parfmxi(mnz,1)=pfmxibuf(mnz,1)
    *enddo
    !
    *set,pfmxibuf(1),
    *dim,pfmxibuf,array,modl_num+1
*endif
!
!
*set,%pararnam%mxi,
*set,zijkl,
*set,zijkm,
*set,par1,
*set,par2,
*set,index,
*set,pararnam,
*set,zzzzparm(1),
*set,zzzzparv(1),
*set,zzzzsclp,
*set,zzzzpar,
*set,zzzparmx,
*set,zzzparof,
*set,zzzzzzz1,
*set,zzzzzzz2,
*set,parcheck,
*set,buff(1),
*set,buffv(1),
*set,parof,
*set,mnz,
*set,_indxoff,

*if,prkey_,eq,1,then
    /go
*endif